All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mika Kuoppala <mika.kuoppala@linux.intel.com>
To: Daniel Vetter <daniel@ffwll.ch>,
	Chris Wilson <chris@chris-wilson.co.uk>Daniel Vetter
	<daniel@ffwll.ch>, Daniel Vetter <daniel.vetter@ffwll.ch>,
	Intel Graphics Development <intel-gfx@lists.freedesktop.org>,
	Daniel Vetter <daniel.vetter@intel.com>
Subject: Re: [PATCH 08/17] drm/i915: Don't look at pg_dirty_rings for aliasing ppgtt
Date: Fri, 17 Apr 2015 16:49:18 +0300	[thread overview]
Message-ID: <87siby27c1.fsf@gaia.fi.intel.com> (raw)
In-Reply-To: <20150415104429.GZ6092@phenom.ffwll.local>

Daniel Vetter <daniel@ffwll.ch> writes:

> On Tue, Apr 14, 2015 at 06:53:41PM +0100, Chris Wilson wrote:
>> On Tue, Apr 14, 2015 at 07:11:25PM +0200, Daniel Vetter wrote:
>> > On Tue, Apr 14, 2015 at 05:06:36PM +0100, Chris Wilson wrote:
>> > > On Tue, Apr 14, 2015 at 05:35:18PM +0200, Daniel Vetter wrote:
>> > > > We load the ppgtt ptes once per gpu reset/driver load/resume and
>> > > > that's all that's needed. Note that this only blows up when we're
>> > > > using the allocate_va_range funcs and not the special-purpose ones
>> > > > used. With this change we can get rid of that duplication.
>> > > 
>> > > Honestly, I would prefer the test to be rewritten so that the
>> > > information on which vm was being used was passed along and not that
>> > > magic sprinkled in the middle of nowhere. e.g. execbuffer knows exactly
>> > > what vm it bound the objects into, and yet towards the end we decide to
>> > > guess again. Also, I would rather the execbuffer test be moved to
>> > > i915_gem_context since it is scattering internal knowledge about.
>> > 
>> > Yeah I agree that there's more room for cleanup. I've done this minimal
>> > patch purely to shut up the bogus WARN_ONs when I tried to unify the
>> > gen6/7 pt alloc code in the next patch. Since it's bogus.
>> 
>> How about:
>
> Yeah, but imo there's also more. I tried to understand the gen8 legacy ctx
> switch logic and failed, and I wasn't fully convinced that the gen7 one
> won't WARN if we actually enable full ppgtt. Given all that I decided to
> go with the most minimal patch and just removed the offending bogus WARN.
> But Mika/Michel promised to hang around for eventual cleanups?

Yes. There is more to come after this series.
I can include Chris's suggestion.

-Mika

