On Thu, Jul 03, 2025 at 10:12:41AM +0200, Louis Chauvet wrote: > > > Le 03/07/2025 à 01:28, Matthew Brost a écrit : > > 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.chau...@bootlin.com> > > Signed-off-by: Matthew Brost <matthew.br...@intel.com> > > Reviewed-by: Louis Chauvet <louis.chau...@bootlin.com> > > As you need it in xe, I don't know the process to apply the patch. Should I > apply it on drm-misc-next? >
I think we can apply it to drm-misc-next then cherry pick into the needed Xe branches. I'll confirm with my maintainers and apply this to drm-misc-next. Thanks, Matt > Thanks, > Louis Chauvet > > > --- > > drivers/gpu/drm/vkms/vkms_crtc.c | 2 -- > > include/drm/drm_managed.h | 15 +++++++++++++-- > > 2 files changed, 13 insertions(+), 4 deletions(-) > > > > diff --git a/drivers/gpu/drm/vkms/vkms_crtc.c > > b/drivers/gpu/drm/vkms/vkms_crtc.c > > index 8c9898b9055d..e60573e0f3e9 100644 > > --- a/drivers/gpu/drm/vkms/vkms_crtc.c > > +++ b/drivers/gpu/drm/vkms/vkms_crtc.c > > @@ -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; > > } > > diff --git a/include/drm/drm_managed.h b/include/drm/drm_managed.h > > index 53017cc609ac..72bfac002c06 100644 > > --- a/include/drm/drm_managed.h > > +++ b/include/drm/drm_managed.h > > @@ -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 > > -- > Louis Chauvet, Bootlin > Embedded Linux and Kernel engineering > https://bootlin.com >