Commit c93b6de7 authored by Gustavo Sousa's avatar Gustavo Sousa Committed by Rodrigo Vivi

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: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://lore.kernel.org/r/20230518215651.502159-3-gustavo.sousa@intel.comSigned-off-by: default avatarGustavo Sousa <gustavo.sousa@intel.com>
Signed-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
parent b67ece5b
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include <drm/drm_gem_ttm_helper.h> #include <drm/drm_gem_ttm_helper.h>
#include <drm/drm_ioctl.h> #include <drm/drm_ioctl.h>
#include <drm/drm_managed.h> #include <drm/drm_managed.h>
#include <drm/drm_print.h>
#include <drm/xe_drm.h> #include <drm/xe_drm.h>
#include "regs/xe_regs.h" #include "regs/xe_regs.h"
...@@ -157,7 +158,9 @@ static void xe_device_destroy(struct drm_device *dev, void *dummy) ...@@ -157,7 +158,9 @@ static void xe_device_destroy(struct drm_device *dev, void *dummy)
{ {
struct xe_device *xe = to_xe_device(dev); struct xe_device *xe = to_xe_device(dev);
if (xe->ordered_wq)
destroy_workqueue(xe->ordered_wq); destroy_workqueue(xe->ordered_wq);
ttm_device_fini(&xe->ttm); ttm_device_fini(&xe->ttm);
} }
...@@ -205,6 +208,11 @@ struct xe_device *xe_device_create(struct pci_dev *pdev, ...@@ -205,6 +208,11 @@ struct xe_device *xe_device_create(struct pci_dev *pdev,
INIT_LIST_HEAD(&xe->pinned.evicted); INIT_LIST_HEAD(&xe->pinned.evicted);
xe->ordered_wq = alloc_ordered_workqueue("xe-ordered-wq", 0); 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); drmm_mutex_init(&xe->drm, &xe->sb_lock);
xe->enabled_irq_mask = ~0; xe->enabled_irq_mask = ~0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment