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/gud: 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-5-tzimmermann@suse.de

+9 -25
+9 -24
drivers/gpu/drm/gud/gud_drv.c
··· 309 309 return ret; 310 310 } 311 311 312 - /* 313 - * FIXME: Dma-buf sharing requires DMA support by the importing device. 314 - * This function is a workaround to make USB devices work as well. 315 - * See todo.rst for how to fix the issue in the dma-buf framework. 316 - */ 317 - static struct drm_gem_object *gud_gem_prime_import(struct drm_device *drm, struct dma_buf *dma_buf) 318 - { 319 - struct gud_device *gdrm = to_gud_device(drm); 320 - 321 - if (!gdrm->dmadev) 322 - return ERR_PTR(-ENODEV); 323 - 324 - return drm_gem_prime_import_dev(drm, dma_buf, gdrm->dmadev); 325 - } 326 - 327 312 static int gud_stats_debugfs(struct seq_file *m, void *data) 328 313 { 329 314 struct drm_debugfs_entry *entry = m->private; ··· 361 376 .driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC, 362 377 .fops = &gud_fops, 363 378 DRM_GEM_SHMEM_DRIVER_OPS, 364 - .gem_prime_import = gud_gem_prime_import, 365 379 DRM_FBDEV_SHMEM_DRIVER_OPS, 366 380 367 381 .name = "gud", ··· 418 434 size_t max_buffer_size = 0; 419 435 struct gud_device *gdrm; 420 436 struct drm_device *drm; 437 + struct device *dma_dev; 421 438 u8 *formats_dev; 422 439 u32 *formats; 423 440 int ret, i; ··· 594 609 595 610 usb_set_intfdata(intf, gdrm); 596 611 597 - gdrm->dmadev = usb_intf_get_dma_device(intf); 598 - if (!gdrm->dmadev) 599 - dev_warn(dev, "buffer sharing not supported"); 612 + dma_dev = usb_intf_get_dma_device(intf); 613 + if (dma_dev) { 614 + drm_dev_set_dma_dev(drm, dma_dev); 615 + put_device(dma_dev); 616 + } else { 617 + dev_warn(dev, "buffer sharing not supported"); /* not an error */ 618 + } 600 619 601 620 drm_debugfs_add_file(drm, "stats", gud_stats_debugfs, NULL); 602 621 603 622 ret = drm_dev_register(drm, 0); 604 - if (ret) { 605 - put_device(gdrm->dmadev); 623 + if (ret) 606 624 return ret; 607 - } 608 625 609 626 drm_kms_helper_poll_init(drm); 610 627 ··· 625 638 drm_kms_helper_poll_fini(drm); 626 639 drm_dev_unplug(drm); 627 640 drm_atomic_helper_shutdown(drm); 628 - put_device(gdrm->dmadev); 629 - gdrm->dmadev = NULL; 630 641 } 631 642 632 643 static int gud_suspend(struct usb_interface *intf, pm_message_t message)
-1
drivers/gpu/drm/gud/gud_internal.h
··· 16 16 struct gud_device { 17 17 struct drm_device drm; 18 18 struct drm_simple_display_pipe pipe; 19 - struct device *dmadev; 20 19 struct work_struct work; 21 20 u32 flags; 22 21 const struct drm_format_info *xrgb8888_emulation_format;