From: Daniel Vetter <daniel@ffwll.ch>
To: Chris Wilson <chris@chris-wilson.co.uk>,
Daniel Vetter <daniel@ffwll.ch>,
intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 2/5] drm/i915: Fallback to using CPU relocations for large batch buffers
Date: Wed, 28 Jan 2015 10:14:47 +0100 [thread overview]
Message-ID: <20150128091447.GG4764@phenom.ffwll.local> (raw)
In-Reply-To: <20150127214300.GB27629@nuc-i3427.alporthouse.com>
On Tue, Jan 27, 2015 at 09:43:00PM +0000, Chris Wilson wrote:
> On Tue, Jan 27, 2015 at 04:09:37PM +0100, Daniel Vetter wrote:
> > On Wed, Jan 14, 2015 at 11:20:56AM +0000, Chris Wilson wrote:
> > > static int
> > > i915_gem_execbuffer_reserve_vma(struct i915_vma *vma,
> > > struct intel_engine_cs *ring,
> > > @@ -536,14 +589,21 @@ i915_gem_execbuffer_reserve_vma(struct i915_vma *vma,
> > > int ret;
> > >
> > > flags = 0;
> > > - if (entry->flags & __EXEC_OBJECT_NEEDS_MAP)
> > > - flags |= PIN_GLOBAL | PIN_MAPPABLE;
> > > - if (entry->flags & EXEC_OBJECT_NEEDS_GTT)
> > > - flags |= PIN_GLOBAL;
> > > - if (entry->flags & __EXEC_OBJECT_NEEDS_BIAS)
> > > - flags |= BATCH_OFFSET_BIAS | PIN_OFFSET_BIAS;
> > > + if (!drm_mm_node_allocated(&vma->node)) {
> > > + if (entry->flags & __EXEC_OBJECT_NEEDS_MAP)
> > > + flags |= PIN_GLOBAL | PIN_MAPPABLE;
> > > + if (entry->flags & EXEC_OBJECT_NEEDS_GTT)
> > > + flags |= PIN_GLOBAL;
> > > + if (entry->flags & __EXEC_OBJECT_NEEDS_BIAS)
> > > + flags |= BATCH_OFFSET_BIAS | PIN_OFFSET_BIAS;
> > > + }
> >
> > Hm, aren't we always calling reserve un buffers we know we've just
> > unbound? Keeping the flags computation would at least be a good selfcheck
> > about the consistency of our placing decisions, so I'd like to keep it.
I still think this isn't required, even with the ping-pong preventer below
kept. Maybe add a WARN_ON(drm_mm_node_allocated); just for paranoia
instead?
> >
> > >
> > > ret = i915_gem_object_pin(obj, vma->vm, entry->alignment, flags);
> > > + if ((ret == -ENOSPC || ret == -E2BIG) &&
> > > + only_mappable_for_reloc(entry->flags))
> > > + ret = i915_gem_object_pin(obj, vma->vm,
> > > + entry->alignment,
> > > + flags & ~(PIN_GLOBAL | PIN_MAPPABLE));
> > > if (ret)
> > > return ret;
> > >
> > > @@ -605,13 +665,13 @@ eb_vma_misplaced(struct i915_vma *vma)
> > > vma->node.start & (entry->alignment - 1))
> > > return true;
> > >
> > > - if (entry->flags & __EXEC_OBJECT_NEEDS_MAP && !obj->map_and_fenceable)
> > > - return true;
> > > -
> > > if (entry->flags & __EXEC_OBJECT_NEEDS_BIAS &&
> > > vma->node.start < BATCH_OFFSET_BIAS)
> > > return true;
> > >
> > > + if (entry->flags & __EXEC_OBJECT_NEEDS_MAP && !obj->map_and_fenceable)
> > > + return !only_mappable_for_reloc(entry->flags);
> >
> > Hm, this seems to contradict your commit message a bit since it'll result
> > in a behavioural change of what we try to push into mappable for relocs.
> >
> > Shouldn't we instead just clear the NEEDS_MAP flag in reserve_vma when the
> > mappable pin fails and we fall back?
>
> This pair of chunks is required to prevent the ping-pong you just
> described, which was very slow.
Makes sense, but imo then requires a comment (e.g. "prevent costly
ping-pong just for relocations") and some words in the commmit message.
-Daniel
--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2015-01-28 9:13 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-01-14 11:20 [PATCH 1/5] agp/intel: Serialise after GTT updates Chris Wilson
2015-01-14 11:20 ` [PATCH 2/5] drm/i915: Fallback to using CPU relocations for large batch buffers Chris Wilson
2015-01-15 9:45 ` Daniel, Thomas
2015-01-26 8:57 ` Jani Nikula
2015-01-27 15:09 ` Daniel Vetter
2015-01-27 21:43 ` Chris Wilson
2015-01-28 9:14 ` Daniel Vetter [this message]
2015-01-28 9:34 ` Chris Wilson
2015-01-14 11:20 ` [PATCH 3/5] drm/i915: Trim the command parser allocations Chris Wilson
2015-02-13 13:08 ` John Harrison
2015-02-13 13:23 ` Chris Wilson
2015-02-13 16:43 ` John Harrison
2015-02-23 16:09 ` Daniel Vetter
2015-01-14 11:20 ` [PATCH 4/5] drm/i915: Cache last obj->pages location for i915_gem_object_get_page() Chris Wilson
2015-02-13 13:33 ` John Harrison
2015-02-13 13:35 ` John Harrison
2015-02-13 14:28 ` Chris Wilson
2015-01-14 11:20 ` [PATCH 5/5] drm/i915: Tidy batch pool logic Chris Wilson
2015-01-14 20:54 ` shuang.he
2015-02-13 14:00 ` John Harrison
2015-02-13 14:57 ` Chris Wilson
2015-01-26 10:47 ` [PATCH v2] agp/intel: Serialise after GTT updates Chris Wilson
2015-01-27 14:58 ` Daniel Vetter
2015-01-27 21:44 ` Chris Wilson
2015-01-28 9:15 ` Daniel Vetter
2015-01-28 7:50 ` shuang.he
2015-02-06 0:11 ` [PATCH 1/5] " Jesse Barnes
2015-02-06 8:31 ` Chris Wilson
2015-02-06 8:32 ` Daniel Vetter
2015-02-13 8:59 ` Ville Syrjälä
2015-02-13 9:25 ` 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=20150128091447.GG4764@phenom.ffwll.local \
--to=daniel@ffwll.ch \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox