[PATCH 1/1] reservation: wait only with non-zero timeout specified (v2)

Zhou, Jammy Jammy.Zhou at amd.com
Tue Jan 13 00:53:29 PST 2015


> You can't anyway when calling with timeout = 0.
For consistency, we can always return 0 for busy (not signaled), and return '>0' for idle (signaled). This rule should be common for reservation_object_wait_timeout_rcu. So in my previous patch, '1' is returned for signaled case when specified timeout is zero.

> Since you have 0 returning jiffies, you would get 0 regardless of fence_wait being succesful or not.
IMHO, fence_wait_timeout shouldn't be called per se when timeout==0.

> Why do you need it to return 1? Why not use reservation_object_test_signaled_rcu directly?
Just as I mentioned above, return 1 is to make the returning values of reservation_object_wait_timeout_rcu consistent for both cases. And we can call reservation_object_test_signaled_rcu directly in driver side, but it will be better if we can also add 'timeout==0' support in reservation_object_wait_timeout_rcu (sometimes it isn't preventable).

Regards,
Jammy

-----Original Message-----
From: Maarten Lankhorst [mailto:maarten.lankhorst at canonical.com] 
Sent: Tuesday, January 13, 2015 4:05 PM
To: Zhou, Jammy
Cc: dri-devel at lists.freedesktop.org; Christian König; Deucher, Alexander
Subject: Re: [PATCH 1/1] reservation: wait only with non-zero timeout specified (v2)

Op 13-01-15 om 08:59 schreef Zhou, Jammy:
> Hi Maarten,
>
>> Can't you simply add if (!timeout) return !reservation_object_test_signaled_rcu(obj, wait_all); to the beginning instead?
> Hmm, after looking into it, I think that can achieve the same purpose. I will update the patch with this.
>
>> Also why do you need this? Why not simply return 0 with timeout = 0.
> The major purpose here is to use reservation_object_wait_timeout_rcu to handle all possible timeout values (and just to check status with timeout==0). If we simply return 0, we cannot determine the fence is signaled or not with the return value.
You can't anyway when calling with timeout = 0.

 * fence_wait_timeout - sleep until the fence gets signaled
 *
 * Returns -ERESTARTSYS if interrupted, 0 if the wait timed out, or the
 * remaining timeout in jiffies on success. Other error values may be
 * returned on custom implementations.

Since you have 0 returning jiffies, you would get 0 regardless of fence_wait being succesful or not.

I think the only right way to handle this is by returning 0 immediately if timeout is 0.

Why do you need it to return 1? Why not use reservation_object_test_signaled_rcu directly?

~Maarten


More information about the dri-devel mailing list