[Intel-gfx] [PATCH v3 2/3] drm/i915: Fix userptr deadlock with aliased GTT mmappings
Tvrtko Ursulin
tvrtko.ursulin at linux.intel.com
Thu Sep 10 02:44:14 PDT 2015
On 09/09/2015 04:03 PM, Chris Wilson wrote:
> On Wed, Sep 09, 2015 at 02:56:16PM +0100, Tvrtko Ursulin wrote:
>>
>> Hi,
>>
>> On 08/10/2015 09:51 AM, Chris Wilson wrote:
>>> +out:
>>> drm_free_large(pvec);
>>> return ret;
>>> +
>>> +err:
>>> + /* No pages here, no need for the mmu-notifier to wake us */
>>> + __i915_gem_userptr_set_active(obj, false);
>>> +err_active:
>>> + release_pages(pvec, pinned, 0);
>>> + goto out;
>>> }
>>
>> I don't like the goto dance. Would something like the below be clearer?
>
> We can condense it if we use a bool active and then feed everything
> through the single exit path:
>
> active = false;
> if (pinned < 0)
> ret = pinned, pinned = 0;
> else if (pinned < num_pages)
> ret = __i915_gem_userptr_get_pages_queue(obj, &active);
> else
> ret = __i915_gem_userptr_set_pages(obj, pvec, num_pages);
> if (ret) {
> __i915_gem_userptr_set_active(obj, active);
> release_pages(pvec, pinned, 0);
> }
> drm_free_large(pvec);
> return ret;
>
> Not happy with _queue. I guess i915_gem_userptr_get_pages_via_worker()
> is better. Or i915_gem_userptr_get_pages_deferred().
Looks much better on a glance. If release_pages with pinned = 0 is OK.
For the queueue/via_worker/deferred maybe _schedule_get_pages_worker?
Tvrtko
More information about the Intel-gfx
mailing list