[PATCH 17/19] drm/radeon: use rcu waits in some ioctls
Michel Dänzer
michel at daenzer.net
Mon Aug 4 01:42:09 PDT 2014
On 02.08.2014 02:07, Maarten Lankhorst wrote:
> On 01-08-14 16:13, Michel Dänzer wrote:
>> On 01.08.2014 19:12, Maarten Lankhorst wrote:
>>> On 01-08-14 10:27, Michel Dänzer wrote:
>>>> On 01.08.2014 00:34, Maarten Lankhorst wrote:
>>>>>
>>>>> @@ -357,14 +360,20 @@ int radeon_gem_wait_idle_ioctl(struct drm_device *dev, void *data,
>>>>> struct drm_radeon_gem_wait_idle *args = data;
>>>>> struct drm_gem_object *gobj;
>>>>> struct radeon_bo *robj;
>>>>> - int r;
>>>>> + int r = 0;
>>>>> + long ret;
>>>>>
>>>>> gobj = drm_gem_object_lookup(dev, filp, args->handle);
>>>>> if (gobj == NULL) {
>>>>> return -ENOENT;
>>>>> }
>>>>> robj = gem_to_radeon_bo(gobj);
>>>>> - r = radeon_bo_wait(robj, NULL, false);
>>>>> + ret = reservation_object_wait_timeout_rcu(robj->tbo.resv, true, true, 30 * HZ);
>>>>> + if (ret == 0)
>>>>> + r = -EBUSY;
>>>>> + else if (ret < 0)
>>>>> + r = ret;
>>>>> +
>>>>> /* callback hw specific functions if any */
>>>>> if (rdev->asic->ioctl_wait_idle)
>>>>> robj->rdev->asic->ioctl_wait_idle(rdev, robj);
>>>>
>>>> Heads up, this conflicts with
>>>> http://lists.freedesktop.org/archives/dri-devel/2014-August/065255.html
>>>> which passes a non-NULL second argument to radeon_bo_wait() to get the
>>>> BO's current domain.
>>> Ok, I will fix it up and resend it later.
>>>
>>> Does it matter if I grab the current domain without grabbing the lock
>>> here? Because it doesn't matter if it sees the old or new domain, it
>>> could have been changed after returning too.
>>
>> It should be the domain where the BO is located when the fence we are
>> waiting for here signals.
> Could we compare domain before and after the rcu wait, and retry
> waiting if they're different, and the new one is VRAM? (eg eviction
> happened) That should prevent needing to lock the bo.
Eviction normally only happens from VRAM, not to VRAM. :) So if you know
whether the domain is VRAM or not after the wait, you can just proceed
accordingly, I don't see why you'd need to wait again.
--
Earthling Michel Dänzer | http://www.amd.com
Libre software enthusiast | Mesa and X developer
More information about the dri-devel
mailing list