> -Daniel
>
>> 
>> diff --git a/drivers/gpu/drm/i915/i915_gem_context.c b/drivers/gpu/drm/i915/i915_gem_context.c
>> index ed9232126644..be0f475ee1e5 100644
>> --- a/drivers/gpu/drm/i915/i915_gem_context.c
>> +++ b/drivers/gpu/drm/i915/i915_gem_context.c
>> @@ -638,22 +638,14 @@ mi_set_context(struct intel_engine_cs *ring,
>>  
>>  static inline bool should_skip_switch(struct intel_engine_cs *ring,
>>                                       struct intel_context *from,
>> -                                     struct intel_context *to)
>> +                                     struct intel_context *to,
>> +                                     struct i915_hw_ppgtt *ppgtt)
>>  {
>> -       struct drm_i915_private *dev_priv = ring->dev->dev_private;
>> -
>>         if (to->remap_slice)
>>                 return false;
>>  
>> -       if (to->ppgtt) {
>> -               if (from == to && !test_bit(ring->id,
>> -                               &to->ppgtt->pd_dirty_rings))
>> -                       return true;
>> -       } else if (dev_priv->mm.aliasing_ppgtt) {
>> -               if (from == to && !test_bit(ring->id,
>> -                               &dev_priv->mm.aliasing_ppgtt->pd_dirty_rings))
>> -                       return true;
>> -       }
>> +       if (from == to && !test_bit(ring->id, &ppgtt->pd_dirty_rings))
>> +               return true;
>>  
>>         return false;
>>  }
>> @@ -661,15 +653,13 @@ static inline bool should_skip_switch(struct intel_engine_cs *ring,
>>  static bool
>>  needs_pd_load_pre(struct intel_engine_cs *ring, struct intel_context *to)
>>  {
>> -       struct drm_i915_private *dev_priv = ring->dev->dev_private;
>> -
>>         if (!to->ppgtt)
>>                 return false;
>>  
>>         if (INTEL_INFO(ring->dev)->gen < 8)
>>                 return true;
>>  
>> -       if (ring != &dev_priv->ring[RCS])
>> +       if (ring->id != RCS)
>>                 return true;
>>  
>>         return false;
>> @@ -679,15 +669,13 @@ static bool
>>  needs_pd_load_post(struct intel_engine_cs *ring, struct intel_context *to,
>>                 u32 hw_flags)
>>  {
>> -       struct drm_i915_private *dev_priv = ring->dev->dev_private;
>> -
>>         if (!to->ppgtt)
>>                 return false;
>>  
>>         if (!IS_GEN8(ring->dev))
>>                 return false;
>>  
>> -       if (ring != &dev_priv->ring[RCS])
>> +       if (ring->id != RCS)
>>                 return false;
>>  
>>         if (hw_flags & MI_RESTORE_INHIBIT)
>> @@ -701,14 +689,15 @@ static int do_switch(struct intel_engine_cs *ring,
>>  {
>>         struct drm_i915_private *dev_priv = ring->dev->dev_private;
>>         struct intel_context *from = ring->last_context;
>> +       struct i915_hw_ppgtt *ppgtt = to->ppgtt ?: dev_priv->mm.aliasing_ppgtt;
>>         u32 hw_flags = 0;
>>         bool uninitialized = false;
>>         int ret, i;
>>  
>> -       if (from != NULL && ring == &dev_priv->ring[RCS])
>> +       if (from != NULL && ring->id == RCS)
>>                 BUG_ON(from->legacy_hw_ctx.rcs_vma == NULL);
>>  
>> -       if (should_skip_switch(ring, from, to))
>> +       if (should_skip_switch(ring, from, to, ppgtt))
>>                 return 0;
>>  
>>         /* Trying to pin first makes error handling easier. */
>> @@ -851,6 +840,9 @@ done:
>>         i915_gem_context_reference(to);
>>         ring->last_context = to;
>>  
>> +       WARN(ppgtt->pd_dirty_rings & (1<<ring->id),
>> +            "%s didn't clear reload\n", ring->name);
>> +
>>         if (uninitialized) {
>>                 if (ring->init_context) {
>>                         ret = ring->init_context(ring, to);
>> diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
>> index ef644e7eaac0..595daecb3283 100644
>> --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
>> +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
>> @@ -1385,13 +1385,6 @@ i915_gem_ringbuffer_submission(struct drm_device *dev, struct drm_file *file,
>>         if (ret)
>>                 goto error;
>>  
>> -       if (ctx->ppgtt)
>> -               WARN(ctx->ppgtt->pd_dirty_rings & (1<<ring->id),
>> -                       "%s didn't clear reload\n", ring->name);
>> -       else if (dev_priv->mm.aliasing_ppgtt)
>> -               WARN(dev_priv->mm.aliasing_ppgtt->pd_dirty_rings &
>> -                       (1<<ring->id), "%s didn't clear reload\n", ring->name);
>> -
>>         instp_mode = args->flags & I915_EXEC_CONSTANTS_MASK;
>>         instp_mask = I915_EXEC_CONSTANTS_MASK;
>>         switch (instp_mode) {
>> 
>> 
>> It gets rid of the internal knowledge of address spaces from the execbuf
>> code, and keeps the symmetry between handling aliasing_ppgtt and
>> full_ppgtt. (The former should just be a degenerate case where the PD
>> are all preloaded).
>> -Chris
>> 
>> -- 
>> Chris Wilson, Intel Open Source Technology Centre
>
> -- 
> Daniel Vetter
> Software Engineer, Intel Corporation
> http://blog.ffwll.ch
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2015-04-17 13:49 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-14 15:35 [PATCH 00/17] i915_gem_gtt.c polish Daniel Vetter
2015-04-14 15:35 ` [PATCH 01/17] drm/i915: Move gen8 clear_range vfunc setup into common code Daniel Vetter
2015-04-17 14:11   ` Mika Kuoppala
2015-04-14 15:35 ` [PATCH 02/17] drm/i915: Move vma vfuns to adddress_space Daniel Vetter
2015-04-14 16:09   ` Chris Wilson
2015-04-14 16:12     ` Chris Wilson
2015-04-14 17:08       ` Daniel Vetter
2015-04-14 17:23         ` Chris Wilson
2015-04-16  6:18     ` Mika Kuoppala
2015-04-16  7:39       ` Chris Wilson
2015-04-17 14:15   ` Mika Kuoppala
2015-04-14 15:35 ` [PATCH 03/17] drm/i915: Clean up aliasing ppgtt correctly on error paths Daniel Vetter
2015-04-17 14:34   ` Mika Kuoppala
2015-04-14 15:35 ` [PATCH 04/17] drm/i915: Unify aliasing ppgtt handling Daniel Vetter
2015-04-17 13:36   ` Mika Kuoppala
2015-04-17 16:21   ` Mika Kuoppala
2015-04-14 15:35 ` [PATCH 05/17] drm/i915: Move PTE_READ_ONLY to ->pte_encode vfunc Daniel Vetter
2015-04-17 16:22   ` Mika Kuoppala
2015-04-14 15:35 ` [PATCH 06/17] drm/i915: Dont clear PIN_GLOBAL in the execbuf pinning fallback Daniel Vetter
2015-04-14 15:53   ` Chris Wilson
2015-04-14 16:33     ` Chris Wilson
2015-04-14 17:01   ` [PATCH] " Daniel Vetter
2015-04-15 21:50     ` shuang.he
2015-04-14 15:35 ` [PATCH 07/17] drm/i915: Drop redundant GGTT rebinding Daniel Vetter
2015-04-14 16:03   ` Chris Wilson
2015-04-14 15:35 ` [PATCH 08/17] drm/i915: Don't look at pg_dirty_rings for aliasing ppgtt Daniel Vetter
2015-04-14 16:06   ` Chris Wilson
2015-04-14 17:11     ` Daniel Vetter
2015-04-14 17:53       ` Chris Wilson
2015-04-15 10:44         ` Daniel Vetter
2015-04-17 13:49           ` Mika Kuoppala [this message]
2015-04-20 16:02             ` Daniel Vetter
2015-04-20 16:08             ` Daniel Vetter
2015-04-21  8:18               ` Mika Kuoppala
2015-04-23 15:43             ` Chris Wilson
2015-04-23 18:56               ` Daniel Vetter
2015-04-23 19:52                 ` Chris Wilson
2015-04-23 21:52                 ` Chris Wilson
2015-07-31 16:26                 ` Chris Wilson
2015-07-31 17:38                   ` Chris Wilson
2015-04-14 15:35 ` [PATCH 09/17] drm/i915: Don't use atomics for pg_dirty_rings Daniel Vetter
2015-04-17 16:39   ` Mika Kuoppala
2015-04-14 15:35 ` [PATCH 10/17] drm/i915: Remove misleading comment around bind_to_vm Daniel Vetter
2015-04-17 18:09   ` Mika Kuoppala
2015-04-14 15:35 ` [PATCH 11/17] drm/i915: Fix up the vma aliasing ppgtt binding Daniel Vetter
2015-04-15 10:47   ` Chris Wilson
2015-04-16  8:01     ` Daniel Vetter
2015-04-16  8:07       ` Chris Wilson
2015-04-16  8:57         ` Daniel Vetter
2015-04-20 16:04   ` [PATCH] " Daniel Vetter
2015-04-21 13:29     ` Mika Kuoppala
2015-04-24 11:14     ` Chris Wilson
2015-04-24 11:55       ` Chris Wilson
2015-05-04  8:49         ` Daniel Vetter
2015-05-04  9:06           ` Chris Wilson
2015-05-04  9:20             ` Daniel Vetter
2015-04-14 15:35 ` [PATCH 12/17] drm/i915: Arm cmd parser with aliasng ppgtt only Daniel Vetter
2015-04-14 18:10   ` Chris Wilson
2015-04-15  9:43     ` Daniel Vetter
2015-04-15 10:07       ` Chris Wilson
2015-04-15 10:28         ` Daniel Vetter
2015-04-30 10:37           ` Jani Nikula
2015-04-24 12:57   ` Mika Kuoppala
2015-05-04  8:54     ` [PATCH] drm/i915: Simplify cmd-parser DISPATCH_SECURE check Daniel Vetter
2015-05-04  9:23       ` Daniel Vetter
2015-05-04 12:52       ` shuang.he
2015-04-14 15:35 ` [PATCH 13/17] drm/i915: move i915_gem_restore_gtt_mappings around Daniel Vetter
2015-04-14 15:35 ` [PATCH 14/17] drm/i915: Move ppgtt_bind/unbind around Daniel Vetter
2015-04-14 15:35 ` [PATCH 15/17] drm/i915: Unduplicate i915_ggtt_unbind/bind_vma Daniel Vetter
2015-04-14 15:35 ` [PATCH 16/17] drm/i915: Don't try to outsmart gcc in i915_gem_gtt.c Daniel Vetter
2015-04-14 15:35 ` [PATCH 17/17] drm/i915: Move i915_get_ggtt_vma_pages into ggtt_bind_vma Daniel Vetter
2015-04-21 13:36   ` Mika Kuoppala
2015-04-23 19:08     ` Daniel Vetter
2015-04-15 10:49 ` [PATCH 00/17] i915_gem_gtt.c polish Chris Wilson

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=87siby27c1.fsf@gaia.fi.intel.com \
    --to=mika.kuoppala@linux.intel.com \
    --cc=chris@chris-wilson.co.uk \
    --cc=daniel@ffwll.ch \
    /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.