Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

drm/udl: Set struct drm_device.dma_dev

Set the dma_dev field provided by the DRM device. Required for PRIME
dma-buf import. Remove the driver's implementation.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250307080836.42848-6-tzimmermann@suse.de

+7 -25
-17
drivers/gpu/drm/udl/udl_drv.c
··· 49 49 return drm_mode_config_helper_resume(dev); 50 50 } 51 51 52 - /* 53 - * FIXME: Dma-buf sharing requires DMA support by the importing device. 54 - * This function is a workaround to make USB devices work as well. 55 - * See todo.rst for how to fix the issue in the dma-buf framework. 56 - */ 57 - static struct drm_gem_object *udl_driver_gem_prime_import(struct drm_device *dev, 58 - struct dma_buf *dma_buf) 59 - { 60 - struct udl_device *udl = to_udl(dev); 61 - 62 - if (!udl->dmadev) 63 - return ERR_PTR(-ENODEV); 64 - 65 - return drm_gem_prime_import_dev(dev, dma_buf, udl->dmadev); 66 - } 67 - 68 52 DEFINE_DRM_GEM_FOPS(udl_driver_fops); 69 53 70 54 static const struct drm_driver driver = { ··· 57 73 /* GEM hooks */ 58 74 .fops = &udl_driver_fops, 59 75 DRM_GEM_SHMEM_DRIVER_OPS, 60 - .gem_prime_import = udl_driver_gem_prime_import, 61 76 DRM_FBDEV_SHMEM_DRIVER_OPS, 62 77 63 78 .name = DRIVER_NAME,
-1
drivers/gpu/drm/udl/udl_drv.h
··· 51 51 struct udl_device { 52 52 struct drm_device drm; 53 53 struct device *dev; 54 - struct device *dmadev; 55 54 56 55 struct drm_plane primary_plane; 57 56 struct drm_crtc crtc;
+7 -7
drivers/gpu/drm/udl/udl_main.c
··· 308 308 { 309 309 struct drm_device *dev = &udl->drm; 310 310 int ret = -ENOMEM; 311 + struct device *dma_dev; 311 312 312 313 DRM_DEBUG("\n"); 313 314 314 - udl->dmadev = usb_intf_get_dma_device(to_usb_interface(dev->dev)); 315 - if (!udl->dmadev) 315 + dma_dev = usb_intf_get_dma_device(to_usb_interface(dev->dev)); 316 + if (dma_dev) { 317 + drm_dev_set_dma_dev(dev, dma_dev); 318 + put_device(dma_dev); 319 + } else { 316 320 drm_warn(dev, "buffer sharing not supported"); /* not an error */ 321 + } 317 322 318 323 mutex_init(&udl->gem_lock); 319 324 ··· 348 343 err: 349 344 if (udl->urbs.count) 350 345 udl_free_urb_list(dev); 351 - put_device(udl->dmadev); 352 346 DRM_ERROR("%d\n", ret); 353 347 return ret; 354 348 } 355 349 356 350 int udl_drop_usb(struct drm_device *dev) 357 351 { 358 - struct udl_device *udl = to_udl(dev); 359 - 360 352 udl_free_urb_list(dev); 361 - put_device(udl->dmadev); 362 - udl->dmadev = NULL; 363 353 364 354 return 0; 365 355 }