All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chris Wilson <chris@chris-wilson.co.uk>
To: Dave Gordon <david.s.gordon@intel.com>
Cc: intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 4/4 v3] drm/i915: miscellaneous tiny tweaks to GEM object->dirty
Date: Thu, 10 Dec 2015 21:16:08 +0000	[thread overview]
Message-ID: <20151210211608.GF11596@nuc-i3427.alporthouse.com> (raw)
In-Reply-To: <1449773486-30822-5-git-send-email-david.s.gordon@intel.com>

On Thu, Dec 10, 2015 at 06:51:26PM +0000, Dave Gordon wrote:
> This patch covers a couple more places where a GEM object is (or may be)
> modified by means of CPU writes, and should therefore be marked dirty to
> ensure that the changes are not lost in the event that the object is
> evicted under memory pressure.
> 
> One is in i915_gem_begin_cpu_access(); after this call, the GEM object may
> be written to by the caller (which may not be part of the i915 driver e.g.
> udl). We must therefore assume that the object is dirty hereafter if
> the caller has asked for write access.
> 
> Another is in copy_batch(); the destination object is obviously dirty
> after being written, but failing to mark it doesn't cause a bug at
> present, because the object is page-pinned at this point, and should
> remain either page- pinned or GTT-pinned until it's retired, at which
> point its content can be discarded. However, if the lifecycle of shadow
> batches is ever changed (e.g. by the introduction of a GPU scheduler)
> this might no longer be true, so it's safer to mark it correctly (this
> introduces no overhead if the buffer is never swappable). It also makes
> the content cycle clearer:
> 
> 	---allocate-->
> 	[empty buffer acquired from pool]
> 	---fill-->
> 	[valid buffer full of unsaved data]
> 	---use-->
> 	[buffer full of unsaved but unwanted data]
> 	--retire-->
> 	[purgeable buffer returned to pool]
> 	... repeat ...
> 
> The last change here is just for consistency; since 'dirty' has been
> declared as an (unsigned int) bitfield, let's not treat it as a bool.
> Maybe it should be a byte instead?

No, it's just because obj->dirty is older than C's bool type. Changing
it to be bool obj->dirty:1 would be fine - except that there is one
particular very hot path where moving it to an unsigned obj->flags field
would be even better.

> diff --git a/drivers/gpu/drm/i915/i915_gem_dmabuf.c b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
> index e9c2bfd..5eb7887 100644
> --- a/drivers/gpu/drm/i915/i915_gem_dmabuf.c
> +++ b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
> @@ -208,6 +208,9 @@ static int i915_gem_begin_cpu_access(struct dma_buf *dma_buf, size_t start, size
>  		return ret;
>  
>  	ret = i915_gem_object_set_to_cpu_domain(obj, write);
> +	if (write)
> +		obj->dirty = 1;
> +

So looking at the only existing example (drm/udl which only reads from
te object anyway) this would fall into bug category. Hence separate
patch. But I'll defer to Daniel as to whether the dma-buf is meant to
operate at the object level or at the page level with regards to dirty
tracking (certainly we would struggle at the moment with dma-buf on
massive objects).
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

      reply	other threads:[~2015-12-10 21:16 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-08 16:51 [PATCH 0/3] drm/i915: mark GEM objects as dirtied by CPU Dave Gordon
2015-12-08 16:51 ` [PATCH 1/3] drm/i915: mark GEM objects as dirty when filled by the CPU Dave Gordon
2015-12-08 17:00   ` Chris Wilson
2015-12-08 18:06     ` Dave Gordon
2015-12-10 10:49       ` Daniel Vetter
2015-12-08 16:51 ` [PATCH 2/3] drm/i915: mark GEM objects as dirty when updated " Dave Gordon
2015-12-08 17:00   ` Chris Wilson
2015-12-08 18:43     ` Dave Gordon
2015-12-08 16:51 ` [PATCH 3/3] drm/i915: mark GEM objects as dirty when written " Dave Gordon
2015-12-08 17:03   ` Chris Wilson
2015-12-08 18:24     ` Dave Gordon
2015-12-10 13:10       ` Daniel Vetter
2015-12-09 15:52 ` [PATCH 0/2 v2] drm/i915: mark GEM objects as dirtied by CPU Dave Gordon
2015-12-09 15:52   ` [PATCH 1/2 v2] drm/i915: mark GEM object pages dirty when mapped & written by the CPU Dave Gordon
2015-12-10 13:29     ` Chris Wilson
2015-12-10 17:24       ` Dave Gordon
2015-12-10 21:04         ` Chris Wilson
2015-12-11 17:08           ` Daniel Vetter
2015-12-11 17:27             ` Chris Wilson
2015-12-09 15:52   ` [PATCH 2/2 v2] drm/i915: mark GEM objects dirty after overwriting their contents Dave Gordon
2015-12-10 13:22     ` Chris Wilson
2015-12-10 14:06     ` Daniel Vetter
2015-12-10 14:52       ` Chris Wilson
2015-12-11 17:09         ` Daniel Vetter
2015-12-10 16:19       ` Dave Gordon
2015-12-10 18:51   ` [PATCH 0/4 v3] drm/i915: mark GEM objects as dirtied by CPU Dave Gordon
2015-12-10 18:51     ` [PATCH 1/4 v3] drm/i915: mark GEM object pages dirty when mapped & written by the CPU Dave Gordon
2015-12-10 21:07       ` Chris Wilson
2015-12-10 18:51     ` [PATCH 2/4 v3] drm/i915: mark a newly-created GEM object dirty when filled with data Dave Gordon
2015-12-10 21:06       ` Chris Wilson
2015-12-11 17:21         ` Daniel Vetter
2015-12-10 18:51     ` [PATCH 3/4 v3] drm/i915: always mark the target of pwrite() as dirty Dave Gordon
2015-12-10 21:09       ` Chris Wilson
2015-12-10 18:51     ` [PATCH 4/4 v3] drm/i915: miscellaneous tiny tweaks to GEM object->dirty Dave Gordon
2015-12-10 21:16       ` Chris Wilson [this message]

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=20151210211608.GF11596@nuc-i3427.alporthouse.com \
    --to=chris@chris-wilson.co.uk \
    --cc=david.s.gordon@intel.com \
    --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.