* [PATCH] dma-buf: fix debugfs versus rcu and fence dumping v2
@ 2018-12-06 15:47 ` jglisse
0 siblings, 0 replies; 6+ messages in thread
From: jglisse @ 2018-12-06 15:47 UTC (permalink / raw)
To: linux-kernel
Cc: Daniel Vetter, dri-devel, linaro-mm-sig, Jérôme Glisse,
stable, Stéphane Marchesin, Christian König,
linux-media
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
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH] dma-buf: fix debugfs versus rcu and fence dumping v2
@ 2018-12-06 15:47 ` jglisse
0 siblings, 0 replies; 6+ 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] 6+ messages in thread
* Re: [PATCH] dma-buf: fix debugfs versus rcu and fence dumping v2
2018-12-06 15:47 ` jglisse
@ 2018-12-06 16:58 ` Chris Wilson
-1 siblings, 0 replies; 6+ messages in thread
From: Chris Wilson @ 2018-12-06 16:58 UTC (permalink / raw)
To: 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] 6+ messages in thread
* Re: [PATCH] dma-buf: fix debugfs versus rcu and fence dumping v2
@ 2018-12-06 16:58 ` Chris Wilson
0 siblings, 0 replies; 6+ 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] 6+ 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
-1 siblings, 0 replies; 6+ messages in thread
From: Koenig, Christian @ 2018-12-06 18:30 UTC (permalink / raw)
To: Chris Wilson, jglisse@redhat.com, linux-kernel@vger.kernel.org
Cc: Daniel Vetter, dri-devel@lists.freedesktop.org,
linaro-mm-sig@lists.linaro.org, stable@vger.kernel.org,
Stéphane Marchesin, linux-media@vger.kernel.org
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] 6+ messages in thread
* Re: [PATCH] dma-buf: fix debugfs versus rcu and fence dumping v2
2018-12-06 15:47 ` jglisse
(?)
(?)
@ 2018-12-07 13:30 ` Sasha Levin
-1 siblings, 0 replies; 6+ messages in thread
From: Sasha Levin @ 2018-12-07 13:30 UTC (permalink / raw)
To: Sasha Levin, linux-kernel
Cc: Daniel Vetter, dri-devel, linaro-mm-sig, Jérôme Glisse,
stable, linux-media
Hi,
[This is an automated email]
This commit has been processed because it contains a -stable tag.
The stable tag indicates that it's relevant for the following trees: all
The bot has tested the following trees: v4.19.7, v4.14.86, v4.9.143, v4.4.166, v3.18.128,
v4.19.7: Build OK!
v4.14.86: Build OK!
v4.9.143: Failed to apply! Possible dependencies:
5eb2c72c8acc ("dma-buf: fence debugging")
v4.4.166: Failed to apply! Possible dependencies:
5eb2c72c8acc ("dma-buf: fence debugging")
v3.18.128: Failed to apply! Possible dependencies:
5eb2c72c8acc ("dma-buf: fence debugging")
How should we proceed with this patch?
--
Thanks,
Sasha
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2018-12-07 13:30 UTC | newest]
Thread overview: 6+ 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 15:47 ` jglisse
2018-12-06 16:58 ` Chris Wilson
2018-12-06 16:58 ` Chris Wilson
2018-12-06 18:30 ` Koenig, Christian
2018-12-07 13:30 ` Sasha Levin
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.