op 04-08-14 10:42, Michel D?nzer schreef:
> 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.
Because in the worst case you didn't wait on the fence that started the 
eviction, but one before it. ;-)

~Maarten

Reply via email to