Commit b67ece5b authored by Gustavo Sousa's avatar Gustavo Sousa Committed by Rodrigo Vivi
Browse files

drm/xe: Call drmm_add_action_or_reset() early in xe_device_create()



Otherwise no cleanup is actually done if we branch to err_put.

This works for now: currently we do know that, once inside
xe_device_destroy(), ttm_device_init() was successful so we can safely
call ttm_device_fini(); and, for xe->ordered_wq, there is an upcoming
commit to check its value before calling destroy_workqueue().

However, we might need change this in the future if we have more
initializers called that can fail in a way that we can not know which
one was it once inside xe_device_destroy().

Reviewed-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://lore.kernel.org/r/20230518215651.502159-2-gustavo.sousa@intel.com


Signed-off-by: default avatarGustavo Sousa <gustavo.sousa@intel.com>
Signed-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
parent 6fedf842
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -181,6 +181,10 @@ struct xe_device *xe_device_create(struct pci_dev *pdev,
	if (WARN_ON(err))
		goto err_put;

	err = drmm_add_action_or_reset(&xe->drm, xe_device_destroy, NULL);
	if (err)
		goto err_put;

	xe->info.devid = pdev->device;
	xe->info.revid = pdev->revision;
	xe->info.enable_guc = enable_guc;
@@ -205,10 +209,6 @@ struct xe_device *xe_device_create(struct pci_dev *pdev,
	drmm_mutex_init(&xe->drm, &xe->sb_lock);
	xe->enabled_irq_mask = ~0;

	err = drmm_add_action_or_reset(&xe->drm, xe_device_destroy, NULL);
	if (err)
		goto err_put;

	return xe;

err_put: