linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] dma-buf: fix debugfs versus rcu and fence dumping v2
@ 2018-12-06 15:47 jglisse
  2018-12-06 16:58 ` Chris Wilson
  0 siblings, 1 reply; 3+ messages in thread
From: jglisse @ 2018-12-06 15:47 UTC (permalink / raw)
  To: linux-kernel
  Cc: Jérôme Glisse, Christian König, Daniel Vetter,
	Sumit Semwal, linux-media, dri-devel, linaro-mm-sig,
	Stéphane Marchesin, stable

From: Jérôme Glisse <jglisse@redhat.com>

The debugfs take reference on fence without dropping them. Also the
rcu section are not well balance. Fix all that ...

Changed since v1:
    - moved fobj logic around to be rcu safe

Signed-off-by: Jérôme Glisse <jglisse@redhat.com>
Cc: Christian König <christian.koenig@amd.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Sumit Semwal <sumit.semwal@linaro.org>
Cc: linux-media@vger.kernel.org
Cc: dri-devel@lists.freedesktop.org
Cc: linaro-mm-sig@lists.linaro.org
Cc: Stéphane Marchesin <marcheu@chromium.org>
Cc: stable@vger.kernel.org
---
 drivers/dma-buf/dma-buf.c | 21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
index 13884474d158..9688d99894d6 100644
--- a/drivers/dma-buf/dma-buf.c
+++ b/drivers/dma-buf/dma-buf.c
@@ -1048,27 +1048,38 @@ static int dma_buf_debug_show(struct seq_file *s, void *unused)
 		while (true) {
 			seq = read_seqcount_begin(&robj->seq);
 			rcu_read_lock();
-			fobj = rcu_dereference(robj->fence);
-			shared_count = fobj ? fobj->shared_count : 0;
 			fence = rcu_dereference(robj->fence_excl);
+			fence = dma_fence_get_rcu(fence);
 			if (!read_seqcount_retry(&robj->seq, seq))
 				break;
 			rcu_read_unlock();
 		}
-
-		if (fence)
+		if (fence) {
 			seq_printf(s, "\tExclusive fence: %s %s %ssignalled\n",
 				   fence->ops->get_driver_name(fence),
 				   fence->ops->get_timeline_name(fence),
 				   dma_fence_is_signaled(fence) ? "" : "un");
-		for (i = 0; i < shared_count; i++) {
+			dma_fence_put(fence);
+		}
+
+		rcu_read_lock();
+		fobj = rcu_dereference(robj->fence);
+		shared_count = fobj ? fobj->shared_count : 0;
+		for (i = 0, fence = NULL; i < shared_count; i++) {
 			fence = rcu_dereference(fobj->shared[i]);
 			if (!dma_fence_get_rcu(fence))
 				continue;
+			rcu_read_unlock();
+
 			seq_printf(s, "\tShared fence: %s %s %ssignalled\n",
 				   fence->ops->get_driver_name(fence),
 				   fence->ops->get_timeline_name(fence),
 				   dma_fence_is_signaled(fence) ? "" : "un");
+			dma_fence_put(fence);
+
+			rcu_read_lock();
+			fobj = rcu_dereference(robj->fence);
+			shared_count = fobj ? fobj->shared_count : 0;
 		}
 		rcu_read_unlock();
 
-- 
2.17.2


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] dma-buf: fix debugfs versus rcu and fence dumping v2
  2018-12-06 15:47 [PATCH] dma-buf: fix debugfs versus rcu and fence dumping v2 jglisse
@ 2018-12-06 16:58 ` Chris Wilson
  2018-12-06 18:30   ` Koenig, Christian
  0 siblings, 1 reply; 3+ messages in thread
From: Chris Wilson @ 2018-12-06 16:58 UTC (permalink / raw)
  To: jglisse, linux-kernel
  Cc: Daniel Vetter, dri-devel, linaro-mm-sig, Jérôme Glisse,
	stable, Stéphane Marchesin, Christian König,
	linux-media

Quoting jglisse@redhat.com (2018-12-06 15:47:04)
> From: Jérôme Glisse <jglisse@redhat.com>
> 
> The debugfs take reference on fence without dropping them. Also the
> rcu section are not well balance. Fix all that ...

Wouldn't the code be a lot simpler (and a consistent snapshot) if it used
reservation_object_get_fences_rcu()?
-Chris

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] dma-buf: fix debugfs versus rcu and fence dumping v2
  2018-12-06 16:58 ` Chris Wilson
@ 2018-12-06 18:30   ` Koenig, Christian
  0 siblings, 0 replies; 3+ messages in thread
From: Koenig, Christian @ 2018-12-06 18:30 UTC (permalink / raw)
  To: Chris Wilson, jglisse, linux-kernel
  Cc: Daniel Vetter, dri-devel, linaro-mm-sig, stable,
	Stéphane Marchesin, linux-media

Am 06.12.18 um 17:58 schrieb Chris Wilson:
> Quoting jglisse@redhat.com (2018-12-06 15:47:04)
>> From: Jérôme Glisse <jglisse@redhat.com>
>>
>> The debugfs take reference on fence without dropping them. Also the
>> rcu section are not well balance. Fix all that ...
> Wouldn't the code be a lot simpler (and a consistent snapshot) if it used
> reservation_object_get_fences_rcu()?

Yeah, thought about that as well.

Or even better move that code into reservation_object.c as 
reservation_object_show_fences() or something like that.

Christian.

> -Chris


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2018-12-06 18:30 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-12-06 15:47 [PATCH] dma-buf: fix debugfs versus rcu and fence dumping v2 jglisse
2018-12-06 16:58 ` Chris Wilson
2018-12-06 18:30   ` Koenig, Christian

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).