dri-devel.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
From: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
To: Matthew Auld <matthew.william.auld@gmail.com>
Cc: Intel Graphics Development <intel-gfx@lists.freedesktop.org>,
	ML dri-devel <dri-devel@lists.freedesktop.org>
Subject: Re: [PATCH v3 08/17] drm/i915: Call i915_gem_evict_vm in vm_fault_gtt to prevent new ENOSPC errors
Date: Fri, 17 Dec 2021 16:29:34 +0100	[thread overview]
Message-ID: <35307def-2373-eaa5-1d2c-94cf89ff7dee@linux.intel.com> (raw)
In-Reply-To: <CAM0jSHOL-dxs7v314p=iKDkRLDfR3Q=6bFoejydxTMd7Tbw=vQ@mail.gmail.com>

On 17-12-2021 12:58, Matthew Auld wrote:
> On Thu, 16 Dec 2021 at 14:28, Maarten Lankhorst
> <maarten.lankhorst@linux.intel.com> wrote:
>> Now that we cannot unbind kill the currently locked object directly
> "unbind kill"
>
>> because we're removing short term pinning, we may have to unbind the
>> object from gtt manually, using a i915_gem_evict_vm() call.
>>
>> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> Maybe mention that this only in preparation for some future patches,
> once the actual eviction is trylock and evict_for_vm can also handle
> shared dma-resv? At this point in the series we shouldn't expect to
> hit -ENOSPC, right?
>
>> ---
>>  drivers/gpu/drm/i915/gem/i915_gem_mman.c | 18 ++++++++++++++++--
>>  1 file changed, 16 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_mman.c b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
>> index af81d6c3332a..00cd9642669a 100644
>> --- a/drivers/gpu/drm/i915/gem/i915_gem_mman.c
>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
>> @@ -358,8 +358,22 @@ static vm_fault_t vm_fault_gtt(struct vm_fault *vmf)
>>                         vma = i915_gem_object_ggtt_pin_ww(obj, &ww, &view, 0, 0, flags);
>>                 }
>>
>> -               /* The entire mappable GGTT is pinned? Unexpected! */
>> -               GEM_BUG_ON(vma == ERR_PTR(-ENOSPC));
>> +               /*
>> +                * The entire mappable GGTT is pinned? Unexpected!
>> +                * Try to evict the object we locked too, as normally we skip it
>> +                * due to lack of short term pinning inside execbuf.
>> +                */
>> +               if (vma == ERR_PTR(-ENOSPC)) {
>> +                       ret = mutex_lock_interruptible(&ggtt->vm.mutex);
>> +                       if (!ret) {
>> +                               ret = i915_gem_evict_vm(&ggtt->vm);
>> +                               mutex_unlock(&ggtt->vm.mutex);
>> +                       }
>> +                       if (ret)
>> +                               goto err_reset;
>> +                       vma = i915_gem_object_ggtt_pin_ww(obj, &ww, &view, 0, 0, flags);
>> +               }
>> +               GEM_WARN_ON(vma == ERR_PTR(-ENOSPC));
> Looks like this is being triggered in CI, I assume because the trylock
> could easily fail, due to contention? Is this expected for now? Do we
> keep the WARN and track it as a known issue?

I think it makes sense. I can probably fix i915_gem_evict_vm to attempt to take all objects in a blocking way.

I had some primitives that could lock for eviction, and keep a refcount on the object. i915_gem_evict_vm could probably be changed to use it.

>>         }
>>         if (IS_ERR(vma)) {
>>                 ret = PTR_ERR(vma);
>> --
>> 2.34.1
>>


  reply	other threads:[~2021-12-17 15:29 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-16 14:27 [PATCH v3 00/17] drm/i915: Remove short term pins from execbuf by requiring lock to unbind Maarten Lankhorst
2021-12-16 14:27 ` [PATCH v3 01/17] drm/i915: Remove unused bits of i915_vma/active api Maarten Lankhorst
2021-12-16 14:27 ` [PATCH v3 02/17] drm/i915: Change shrink ordering to use locking around unbinding Maarten Lankhorst
2021-12-16 14:27 ` [PATCH v3 03/17] drm/i915: Remove pages_mutex and intel_gtt->vma_ops.set/clear_pages members, v3 Maarten Lankhorst
2021-12-17 15:21   ` [Intel-gfx] " Matthew Auld
2021-12-16 14:27 ` [PATCH v3 04/17] drm/i915: Take object lock in i915_ggtt_pin if ww is not set Maarten Lankhorst
2021-12-17 10:44   ` Matthew Auld
2021-12-16 14:27 ` [PATCH v3 05/17] drm/i915: Force ww lock for i915_gem_object_ggtt_pin_ww, v2 Maarten Lankhorst
2021-12-17 10:46   ` [Intel-gfx] " Matthew Auld
2021-12-16 14:27 ` [PATCH v3 06/17] drm/i915: Ensure gem_contexts selftests work with unbind changes, v2 Maarten Lankhorst
2021-12-16 14:27 ` [PATCH v3 07/17] drm/i915: Ensure i915_vma tests do not get -ENOSPC with the locking changes Maarten Lankhorst
2021-12-17 11:25   ` Matthew Auld
2021-12-16 14:27 ` [PATCH v3 08/17] drm/i915: Call i915_gem_evict_vm in vm_fault_gtt to prevent new ENOSPC errors Maarten Lankhorst
2021-12-17 11:58   ` Matthew Auld
2021-12-17 15:29     ` Maarten Lankhorst [this message]
2021-12-16 14:27 ` [PATCH v3 09/17] drm/i915: Trylock the object when shrinking Maarten Lankhorst
2021-12-17 12:53   ` Matthew Auld
2021-12-16 14:27 ` [PATCH v3 10/17] drm/i915: Require object lock when freeing pages during destruction Maarten Lankhorst
2021-12-16 14:27 ` [PATCH v3 11/17] drm/i915: Add ww ctx to i915_gem_object_trylock Maarten Lankhorst
2021-12-17 12:55   ` [Intel-gfx] " Matthew Auld
2021-12-16 14:27 ` [PATCH v3 12/17] drm/i915: Add locking to i915_gem_evict_vm() Maarten Lankhorst
2021-12-17 13:19   ` [Intel-gfx] " Matthew Auld
2021-12-16 14:27 ` [PATCH v3 13/17] drm/i915: Add object locking to i915_gem_evict_for_node and i915_gem_evict_something Maarten Lankhorst
2021-12-17 13:55   ` [Intel-gfx] " Matthew Auld
2021-12-17 15:04     ` Maarten Lankhorst
2021-12-16 14:27 ` [PATCH v3 14/17] drm/i915: Add i915_vma_unbind_unlocked, and take obj lock for i915_vma_unbind, v2 Maarten Lankhorst
2021-12-16 14:27 ` [PATCH v3 15/17] drm/i915: Remove assert_object_held_shared Maarten Lankhorst
2021-12-16 14:27 ` [PATCH v3 16/17] drm/i915: Remove support for unlocked i915_vma unbind Maarten Lankhorst
2021-12-16 14:27 ` [PATCH v3 17/17] drm/i915: Remove short-term pins from execbuf, v5 Maarten Lankhorst

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=35307def-2373-eaa5-1d2c-94cf89ff7dee@linux.intel.com \
    --to=maarten.lankhorst@linux.intel.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=matthew.william.auld@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).