Skip to content

Commit

Permalink
drm/xe: make gt_remove use devm
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Matthew Auld committed May 22, 2024
1 parent 1bd985f commit cd506a3
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 30 deletions.
22 changes: 2 additions & 20 deletions drivers/gpu/drm/xe/xe_device.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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)
Expand All @@ -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:
Expand All @@ -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);
}

Expand Down
16 changes: 7 additions & 9 deletions drivers/gpu/drm/xe/xe_gt.c
Original file line number Diff line number Diff line change
Expand Up @@ -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(&gt->uc);
Expand Down Expand Up @@ -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)
Expand Down
1 change: 0 additions & 1 deletion drivers/gpu/drm/xe/xe_gt.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit cd506a3

Please sign in to comment.