2022-01-05 15:37:33

by Ivaylo Dimitrov

[permalink] [raw]
Subject: [PATCH] drm: omapdrm: Fix implicit dma_buf fencing

Currently omapdrm driver does not initialize dma_buf_export_info resv
member, which leads to a new dma_resv being allocated and attached to
the exported dma_buf. This leads to the issue that fences created on
dma_buf objects imported by other drivers are ignored by omapdrm, as only
fences in gem object resv are waited on. This leads to various issues like
displaying incomplete frames.

Fix that by initializing dma_buf resv to the resv of the gem object being
exported.

Signed-off-by: Ivaylo Dimitrov <[email protected]>
---
drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
index f1f93cabb61e..a111e5c91925 100644
--- a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
+++ b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
@@ -88,6 +88,7 @@ struct dma_buf *omap_gem_prime_export(struct drm_gem_object *obj, int flags)
exp_info.size = omap_gem_mmap_size(obj);
exp_info.flags = flags;
exp_info.priv = obj;
+ exp_info.resv = obj->resv;

return drm_gem_dmabuf_export(obj->dev, &exp_info);
}
--
2.20.1



2022-01-06 09:46:04

by Tony Lindgren

[permalink] [raw]
Subject: Re: [Openpvrsgx-devgroup] [PATCH] drm: omapdrm: Fix implicit dma_buf fencing

* Ivaylo Dimitrov <[email protected]> [220105 15:38]:
> Fix that by initializing dma_buf resv to the resv of the gem object being
> exported.

Nice find! This also fixes my wlroots test case with termite running on
sway where termite would only partially update when switching between
desktops, so:

Tested-by: Tony Lindgren <[email protected]>

2022-01-06 12:51:50

by Merlijn Wajer

[permalink] [raw]
Subject: Re: [Openpvrsgx-devgroup] [PATCH] drm: omapdrm: Fix implicit dma_buf fencing

Hi,

On 06/01/2022 10:45, Tony Lindgren wrote:
> * Ivaylo Dimitrov <[email protected]> [220105 15:38]:
>> Fix that by initializing dma_buf resv to the resv of the gem object being
>> exported.
>
> Nice find! This also fixes my wlroots test case with termite running on
> sway where termite would only partially update when switching between
> desktops, so:
>
> Tested-by: Tony Lindgren <[email protected]>

You can also add my:

Tested-by: Merlijn Wajer <[email protected]>

Cheers,
Merlijn

2022-01-06 13:43:14

by Tomi Valkeinen

[permalink] [raw]
Subject: Re: [PATCH] drm: omapdrm: Fix implicit dma_buf fencing

Hi,

On 05/01/2022 17:36, Ivaylo Dimitrov wrote:
> Currently omapdrm driver does not initialize dma_buf_export_info resv
> member, which leads to a new dma_resv being allocated and attached to
> the exported dma_buf. This leads to the issue that fences created on
> dma_buf objects imported by other drivers are ignored by omapdrm, as only
> fences in gem object resv are waited on. This leads to various issues like
> displaying incomplete frames.
>
> Fix that by initializing dma_buf resv to the resv of the gem object being
> exported.
>
> Signed-off-by: Ivaylo Dimitrov <[email protected]>
> ---
> drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
> index f1f93cabb61e..a111e5c91925 100644
> --- a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
> +++ b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
> @@ -88,6 +88,7 @@ struct dma_buf *omap_gem_prime_export(struct drm_gem_object *obj, int flags)
> exp_info.size = omap_gem_mmap_size(obj);
> exp_info.flags = flags;
> exp_info.priv = obj;
> + exp_info.resv = obj->resv;
>
> return drm_gem_dmabuf_export(obj->dev, &exp_info);
> }

Thanks! Pushed to drm-misc-next.

Tomi

2022-01-06 16:26:38

by Ivaylo Dimitrov

[permalink] [raw]
Subject: Re: [PATCH] drm: omapdrm: Fix implicit dma_buf fencing

Hi,

On 6.01.22 г. 15:43 ч., Tomi Valkeinen wrote:
> Hi,
>
> On 05/01/2022 17:36, Ivaylo Dimitrov wrote:
>> Currently omapdrm driver does not initialize dma_buf_export_info resv
>> member, which leads to a new dma_resv being allocated and attached to
>> the exported dma_buf. This leads to the issue that fences created on
>> dma_buf objects imported by other drivers are ignored by omapdrm, as only
>> fences in gem object resv are waited on. This leads to various issues
>> like
>> displaying incomplete frames.
>>
>> Fix that by initializing dma_buf resv to the resv of the gem object being
>> exported.
>>
>> Signed-off-by: Ivaylo Dimitrov <[email protected]>
>> ---
>>   drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c | 1 +
>>   1 file changed, 1 insertion(+)
>>
>> diff --git a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>> b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>> index f1f93cabb61e..a111e5c91925 100644
>> --- a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>> +++ b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
>> @@ -88,6 +88,7 @@ struct dma_buf *omap_gem_prime_export(struct
>> drm_gem_object *obj, int flags)
>>       exp_info.size = omap_gem_mmap_size(obj);
>>       exp_info.flags = flags;
>>       exp_info.priv = obj;
>> +    exp_info.resv = obj->resv;
>>       return drm_gem_dmabuf_export(obj->dev, &exp_info);
>>   }
>
> Thanks! Pushed to drm-misc-next.
>

Thanks,

I think lts kernels shall get that fix too, but I have no idea how :) .

Ivo.