All of lore.kernel.org
 help / color / mirror / Atom feed
From: Zhi Wang <zhi.a.wang@intel.com>
To: Chris Wilson <chris@chris-wilson.co.uk>,
	"intel-gfx@lists.freedesktop.org"
	<intel-gfx@lists.freedesktop.org>
Subject: Re: looks like a issue in do_switch() and mi_set_context() in i915_gem_context.c?
Date: Wed, 01 Apr 2015 20:01:56 +0800	[thread overview]
Message-ID: <551BDE34.5010301@intel.com> (raw)
In-Reply-To: <20150401155856.GM25832@nuc-i3427.alporthouse.com>

Hi Chris:
     Thanks for the reply. :) I can understand that the backing storage 
is pinned at this time, as the reference counter of context object 
should not be zero. But for VMA, is there any chance that the vma will 
be unbinded from GGTT at this time by shrinker? I saw that 
i915_gem_object_ggtt_unpin() will decrease the VMA reference counter...

Thanks,
Zhi.

On 04/01/15 23:58, Chris Wilson wrote:
> On Wed, Apr 01, 2015 at 03:52:17PM +0000, Wang, Zhi A wrote:
>> Hi Experts and Gurus:
>>     I'm learning i915 and It looks like in i915_gem_context.c: mi_set_context(), the last intel_ring_advance(); is a lazy ring tail write. So I think the ring buffer contains MI_SET_CONTEXT will not be submitted at this time, but in the caller: do_switch() it will unpin the backing memory of the context GEM object. From this time the backing memory may be swapped out? Then in the execbuffer routines, the MI_SET_CONTEXT may save current HW state into an unexpected location I guess?
>>
>> do_switch()
>>      -> mi_set_context()
>>          -> intel_ring_begin()
>>           ->emit MI_SET_CONTEXT (save current HW state to "prev" context and load engine state from "next" context, but it won't be submitted at this time)
>>           ->intel_ring_advance()
>>      -> unpin and unreference "prev" context(from this time the "prev" context can be swapped by shrinker I think)
>>
>> Then we come into the time of real submission:
>>
>> i915_gem_execbuffer_retire_commands()
>>      -> __intel_ring_advance() (MI_SET_CONTEXT got submitted at this time, but the "prev" context in do_switch() may be swapped out and turned into invalid? If GPU save current engine state into "prev" context, the "prev" context should be corrupted? When it got switch back, there should be problem I think.)
>>
>> I think a solution should be:
>> - Changing intel_ring_advance() to __intel_ring_davnce() in mi_set_context()-> submit the MI_SET_CONTEXT ring buffer directly at  this time.
>> - Polling CCID register until the new engine state is load into HW.
>>
>> Then the "prev" context can be unpinned and unreferenced safely?
>>
>> I'm just a beginner, If you can confirm this is an issue or a potential problem, I can cook a patch. :)
>
> It's not a problem. The old context is pinned by the active reference
> until the MI_SET_CONTEXT switch is completed by hardware at an
> indefinite point in the future.
> -Chris
>
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2015-04-02  3:32 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-01 15:52 looks like a issue in do_switch() and mi_set_context() in i915_gem_context.c? Wang, Zhi A
2015-04-01 15:58 ` Chris Wilson
2015-04-01 12:01   ` Zhi Wang [this message]
2015-04-02  7:17     ` Chris Wilson
2015-04-02 13:16       ` Wang, Zhi A

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=551BDE34.5010301@intel.com \
    --to=zhi.a.wang@intel.com \
    --cc=chris@chris-wilson.co.uk \
    --cc=intel-gfx@lists.freedesktop.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.