Message ID | 20240315145034.3972749-2-quic_jhugo@quicinc.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm: Add DRM managed workqueues | expand |
Hi Jeffrey, kernel test robot noticed the following build warnings: [auto build test WARNING on drm-misc/drm-misc-next] [also build test WARNING on linus/master v6.8 next-20240315] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Jeffrey-Hugo/drm-Add-DRM-managed-alloc_workqueue-and-alloc_ordered_workqueue/20240315-225330 base: git://anongit.freedesktop.org/drm/drm-misc drm-misc-next patch link: https://lore.kernel.org/r/20240315145034.3972749-2-quic_jhugo%40quicinc.com patch subject: [PATCH 1/2] drm: Add DRM-managed alloc_workqueue() and alloc_ordered_workqueue() config: parisc-defconfig (https://download.01.org/0day-ci/archive/20240316/202403160449.IaCY0Cl5-lkp@intel.com/config) compiler: hppa-linux-gcc (GCC) 13.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240316/202403160449.IaCY0Cl5-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202403160449.IaCY0Cl5-lkp@intel.com/ All warnings (new ones prefixed by >>): >> drivers/gpu/drm/drm_managed.c:336: warning: Function parameter or struct member 'fmt' not described in 'drmm_alloc_workqueue' >> drivers/gpu/drm/drm_managed.c:336: warning: Function parameter or struct member 'flags' not described in 'drmm_alloc_workqueue' >> drivers/gpu/drm/drm_managed.c:336: warning: Function parameter or struct member 'max_active' not described in 'drmm_alloc_workqueue' >> drivers/gpu/drm/drm_managed.c:336: warning: Excess function parameter 'wq' description in 'drmm_alloc_workqueue' >> drivers/gpu/drm/drm_managed.c:374: warning: Function parameter or struct member 'fmt' not described in 'drmm_alloc_ordered_workqueue' >> drivers/gpu/drm/drm_managed.c:374: warning: Function parameter or struct member 'flags' not described in 'drmm_alloc_ordered_workqueue' >> drivers/gpu/drm/drm_managed.c:374: warning: Excess function parameter 'wq' description in 'drmm_alloc_ordered_workqueue' vim +336 drivers/gpu/drm/drm_managed.c 320 321 /** 322 * drmm_alloc_workqueue - &drm_device-managed alloc_workqueue() 323 * @dev: DRM device 324 * @wq: workqueue to be allocated 325 * 326 * Returns: 327 * Valid pointer on success, NULL on error. 328 * 329 * This is a &drm_device-managed version of alloc_workqueue(). 330 * The initialized lock is automatically destroyed on the final 331 * drm_dev_put(). 332 */ 333 struct workqueue_struct *drmm_alloc_workqueue(struct drm_device *dev, 334 const char *fmt, unsigned int flags, 335 int max_active, ...) > 336 { 337 struct workqueue_struct *wq; 338 va_list args; 339 int ret; 340 341 va_start(args, max_active); 342 wq = alloc_workqueue(fmt, flags, max_active, args); 343 va_end(args); 344 345 if (!wq) 346 return NULL; 347 348 ret = drmm_add_action_or_reset(dev, drmm_destroy_workqueue, wq); 349 if (ret) { 350 destroy_workqueue(wq); 351 return NULL; 352 } 353 354 return wq; 355 } 356 EXPORT_SYMBOL(drmm_alloc_workqueue); 357 358 /** 359 * drmm_alloc_ordered_workqueue - &drm_device-managed 360 * alloc_ordered_workqueue() 361 * @dev: DRM device 362 * @wq: workqueue to be allocated 363 * 364 * Returns: 365 * Valid pointer on success, NULL on error. 366 * 367 * This is a &drm_device-managed version of alloc_ordered_workqueue(). 368 * The initialized lock is automatically destroyed on the final 369 * drm_dev_put(). 370 */ 371 struct workqueue_struct *drmm_alloc_ordered_workqueue(struct drm_device *dev, 372 const char *fmt, 373 unsigned int flags, ...) > 374 {
diff --git a/drivers/gpu/drm/drm_managed.c b/drivers/gpu/drm/drm_managed.c index 7646f67bda4e..d5135a471ff2 100644 --- a/drivers/gpu/drm/drm_managed.c +++ b/drivers/gpu/drm/drm_managed.c @@ -310,3 +310,85 @@ void __drmm_mutex_release(struct drm_device *dev, void *res) mutex_destroy(lock); } EXPORT_SYMBOL(__drmm_mutex_release); + +static void drmm_destroy_workqueue(struct drm_device *dev, void *res) +{ + struct workqueue_struct *wq = res; + + destroy_workqueue(wq); +} + +/** + * drmm_alloc_workqueue - &drm_device-managed alloc_workqueue() + * @dev: DRM device + * @wq: workqueue to be allocated + * + * Returns: + * Valid pointer on success, NULL on error. + * + * This is a &drm_device-managed version of alloc_workqueue(). + * The initialized lock is automatically destroyed on the final + * drm_dev_put(). + */ +struct workqueue_struct *drmm_alloc_workqueue(struct drm_device *dev, + const char *fmt, unsigned int flags, + int max_active, ...) +{ + struct workqueue_struct *wq; + va_list args; + int ret; + + va_start(args, max_active); + wq = alloc_workqueue(fmt, flags, max_active, args); + va_end(args); + + if (!wq) + return NULL; + + ret = drmm_add_action_or_reset(dev, drmm_destroy_workqueue, wq); + if (ret) { + destroy_workqueue(wq); + return NULL; + } + + return wq; +} +EXPORT_SYMBOL(drmm_alloc_workqueue); + +/** + * drmm_alloc_ordered_workqueue - &drm_device-managed + * alloc_ordered_workqueue() + * @dev: DRM device + * @wq: workqueue to be allocated + * + * Returns: + * Valid pointer on success, NULL on error. + * + * This is a &drm_device-managed version of alloc_ordered_workqueue(). + * The initialized lock is automatically destroyed on the final + * drm_dev_put(). + */ +struct workqueue_struct *drmm_alloc_ordered_workqueue(struct drm_device *dev, + const char *fmt, + unsigned int flags, ...) +{ + struct workqueue_struct *wq; + va_list args; + int ret; + + va_start(args, flags); + wq = alloc_ordered_workqueue(fmt, flags, args); + va_end(args); + + if (!wq) + return NULL; + + ret = drmm_add_action_or_reset(dev, drmm_destroy_workqueue, wq); + if (ret) { + destroy_workqueue(wq); + return NULL; + } + + return wq; +} +EXPORT_SYMBOL(drmm_alloc_ordered_workqueue); diff --git a/include/drm/drm_managed.h b/include/drm/drm_managed.h index f547b09ca023..cb42fb252648 100644 --- a/include/drm/drm_managed.h +++ b/include/drm/drm_managed.h @@ -127,4 +127,12 @@ void __drmm_mutex_release(struct drm_device *dev, void *res); drmm_add_action_or_reset(dev, __drmm_mutex_release, lock); \ }) \ +struct workqueue_struct *drmm_alloc_workqueue(struct drm_device *dev, + const char *fmt, unsigned int flags, + int max_active, ...); + +struct workqueue_struct *drmm_alloc_ordered_workqueue(struct drm_device *dev, + const char *fmt, + unsigned int flags, ...); + #endif