[PATCH] drm/gem-shmem: Optimize DMA mapping for exported buffers

Jacek Lawrynowicz jacek.lawrynowicz at linux.intel.com
Tue Mar 25 15:36:48 UTC 2025


Hi,


On 3/25/2025 3:14 PM, Thomas Zimmermann wrote:
> Hi
> 
> Am 25.03.25 um 14:53 schrieb Christian König:
>> Am 25.03.25 um 14:37 schrieb Jacek Lawrynowicz:
>>> Use DMA_ATTR_SKIP_CPU_SYNC flag for exported buffers during DMA mapping.
>>> The same flag is already used by drm_gem_map_dma_buf() for imported
>>> buffers.
>>>
>>> Signed-off-by: Jacek Lawrynowicz <jacek.lawrynowicz at linux.intel.com>
>>> ---
>>>   drivers/gpu/drm/drm_gem_shmem_helper.c |  8 ++++++--
>>>   include/drm/drm_gem.h                  | 12 ++++++++++++
>>>   2 files changed, 18 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c
>>> index d99dee67353a1..8938d8e3de52f 100644
>>> --- a/drivers/gpu/drm/drm_gem_shmem_helper.c
>>> +++ b/drivers/gpu/drm/drm_gem_shmem_helper.c
>>> @@ -699,7 +699,7 @@ EXPORT_SYMBOL_GPL(drm_gem_shmem_get_sg_table);
>>>   static struct sg_table *drm_gem_shmem_get_pages_sgt_locked(struct drm_gem_shmem_object *shmem)
>>>   {
>>>       struct drm_gem_object *obj = &shmem->base;
>>> -    int ret;
>>> +    int ret, flags = 0;
>>>       struct sg_table *sgt;
>>>         if (shmem->sgt)
>>> @@ -716,8 +716,12 @@ static struct sg_table *drm_gem_shmem_get_pages_sgt_locked(struct drm_gem_shmem_
>>>           ret = PTR_ERR(sgt);
>>>           goto err_put_pages;
>>>       }
>>> +
>>> +    if (drm_gem_is_exported())
>>> +        flags |= DMA_ATTR_SKIP_CPU_SYNC;
>> We should probably just unconditionally set this flag or not at all.
> 
> A question to both of you: does this have an effect on performance? I'm asking because i have a bug report where someone exports a buffer from gem-shmem with miserable performance. Would this flag make a difference?

On x86 this has no effect on performance. I'm not sure about other archs.

Regards,
Jacek



More information about the dri-devel mailing list