drm/syncobj: Fix oops on drm_syncobj_find_fence(file_priv, 0, ...).
diff mbox series

Message ID 20181105230110.4812-1-eric@anholt.net
State New
Headers show
Series
  • drm/syncobj: Fix oops on drm_syncobj_find_fence(file_priv, 0, ...).
Related show

Commit Message

Eric Anholt Nov. 5, 2018, 11:01 p.m. UTC
This broke rendering on V3D, where we almost always have a 0
in-syncobj.

Signed-off-by: Eric Anholt <eric@anholt.net>
Fixes: 48197bc564c7 ("drm: add syncobj timeline support v9")
Cc: Chunming Zhou <david1.zhou@amd.com>
Cc: Christian König <christian.koenig@amd.com>
---
 drivers/gpu/drm/drm_syncobj.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Zhou, David(ChunMing) Nov. 6, 2018, 2:18 a.m. UTC | #1
Reviewed-by: Chunming Zhou <david1.zhou@amd.com>

> -----Original Message-----
> From: Eric Anholt <eric@anholt.net>
> Sent: Tuesday, November 06, 2018 7:01 AM
> To: dri-devel@lists.freedesktop.org
> Cc: linux-kernel@vger.kernel.org; Eric Anholt <eric@anholt.net>; Zhou,
> David(ChunMing) <David1.Zhou@amd.com>; Koenig, Christian
> <Christian.Koenig@amd.com>
> Subject: [PATCH] drm/syncobj: Fix oops on
> drm_syncobj_find_fence(file_priv, 0, ...).
> 
> This broke rendering on V3D, where we almost always have a 0 in-syncobj.
> 
> Signed-off-by: Eric Anholt <eric@anholt.net>
> Fixes: 48197bc564c7 ("drm: add syncobj timeline support v9")
> Cc: Chunming Zhou <david1.zhou@amd.com>
> Cc: Christian König <christian.koenig@amd.com>
> ---
>  drivers/gpu/drm/drm_syncobj.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/drm_syncobj.c
> b/drivers/gpu/drm/drm_syncobj.c index 4dca5f7e8c4b..da8175d9c6ff 100644
> --- a/drivers/gpu/drm/drm_syncobj.c
> +++ b/drivers/gpu/drm/drm_syncobj.c
> @@ -443,7 +443,8 @@ int drm_syncobj_find_fence(struct drm_file
> *file_private,
>  	int ret;
> 
>  	ret = drm_syncobj_search_fence(syncobj, point, flags, fence);
> -	drm_syncobj_put(syncobj);
> +	if (syncobj)
> +		drm_syncobj_put(syncobj);
>  	return ret;
>  }
>  EXPORT_SYMBOL(drm_syncobj_find_fence);
> --
> 2.19.1
Koenig, Christian Nov. 6, 2018, 9:10 a.m. UTC | #2
Acked-by: Christian König <christian.koenig@amd.com>

Should I push it to drm-misc-next?

Christian.

Am 06.11.18 um 03:18 schrieb Zhou, David(ChunMing):
> Reviewed-by: Chunming Zhou <david1.zhou@amd.com>
>
>> -----Original Message-----
>> From: Eric Anholt <eric@anholt.net>
>> Sent: Tuesday, November 06, 2018 7:01 AM
>> To: dri-devel@lists.freedesktop.org
>> Cc: linux-kernel@vger.kernel.org; Eric Anholt <eric@anholt.net>; Zhou,
>> David(ChunMing) <David1.Zhou@amd.com>; Koenig, Christian
>> <Christian.Koenig@amd.com>
>> Subject: [PATCH] drm/syncobj: Fix oops on
>> drm_syncobj_find_fence(file_priv, 0, ...).
>>
>> This broke rendering on V3D, where we almost always have a 0 in-syncobj.
>>
>> Signed-off-by: Eric Anholt <eric@anholt.net>
>> Fixes: 48197bc564c7 ("drm: add syncobj timeline support v9")
>> Cc: Chunming Zhou <david1.zhou@amd.com>
>> Cc: Christian König <christian.koenig@amd.com>
>> ---
>>   drivers/gpu/drm/drm_syncobj.c | 3 ++-
>>   1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/gpu/drm/drm_syncobj.c
>> b/drivers/gpu/drm/drm_syncobj.c index 4dca5f7e8c4b..da8175d9c6ff 100644
>> --- a/drivers/gpu/drm/drm_syncobj.c
>> +++ b/drivers/gpu/drm/drm_syncobj.c
>> @@ -443,7 +443,8 @@ int drm_syncobj_find_fence(struct drm_file
>> *file_private,
>>   	int ret;
>>
>>   	ret = drm_syncobj_search_fence(syncobj, point, flags, fence);
>> -	drm_syncobj_put(syncobj);
>> +	if (syncobj)
>> +		drm_syncobj_put(syncobj);
>>   	return ret;
>>   }
>>   EXPORT_SYMBOL(drm_syncobj_find_fence);
>> --
>> 2.19.1
Daniel Vetter Nov. 6, 2018, 10:30 a.m. UTC | #3
On Tue, Nov 06, 2018 at 09:10:55AM +0000, Koenig, Christian wrote:
> Acked-by: Christian König <christian.koenig@amd.com>
> 
> Should I push it to drm-misc-next?

