mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 22:21:40 +00:00
drm/xe: make gt_remove use devm
No need to hand roll the onion unwind here, just move gt_remove over to devm which will already have the correct ordering. Signed-off-by: Matthew Auld <matthew.auld@intel.com> Cc: Andrzej Hajda <andrzej.hajda@intel.com> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com> Reviewed-by: Andrzej Hajda <andrzej.hajda@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20240522102143.128069-31-matthew.auld@intel.com
This commit is contained in:
parent
1bd985ff9f
commit
cd506a33b0
@ -538,7 +538,6 @@ int xe_device_probe(struct xe_device *xe)
|
||||
struct xe_tile *tile;
|
||||
struct xe_gt *gt;
|
||||
int err;
|
||||
u8 last_gt;
|
||||
u8 id;
|
||||
|
||||
xe_pat_init_early(xe);
|
||||
@ -626,18 +625,16 @@ int xe_device_probe(struct xe_device *xe)
|
||||
goto err_irq_shutdown;
|
||||
|
||||
for_each_gt(gt, xe, id) {
|
||||
last_gt = id;
|
||||
|
||||
err = xe_gt_init(gt);
|
||||
if (err)
|
||||
goto err_fini_gt;
|
||||
goto err_irq_shutdown;
|
||||
}
|
||||
|
||||
xe_heci_gsc_init(xe);
|
||||
|
||||
err = xe_display_init(xe);
|
||||
if (err)
|
||||
goto err_fini_gt;
|
||||
goto err_irq_shutdown;
|
||||
|
||||
err = drm_dev_register(&xe->drm, 0);
|
||||
if (err)
|
||||
@ -653,15 +650,6 @@ int xe_device_probe(struct xe_device *xe)
|
||||
|
||||
err_fini_display:
|
||||
xe_display_driver_remove(xe);
|
||||
|
||||
err_fini_gt:
|
||||
for_each_gt(gt, xe, id) {
|
||||
if (id < last_gt)
|
||||
xe_gt_remove(gt);
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
err_irq_shutdown:
|
||||
xe_irq_shutdown(xe);
|
||||
err:
|
||||
@ -679,18 +667,12 @@ static void xe_device_remove_display(struct xe_device *xe)
|
||||
|
||||
void xe_device_remove(struct xe_device *xe)
|
||||
{
|
||||
struct xe_gt *gt;
|
||||
u8 id;
|
||||
|
||||
xe_device_remove_display(xe);
|
||||
|
||||
xe_display_fini(xe);
|
||||
|
||||
xe_heci_gsc_fini(xe);
|
||||
|
||||
for_each_gt(gt, xe, id)
|
||||
xe_gt_remove(gt);
|
||||
|
||||
xe_irq_shutdown(xe);
|
||||
}
|
||||
|
||||
|
@ -93,16 +93,14 @@ void xe_gt_sanitize(struct xe_gt *gt)
|
||||
gt->uc.guc.submission_state.enabled = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* xe_gt_remove() - Clean up the GT structures before driver removal
|
||||
* @gt: the GT object
|
||||
*
|
||||
* This function should only act on objects/structures that must be cleaned
|
||||
* before the driver removal callback is complete and therefore can't be
|
||||
* deferred to a drmm action.
|
||||
/*
|
||||
* Clean up the GT structures before driver removal. This function should only
|
||||
* act on objects/structures that must be cleaned before the driver removal
|
||||
* callback is complete and therefore can't be deferred to a drmm action.
|
||||
*/
|
||||
void xe_gt_remove(struct xe_gt *gt)
|
||||
static void gt_remove(void *arg)
|
||||
{
|
||||
struct xe_gt *gt = arg;
|
||||
int i;
|
||||
|
||||
xe_uc_remove(>->uc);
|
||||
@ -568,7 +566,7 @@ int xe_gt_init(struct xe_gt *gt)
|
||||
|
||||
xe_gt_record_user_engines(gt);
|
||||
|
||||
return 0;
|
||||
return devm_add_action_or_reset(gt_to_xe(gt)->drm.dev, gt_remove, gt);
|
||||
}
|
||||
|
||||
void xe_gt_record_user_engines(struct xe_gt *gt)
|
||||
|
@ -56,7 +56,6 @@ int xe_gt_suspend(struct xe_gt *gt);
|
||||
int xe_gt_resume(struct xe_gt *gt);
|
||||
void xe_gt_reset_async(struct xe_gt *gt);
|
||||
void xe_gt_sanitize(struct xe_gt *gt);
|
||||
void xe_gt_remove(struct xe_gt *gt);
|
||||
|
||||
/**
|
||||
* xe_gt_any_hw_engine_by_reset_domain - scan the list of engines and return the
|
||||
|
Loading…
Reference in New Issue
Block a user