Re: [PATCH 01/10] drm/gem: Test for imported GEM buffers with helper

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





Am 28.02.25 um 17:04 schrieb Anusha Srivatsa:


On Wed, Feb 26, 2025 at 12:28 PM Thomas Zimmermann <tzimmermann@xxxxxxx> wrote:

    Add drm_gem_is_imported() that tests if a GEM object's buffer has
    been imported. Update the GEM code accordingly.

    GEM code usually tests for imports if import_attach has been set
    in struct drm_gem_object. But attaching a dma-buf on import requires
    a DMA-capable importer device, which is not the case for many serial
    busses like USB or I2C. The new helper tests if a GEM object's dma-buf
    has been created from the GEM object.

    Signed-off-by: Thomas Zimmermann <tzimmermann@xxxxxxx>
    ---
     drivers/gpu/drm/drm_gem.c |  4 ++--
     include/drm/drm_gem.h     | 14 ++++++++++++++
     2 files changed, 16 insertions(+), 2 deletions(-)

    diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
    index ee811764c3df..c6240bab3fa5 100644
    --- a/drivers/gpu/drm/drm_gem.c
    +++ b/drivers/gpu/drm/drm_gem.c
    @@ -348,7 +348,7 @@ int drm_gem_dumb_map_offset(struct drm_file
    *file, struct drm_device *dev,
                    return -ENOENT;

            /* Don't allow imported objects to be mapped */
    -       if (obj->import_attach) {
    +       if (drm_gem_is_imported(obj)) {
                    ret = -EINVAL;
                    goto out;
            }
    @@ -1178,7 +1178,7 @@ void drm_gem_print_info(struct drm_printer
    *p, unsigned int indent,
    drm_vma_node_start(&obj->vma_node));
            drm_printf_indent(p, indent, "size=%zu\n", obj->size);
            drm_printf_indent(p, indent, "imported=%s\n",
    -  str_yes_no(obj->import_attach));
    +  str_yes_no(drm_gem_is_imported(obj)));

            if (obj->funcs->print_info)
                    obj->funcs->print_info(p, indent, obj);
    diff --git a/include/drm/drm_gem.h b/include/drm/drm_gem.h
    index fdae947682cd..2bf893eabb4b 100644
    --- a/include/drm/drm_gem.h
    +++ b/include/drm/drm_gem.h
    @@ -35,6 +35,7 @@
      */

     #include <linux/kref.h>
    +#include <linux/dma-buf.h>
     #include <linux/dma-resv.h>
     #include <linux/list.h>
     #include <linux/mutex.h>
    @@ -575,6 +576,19 @@ static inline bool
    drm_gem_object_is_shared_for_memory_stats(struct drm_gem_obje
            return (obj->handle_count > 1) || obj->dma_buf;
     }

    +/**
    + * drm_gem_is_imported() - Tests if GEM object's buffer has been
    imported
    + * @obj: the GEM object
    + *
    + * Returns:
    + * True if the GEM object's buffer has been imported, false otherwise
    + */
    +static inline bool drm_gem_is_imported(const struct
    drm_gem_object *obj)
    +{
    +       /* The dma-buf's priv field points to the original GEM
    object. */
    +       return obj->dma_buf && (obj->dma_buf->priv != obj);
    +}
    +


Looks good to me.
Reviewed-by: Anusha Srivatsa <asrivats@xxxxxxxxxx>

Thanks for reviewing.

     #ifdef CONFIG_LOCKDEP
     /**
      * drm_gem_gpuva_set_lock() - Set the lock protecting accesses to
    the gpuva list.
-- 2.48.1


--
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)




[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux