Commit cd506a33 authored by Matthew Auld's avatar Matthew Auld
Browse files

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: default avatarMatthew Auld <matthew.auld@intel.com>
Cc: Andrzej Hajda <andrzej.hajda@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Reviewed-by: default avatarAndrzej Hajda <andrzej.hajda@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240522102143.128069-31-matthew.auld@intel.com
parent 1bd985ff
Loading
Loading
Loading
Loading
+2 −20
Original line number Diff line number Diff line
@@ -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);
}

+7 −9
Original line number Diff line number Diff line
@@ -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);
@@ -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)
+0 −1
Original line number Diff line number Diff line
@@ -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