From c93b6de7cc7610a269afe0e84a0b3e2b81a746cd Mon Sep 17 00:00:00 2001 From: Gustavo Sousa Date: Thu, 18 May 2023 18:56:51 -0300 Subject: [PATCH] drm/xe: Fail xe_device_create() if wq allocation fails Let's make sure we give the driver a valid workqueue. While at it, also make sure to call destroy_workqueue() only if the workqueue is a valid one. That is necessary because xe_device_destroy() is indirectly called as part of the cleanup process of a failed xe_device_create(). Reviewed-by: Rodrigo Vivi Link: https://lore.kernel.org/r/20230518215651.502159-3-gustavo.sousa@intel.com Signed-off-by: Gustavo Sousa Signed-off-by: Rodrigo Vivi --- drivers/gpu/drm/xe/xe_device.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c index 42456d044827..2c65eb84e6e9 100644 --- a/drivers/gpu/drm/xe/xe_device.c +++ b/drivers/gpu/drm/xe/xe_device.c @@ -10,6 +10,7 @@ #include #include #include +#include #include #include "regs/xe_regs.h" @@ -157,7 +158,9 @@ static void xe_device_destroy(struct drm_device *dev, void *dummy) { struct xe_device *xe = to_xe_device(dev); - destroy_workqueue(xe->ordered_wq); + if (xe->ordered_wq) + destroy_workqueue(xe->ordered_wq); + ttm_device_fini(&xe->ttm); } @@ -205,6 +208,11 @@ struct xe_device *xe_device_create(struct pci_dev *pdev, INIT_LIST_HEAD(&xe->pinned.evicted); xe->ordered_wq = alloc_ordered_workqueue("xe-ordered-wq", 0); + if (!xe->ordered_wq) { + drm_err(&xe->drm, "Failed to allocate xe-ordered-wq\n"); + err = -ENOMEM; + goto err_put; + } drmm_mutex_init(&xe->drm, &xe->sb_lock); xe->enabled_irq_mask = ~0;