| From ed4af2bd4f3a7a7aa5e7a78865d0fcb010259075 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 29 Jun 2020 06:18:41 +0300 |
| Subject: gpu: host1x: debug: Fix multiple channels emitting messages |
| simultaneously |
| |
| From: Dmitry Osipenko <digetx@gmail.com> |
| |
| [ Upstream commit 35681862808472a0a4b9a8817ae2789c0b5b3edc ] |
| |
| Once channel's job is hung, it dumps the channel's state into KMSG before |
| tearing down the offending job. If multiple channels hang at once, then |
| they dump messages simultaneously, making the debug info unreadable, and |
| thus, useless. This patch adds mutex which allows only one channel to emit |
| debug messages at a time. |
| |
| Signed-off-by: Dmitry Osipenko <digetx@gmail.com> |
| Signed-off-by: Thierry Reding <treding@nvidia.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/gpu/host1x/debug.c | 4 ++++ |
| 1 file changed, 4 insertions(+) |
| |
| diff --git a/drivers/gpu/host1x/debug.c b/drivers/gpu/host1x/debug.c |
| index c0392672a8421..1b4997bda1c79 100644 |
| --- a/drivers/gpu/host1x/debug.c |
| +++ b/drivers/gpu/host1x/debug.c |
| @@ -16,6 +16,8 @@ |
| #include "debug.h" |
| #include "channel.h" |
| |
| +static DEFINE_MUTEX(debug_lock); |
| + |
| unsigned int host1x_debug_trace_cmdbuf; |
| |
| static pid_t host1x_debug_force_timeout_pid; |
| @@ -52,12 +54,14 @@ static int show_channel(struct host1x_channel *ch, void *data, bool show_fifo) |
| struct output *o = data; |
| |
| mutex_lock(&ch->cdma.lock); |
| + mutex_lock(&debug_lock); |
| |
| if (show_fifo) |
| host1x_hw_show_channel_fifo(m, ch, o); |
| |
| host1x_hw_show_channel_cdma(m, ch, o); |
| |
| + mutex_unlock(&debug_lock); |
| mutex_unlock(&ch->cdma.lock); |
| |
| return 0; |
| -- |
| 2.25.1 |
| |