From: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
To: Chris Wilson <chris@chris-wilson.co.uk>, intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 2/2] drm/i915: Drop i915_gem_obj_is_pinned() from set-cache-level
Date: Wed, 7 Oct 2015 16:57:25 +0100 [thread overview]
Message-ID: <561540E5.7050207@linux.intel.com> (raw)
In-Reply-To: <1444127996-23561-2-git-send-email-chris@chris-wilson.co.uk>
Hi,
On 06/10/15 11:39, Chris Wilson wrote:
> Since the remove of the pin-ioctl, we only care about not changing the
> cache level on buffers pinned to the hardware as indicated by
> obj->pin_display. So we can safely replace i915_gem_object_is_pinned()
i915_gem_obj_is_pinned
> here with a plain obj->pin_display check. During rebinding, we will check
> sanity checks in case vma->pin_count is erroneously set.
"do sanity checks" or something.
> At the same time, we can micro-optimise GTT mmap() behaviour since we
> only need to relinquish the mmaps before Sandybridge.
>
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> ---
> drivers/gpu/drm/i915/i915_gem.c | 40 ++++++++++++++++++++++++----------------
> 1 file changed, 24 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> index d4a3bdf0c5b6..2b8ed7a2faab 100644
> --- a/drivers/gpu/drm/i915/i915_gem.c
> +++ b/drivers/gpu/drm/i915/i915_gem.c
> @@ -3629,31 +3629,34 @@ int i915_gem_object_set_cache_level(struct drm_i915_gem_object *obj,
> {
> struct drm_device *dev = obj->base.dev;
> struct i915_vma *vma, *next;
> + bool bound = false;
> int ret = 0;
>
> if (obj->cache_level == cache_level)
> goto out;
>
> - if (i915_gem_obj_is_pinned(obj)) {
> - DRM_DEBUG("can not change the cache level of pinned objects\n");
> - return -EBUSY;
> - }
> -
> list_for_each_entry_safe(vma, next, &obj->vma_list, vma_link) {
> + if (!drm_mm_node_allocated(&vma->node))
> + continue;
> +
> + if (vma->pin_count) {
> + DRM_DEBUG("can not change the cache level of pinned objects\n");
> + return -EBUSY;
> + }
> +
But this is the same as i915_gem_obj_is_pinned, where is the
obj->pin_display change commit message talks about?
> if (!i915_gem_valid_gtt_space(vma, cache_level)) {
> ret = i915_vma_unbind(vma);
> if (ret)
> return ret;
> - }
> + } else
> + bound = true;
> }
>
> - if (i915_gem_obj_bound_any(obj)) {
> + if (bound) {
> ret = i915_gem_object_wait_rendering(obj, false);
> if (ret)
> return ret;
>
> - i915_gem_object_finish_gtt(obj);
> -
> /* Before SandyBridge, you could not use tiling or fence
> * registers with snooped memory, so relinquish any fences
> * currently pointing to our region in the aperture.
> @@ -3664,13 +3667,18 @@ int i915_gem_object_set_cache_level(struct drm_i915_gem_object *obj,
> return ret;
> }
>
> - list_for_each_entry(vma, &obj->vma_list, vma_link)
> - if (drm_mm_node_allocated(&vma->node)) {
> - ret = i915_vma_bind(vma, cache_level,
> - PIN_UPDATE);
> - if (ret)
> - return ret;
> - }
> + /* Access to snoopable pages through the GTT is incoherent. */
> + if (cache_level != I915_CACHE_NONE && !HAS_LLC(dev))
> + i915_gem_release_mmap(obj);
Don't fully understand this one - but my question is this. Previously
userspace would lose mappings on cache level changes any time, after
this only on !LLC when turning on caching mode. So this means userspace
needs to know about this change and modify it's behavior? Or what
exactly would happen in practice?
Regards,
Tvrtko
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2015-10-07 15:57 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-06 10:39 [PATCH 1/2] drm/i915: Kill DRI1 cliprects Chris Wilson
2015-10-06 10:39 ` [PATCH 2/2] drm/i915: Drop i915_gem_obj_is_pinned() from set-cache-level Chris Wilson
2015-10-06 11:28 ` Daniel Vetter
2015-10-06 11:41 ` Chris Wilson
2015-10-06 11:58 ` [PATCH] drm/i915: Move the mb() following release-mmap into release-mmap Chris Wilson
2015-10-06 14:40 ` Tvrtko Ursulin
2015-10-14 10:57 ` Chris Wilson
2015-10-06 12:02 ` [PATCH] drm/i915: Stop discarding GTT cache-domain on unbind vma Chris Wilson
2015-10-06 12:40 ` Daniel Vetter
2015-10-06 12:46 ` Chris Wilson
2015-10-06 13:05 ` Daniel Vetter
2015-10-07 15:57 ` Tvrtko Ursulin [this message]
2015-10-07 16:19 ` [PATCH 2/2] drm/i915: Drop i915_gem_obj_is_pinned() from set-cache-level Chris Wilson
2015-10-08 9:32 ` Tvrtko Ursulin
2015-10-08 9:46 ` Chris Wilson
2015-10-09 10:17 ` Tvrtko Ursulin
2015-10-09 10:34 ` Chris Wilson
2015-10-09 12:01 ` Tvrtko Ursulin
2015-10-06 11:21 ` [PATCH 1/2] drm/i915: Kill DRI1 cliprects Daniel Vetter
2015-10-06 12:43 ` Chris Wilson
2015-10-06 14:19 ` Tvrtko Ursulin
2015-10-06 15:37 ` Chris Wilson
2015-10-07 13:58 ` Daniel Vetter
2015-10-06 14:29 ` Dave Gordon
2015-10-06 15:36 ` 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=561540E5.7050207@linux.intel.com \
--to=tvrtko.ursulin@linux.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 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).