drm: Simplify drmm_alloc_ordered_workqueue return

Rather than returning ERR_PTR or NULL on failure, replace the NULL
return with ERR_PTR(-ENOMEM). This simplifies error handling at the
caller. While here, add kernel documentation for
drmm_alloc_ordered_workqueue.

Cc: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Link: https://lore.kernel.org/r/20250702232831.3271328-2-matthew.brost@intel.com
This commit is contained in:
Matthew Brost 2025-07-02 16:28:31 -07:00
parent b4cd18f485
commit 86c947b363
2 changed files with 13 additions and 4 deletions

View File

@ -302,8 +302,6 @@ struct vkms_output *vkms_crtc_init(struct drm_device *dev, struct drm_plane *pri
vkms_out->composer_workq = drmm_alloc_ordered_workqueue(dev, "vkms_composer", 0);
if (IS_ERR(vkms_out->composer_workq))
return ERR_CAST(vkms_out->composer_workq);
if (!vkms_out->composer_workq)
return ERR_PTR(-ENOMEM);
return vkms_out;
}

View File

@ -129,14 +129,25 @@ void __drmm_mutex_release(struct drm_device *dev, void *res);
void __drmm_workqueue_release(struct drm_device *device, void *wq);
/**
* drmm_alloc_ordered_workqueue - &drm_device managed alloc_ordered_workqueue()
* @dev: DRM device
* @fmt: printf format for the name of the workqueue
* @flags: WQ_* flags (only WQ_FREEZABLE and WQ_MEM_RECLAIM are meaningful)
* @args: args for @fmt
*
* This is a &drm_device-managed version of alloc_ordered_workqueue(). The
* allocated workqueue is automatically destroyed on the final drm_dev_put().
*
* Returns: workqueue on success, negative ERR_PTR otherwise.
*/
#define drmm_alloc_ordered_workqueue(dev, fmt, flags, args...) \
({ \
struct workqueue_struct *wq = alloc_ordered_workqueue(fmt, flags, ##args); \
wq ? ({ \
int ret = drmm_add_action_or_reset(dev, __drmm_workqueue_release, wq); \
ret ? ERR_PTR(ret) : wq; \
}) : \
wq; \
}) : ERR_PTR(-ENOMEM); \
})
#endif