Yeah.

This should have broken an igt somewhere ... would be good to double check
whether that's true and why it wasn't caught. From a quick look i915
doesn't use this interface (it uses drm_syncobj_find, which isn't broken
like this), only amdgpu and v3d use this.

I guess an in-kernel unit test for these driver interfaces is what we need
here.
-Daniel

> 
> Christian.
> 
> Am 06.11.18 um 03:18 schrieb Zhou, David(ChunMing):
> > Reviewed-by: Chunming Zhou <david1.zhou@amd.com>
> >
> >> -----Original Message-----
> >> From: Eric Anholt <eric@anholt.net>
> >> Sent: Tuesday, November 06, 2018 7:01 AM
> >> To: dri-devel@lists.freedesktop.org
> >> Cc: linux-kernel@vger.kernel.org; Eric Anholt <eric@anholt.net>; Zhou,
> >> David(ChunMing) <David1.Zhou@amd.com>; Koenig, Christian
> >> <Christian.Koenig@amd.com>
> >> Subject: [PATCH] drm/syncobj: Fix oops on
> >> drm_syncobj_find_fence(file_priv, 0, ...).
> >>
> >> This broke rendering on V3D, where we almost always have a 0 in-syncobj.
> >>
> >> Signed-off-by: Eric Anholt <eric@anholt.net>
> >> Fixes: 48197bc564c7 ("drm: add syncobj timeline support v9")
> >> Cc: Chunming Zhou <david1.zhou@amd.com>
> >> Cc: Christian König <christian.koenig@amd.com>
> >> ---
> >>   drivers/gpu/drm/drm_syncobj.c | 3 ++-
> >>   1 file changed, 2 insertions(+), 1 deletion(-)
> >>
> >> diff --git a/drivers/gpu/drm/drm_syncobj.c
> >> b/drivers/gpu/drm/drm_syncobj.c index 4dca5f7e8c4b..da8175d9c6ff 100644
> >> --- a/drivers/gpu/drm/drm_syncobj.c
> >> +++ b/drivers/gpu/drm/drm_syncobj.c
> >> @@ -443,7 +443,8 @@ int drm_syncobj_find_fence(struct drm_file
> >> *file_private,
> >>   	int ret;
> >>
> >>   	ret = drm_syncobj_search_fence(syncobj, point, flags, fence);
> >> -	drm_syncobj_put(syncobj);
> >> +	if (syncobj)
> >> +		drm_syncobj_put(syncobj);
> >>   	return ret;
> >>   }
> >>   EXPORT_SYMBOL(drm_syncobj_find_fence);
> >> --
> >> 2.19.1
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

Patch
diff mbox series

diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c
index 4dca5f7e8c4b..da8175d9c6ff 100644
--- a/drivers/gpu/drm/drm_syncobj.c
+++ b/drivers/gpu/drm/drm_syncobj.c
@@ -443,7 +443,8 @@  int drm_syncobj_find_fence(struct drm_file *file_private,
 	int ret;
 
 	ret = drm_syncobj_search_fence(syncobj, point, flags, fence);
-	drm_syncobj_put(syncobj);
+	if (syncobj)
+		drm_syncobj_put(syncobj);
 	return ret;
 }
 EXPORT_SYMBOL(drm_syncobj_find_fence);