Petr Pavlu b44ae5
From: Shiju Jose <shiju.jose@huawei.com>
Petr Pavlu b44ae5
Date: Thu, 2 Feb 2023 18:23:09 +0000
Petr Pavlu b44ae5
Subject: tracing: Fix poll() and select() do not work on per_cpu trace_pipe
Petr Pavlu b44ae5
 and trace_pipe_raw
Petr Pavlu b44ae5
Git-commit: 3e46d910d8acf94e5360126593b68bf4fee4c4a1
Petr Pavlu b44ae5
Patch-mainline: v6.2-rc8
Petr Pavlu b44ae5
References: git-fixes, bsc#1209841
Petr Pavlu b44ae5
Petr Pavlu b44ae5
poll() and select() on per_cpu trace_pipe and trace_pipe_raw do not work
Petr Pavlu b44ae5
since kernel 6.1-rc6. This issue is seen after the commit
Petr Pavlu b44ae5
42fb0a1e84ff525ebe560e2baf9451ab69127e2b ("tracing/ring-buffer: Have
Petr Pavlu b44ae5
polling block on watermark").
Petr Pavlu b44ae5
Petr Pavlu b44ae5
This issue is firstly detected and reported, when testing the CXL error
Petr Pavlu b44ae5
events in the rasdaemon and also erified using the test application for poll()
Petr Pavlu b44ae5
and select().
Petr Pavlu b44ae5
Petr Pavlu b44ae5
This issue occurs for the per_cpu case, when calling the ring_buffer_poll_wait(),
Petr Pavlu b44ae5
in kernel/trace/ring_buffer.c, with the buffer_percent > 0 and then wait until the
Petr Pavlu b44ae5
percentage of pages are available. The default value set for the buffer_percent is 50
Petr Pavlu b44ae5
in the kernel/trace/trace.c.
Petr Pavlu b44ae5
Petr Pavlu b44ae5
As a fix, allow userspace application could set buffer_percent as 0 through
Petr Pavlu b44ae5
the buffer_percent_fops, so that the task will wake up as soon as data is added
Petr Pavlu b44ae5
to any of the specific cpu buffer.
Petr Pavlu b44ae5
Petr Pavlu b44ae5
Link: https://lore.kernel.org/linux-trace-kernel/20230202182309.742-2-shiju.jose@huawei.com
Petr Pavlu b44ae5
Petr Pavlu b44ae5
Cc: <mhiramat@kernel.org>
Petr Pavlu b44ae5
Cc: <mchehab@kernel.org>
Petr Pavlu b44ae5
Cc: <linux-edac@vger.kernel.org>
Petr Pavlu b44ae5
Cc: stable@vger.kernel.org
Petr Pavlu b44ae5
Fixes: 42fb0a1e84ff5 ("tracing/ring-buffer: Have polling block on watermark")
Petr Pavlu b44ae5
Signed-off-by: Shiju Jose <shiju.jose@huawei.com>
Petr Pavlu b44ae5
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
Petr Pavlu b44ae5
Acked-by: Petr Pavlu <petr.pavlu@suse.com>
Petr Pavlu b44ae5
---
Petr Pavlu b44ae5
 kernel/trace/trace.c | 3 ---
Petr Pavlu b44ae5
 1 file changed, 3 deletions(-)
Petr Pavlu b44ae5
Petr Pavlu b44ae5
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
Petr Pavlu b44ae5
index 78ed5f1baa8c..c9e40f692650 100644
Petr Pavlu b44ae5
--- a/kernel/trace/trace.c
Petr Pavlu b44ae5
+++ b/kernel/trace/trace.c
Petr Pavlu b44ae5
@@ -9148,9 +9148,6 @@ buffer_percent_write(struct file *filp, const char __user *ubuf,
Petr Pavlu b44ae5
 	if (val > 100)
Petr Pavlu b44ae5
 		return -EINVAL;
Petr Pavlu b44ae5
 
Petr Pavlu b44ae5
-	if (!val)
Petr Pavlu b44ae5
-		val = 1;
Petr Pavlu b44ae5
-
Petr Pavlu b44ae5
 	tr->buffer_percent = val;
Petr Pavlu b44ae5
 
Petr Pavlu b44ae5
 	(*ppos)++;
Petr Pavlu b44ae5