mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-04 02:34:10 -04:00
drm/xe/oa: Move fini to xe_oa
Like done with other functions, cleanup the error handling in xe_device_probe() by moving the OA fini to be handled by xe_oa itself, which relies on devm to call the cleanup function. Reviewed-by: Ashutosh Dixit <ashutosh.dixit@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20250213192909.996148-9-lucas.demarchi@intel.com Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
This commit is contained in:
@@ -873,7 +873,7 @@ int xe_device_probe(struct xe_device *xe)
|
||||
|
||||
err = xe_display_init(xe);
|
||||
if (err)
|
||||
goto err_fini_oa;
|
||||
return err;
|
||||
|
||||
err = xe_pxp_init(xe);
|
||||
if (err)
|
||||
@@ -905,9 +905,6 @@ int xe_device_probe(struct xe_device *xe)
|
||||
err_fini_display:
|
||||
xe_display_driver_remove(xe);
|
||||
|
||||
err_fini_oa:
|
||||
xe_oa_fini(xe);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -980,8 +977,6 @@ void xe_device_remove(struct xe_device *xe)
|
||||
|
||||
xe_device_remove_display(xe);
|
||||
|
||||
xe_oa_fini(xe);
|
||||
|
||||
xe_heci_gsc_fini(xe);
|
||||
|
||||
xe_device_call_remove_actions(xe);
|
||||
|
||||
@@ -2641,6 +2641,27 @@ static void xe_oa_init_supported_formats(struct xe_oa *oa)
|
||||
}
|
||||
}
|
||||
|
||||
static int destroy_config(int id, void *p, void *data)
|
||||
{
|
||||
xe_oa_config_put(p);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void xe_oa_fini(void *arg)
|
||||
{
|
||||
struct xe_device *xe = arg;
|
||||
struct xe_oa *oa = &xe->oa;
|
||||
|
||||
if (!oa->xe)
|
||||
return;
|
||||
|
||||
idr_for_each(&oa->metrics_idr, destroy_config, oa);
|
||||
idr_destroy(&oa->metrics_idr);
|
||||
|
||||
oa->xe = NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* xe_oa_init - OA initialization during device probe
|
||||
* @xe: @xe_device
|
||||
@@ -2672,31 +2693,10 @@ int xe_oa_init(struct xe_device *xe)
|
||||
}
|
||||
|
||||
xe_oa_init_supported_formats(oa);
|
||||
return 0;
|
||||
|
||||
return devm_add_action_or_reset(xe->drm.dev, xe_oa_fini, xe);
|
||||
|
||||
exit:
|
||||
oa->xe = NULL;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int destroy_config(int id, void *p, void *data)
|
||||
{
|
||||
xe_oa_config_put(p);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* xe_oa_fini - OA de-initialization during device remove
|
||||
* @xe: @xe_device
|
||||
*/
|
||||
void xe_oa_fini(struct xe_device *xe)
|
||||
{
|
||||
struct xe_oa *oa = &xe->oa;
|
||||
|
||||
if (!oa->xe)
|
||||
return;
|
||||
|
||||
idr_for_each(&oa->metrics_idr, destroy_config, oa);
|
||||
idr_destroy(&oa->metrics_idr);
|
||||
|
||||
oa->xe = NULL;
|
||||
}
|
||||
|
||||
@@ -15,7 +15,6 @@ struct xe_gt;
|
||||
struct xe_hw_engine;
|
||||
|
||||
int xe_oa_init(struct xe_device *xe);
|
||||
void xe_oa_fini(struct xe_device *xe);
|
||||
void xe_oa_register(struct xe_device *xe);
|
||||
void xe_oa_unregister(struct xe_device *xe);
|
||||
int xe_oa_stream_open_ioctl(struct drm_device *dev, u64 data, struct drm_file *file);
|
||||
|
||||
Reference in New Issue
Block a user