From: Daniel Vetter <daniel@ffwll.ch>
To: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>, Intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 07/13] drm/i915: Introduce dedicated object VMA iterator
Date: Mon, 11 Jan 2016 09:43:59 +0100 [thread overview]
Message-ID: <20160111084359.GQ8076@phenom.ffwll.local> (raw)
In-Reply-To: <568FB9AA.7020201@linux.intel.com>
On Fri, Jan 08, 2016 at 01:29:14PM +0000, Tvrtko Ursulin wrote:
>
> On 08/01/16 11:29, Tvrtko Ursulin wrote:
> >From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> >
> >Purpose is to catch places which iterate the object VMA list
> >without holding the big lock.
> >
> >Implemented by open coding list_for_each_entry to make the
> >macro compatible with existing call sites.
> >
> >Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> >Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
> >---
> > drivers/gpu/drm/i915/i915_debugfs.c | 8 ++++----
> > drivers/gpu/drm/i915/i915_drv.h | 6 ++++++
> > drivers/gpu/drm/i915/i915_gem.c | 24 ++++++++++++------------
> > drivers/gpu/drm/i915/i915_gem_gtt.c | 2 +-
> > drivers/gpu/drm/i915/i915_gem_shrinker.c | 2 +-
> > drivers/gpu/drm/i915/i915_gpu_error.c | 4 ++--
> > 6 files changed, 26 insertions(+), 20 deletions(-)
> >
> >diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> >index 714a45cf8a51..d7c2a3201161 100644
> >--- a/drivers/gpu/drm/i915/i915_debugfs.c
> >+++ b/drivers/gpu/drm/i915/i915_debugfs.c
> >@@ -117,7 +117,7 @@ static u64 i915_gem_obj_total_ggtt_size(struct drm_i915_gem_object *obj)
> > u64 size = 0;
> > struct i915_vma *vma;
> >
> >- list_for_each_entry(vma, &obj->vma_list, vma_link) {
> >+ i915_gem_obj_for_each_vma(vma, obj) {
> > if (i915_is_ggtt(vma->vm) &&
> > drm_mm_node_allocated(&vma->node))
> > size += vma->node.size;
> >@@ -155,7 +155,7 @@ describe_obj(struct seq_file *m, struct drm_i915_gem_object *obj)
> > obj->madv == I915_MADV_DONTNEED ? " purgeable" : "");
> > if (obj->base.name)
> > seq_printf(m, " (name: %d)", obj->base.name);
> >- list_for_each_entry(vma, &obj->vma_list, vma_link) {
> >+ i915_gem_obj_for_each_vma(vma, obj) {
> > if (vma->pin_count > 0)
> > pin_count++;
> > }
> >@@ -164,7 +164,7 @@ describe_obj(struct seq_file *m, struct drm_i915_gem_object *obj)
> > seq_printf(m, " (display)");
> > if (obj->fence_reg != I915_FENCE_REG_NONE)
> > seq_printf(m, " (fence: %d)", obj->fence_reg);
> >- list_for_each_entry(vma, &obj->vma_list, vma_link) {
> >+ i915_gem_obj_for_each_vma(vma, obj) {
> > seq_printf(m, " (%sgtt offset: %08llx, size: %08llx",
> > i915_is_ggtt(vma->vm) ? "g" : "pp",
> > vma->node.start, vma->node.size);
> >@@ -342,7 +342,7 @@ static int per_file_stats(int id, void *ptr, void *data)
> > stats->shared += obj->base.size;
> >
> > if (USES_FULL_PPGTT(obj->base.dev)) {
> >- list_for_each_entry(vma, &obj->vma_list, vma_link) {
> >+ i915_gem_obj_for_each_vma(vma, obj) {
> > struct i915_hw_ppgtt *ppgtt;
> >
> > if (!drm_mm_node_allocated(&vma->node))
> >diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> >index b77a5d84eac2..0406a020dfcc 100644
> >--- a/drivers/gpu/drm/i915/i915_drv.h
> >+++ b/drivers/gpu/drm/i915/i915_drv.h
> >@@ -2852,6 +2852,12 @@ struct drm_i915_gem_object *i915_gem_object_create_from_data(
> > void i915_gem_free_object(struct drm_gem_object *obj);
> > void i915_gem_vma_destroy(struct i915_vma *vma);
> >
> >+#define i915_gem_obj_for_each_vma(vma, obj) \
> >+ for (WARN_ON_ONCE(!mutex_is_locked(&(obj)->base.dev->struct_mutex)), \
> >+ vma = list_first_entry(&(obj)->vma_list, typeof(*vma), vma_link);\
> >+ &vma->vma_link != (&(obj)->vma_list); \
> >+ vma = list_next_entry(vma, vma_link))
> >+
>
>
> Unfortunately error capture is not happy with this approach. Can't even see
> that error capture attempts to grab the mutex anywhere.
>
> So what? Drop the idea or add a "doing error capture" flag somewhere?
Fix the bugs. Not surprise at all that we've screwed this up all over the
place ;-) Afaics modeset code isn't much better either ...
-Daniel
--
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
next prev parent reply other threads:[~2016-01-11 8:43 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-08 11:29 [PATCH v2 00/13] Misc cleanups and locking fixes Tvrtko Ursulin
2016-01-08 11:29 ` [PATCH 01/13] drm/i915/bdw+: Replace list_del+list_add_tail with list_move_tail Tvrtko Ursulin
2016-01-11 8:22 ` Daniel Vetter
2016-01-08 11:29 ` [PATCH 02/13] drm/i915: Don't need a timer to wake us up Tvrtko Ursulin
2016-01-11 8:26 ` Daniel Vetter
2016-01-08 11:29 ` [PATCH 03/13] drm/i915: Avoid invariant conditionals in lrc interrupt handler Tvrtko Ursulin
2016-01-11 8:29 ` Daniel Vetter
2016-01-11 9:43 ` Tvrtko Ursulin
2016-01-08 11:29 ` [PATCH 04/13] drm/i915: Fail engine initialization if LRCA is incorrectly aligned Tvrtko Ursulin
2016-01-11 8:31 ` Daniel Vetter
2016-01-11 16:02 ` Dave Gordon
2016-01-11 23:31 ` Chris Wilson
2016-01-08 11:29 ` [PATCH 05/13] drm/i915: Cache LRCA in the context Tvrtko Ursulin
2016-01-11 8:38 ` Daniel Vetter
2016-01-11 19:41 ` Dave Gordon
2016-01-12 9:59 ` Tvrtko Ursulin
2016-01-08 11:29 ` [PATCH 06/13] drm/i915: Only grab timestamps when needed Tvrtko Ursulin
2016-01-11 8:42 ` Daniel Vetter
2016-01-11 9:45 ` Tvrtko Ursulin
2016-01-08 11:29 ` [PATCH 07/13] drm/i915: Introduce dedicated object VMA iterator Tvrtko Ursulin
2016-01-08 11:44 ` Chris Wilson
2016-01-11 8:48 ` Daniel Vetter
2016-01-08 13:29 ` Tvrtko Ursulin
2016-01-11 8:43 ` Daniel Vetter [this message]
2016-01-11 9:51 ` Tvrtko Ursulin
2016-01-12 16:19 ` Daniel Vetter
2016-01-12 16:43 ` Maarten Lankhorst
2016-01-13 14:35 ` Tvrtko Ursulin
2016-01-08 11:29 ` [PATCH 08/13] drm/i915: GEM operations need to be done under the big lock Tvrtko Ursulin
2016-01-08 11:40 ` Chris Wilson
2016-01-08 11:45 ` Chris Wilson
2016-01-08 11:47 ` Tvrtko Ursulin
2016-01-08 12:09 ` Chris Wilson
2016-01-08 12:40 ` Tvrtko Ursulin
2016-01-08 13:04 ` [PATCH v3 " Tvrtko Ursulin
2016-01-08 11:29 ` [PATCH 09/13] drm/i915: Remove two impossible asserts Tvrtko Ursulin
2016-01-11 8:49 ` Daniel Vetter
2016-01-08 11:29 ` [PATCH 10/13] drm/i915: Introduce dedicated safe object VMA iterator Tvrtko Ursulin
2016-01-08 11:29 ` [PATCH 11/13] drm/i915: Cache ringbuffer GTT address Tvrtko Ursulin
2016-01-08 11:37 ` Chris Wilson
2016-01-11 8:49 ` Daniel Vetter
2016-01-12 11:42 ` [PATCH v3 3/7] drm/i915: Cache ringbuffer GTT VMA Tvrtko Ursulin
2016-01-12 11:54 ` Chris Wilson
2016-01-11 16:16 ` [PATCH 11/13] drm/i915: Cache ringbuffer GTT address Dave Gordon
2016-01-11 17:44 ` Tvrtko Ursulin
2016-01-08 11:29 ` [PATCH 12/13] drm/i915: Add BKL asserts to get page helpers Tvrtko Ursulin
2016-01-08 11:37 ` Chris Wilson
2016-01-08 11:29 ` [PATCH 13/13] drm/i915: Cache LRC state page in the context Tvrtko Ursulin
2016-01-08 11:38 ` [PATCH v2 00/13] Misc cleanups and locking fixes Chris Wilson
2016-01-11 9:44 ` ✗ failure: Fi.CI.BAT Patchwork
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=20160111084359.GQ8076@phenom.ffwll.local \
--to=daniel@ffwll.ch \
--cc=Intel-gfx@lists.freedesktop.org \
--cc=daniel.vetter@ffwll.ch \
--cc=tvrtko.ursulin@linux.intel.com \
/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.