linux/kernel/trace
Shiju Jose 3e46d910d8 tracing: Fix poll() and select() do not work on per_cpu trace_pipe and trace_pipe_raw
poll() and select() on per_cpu trace_pipe and trace_pipe_raw do not work
since kernel 6.1-rc6. This issue is seen after the commit
42fb0a1e84 ("tracing/ring-buffer: Have
polling block on watermark").

This issue is firstly detected and reported, when testing the CXL error
events in the rasdaemon and also erified using the test application for poll()
and select().

This issue occurs for the per_cpu case, when calling the ring_buffer_poll_wait(),
in kernel/trace/ring_buffer.c, with the buffer_percent > 0 and then wait until the
percentage of pages are available. The default value set for the buffer_percent is 50
in the kernel/trace/trace.c.

As a fix, allow userspace application could set buffer_percent as 0 through
the buffer_percent_fops, so that the task will wake up as soon as data is added
to any of the specific cpu buffer.

Link: https://lore.kernel.org/linux-trace-kernel/20230202182309.742-2-shiju.jose@huawei.com

Cc: <mhiramat@kernel.org>
Cc: <mchehab@kernel.org>
Cc: <linux-edac@vger.kernel.org>
Cc: stable@vger.kernel.org
Fixes: 42fb0a1e84 ("tracing/ring-buffer: Have polling block on watermark")
Signed-off-by: Shiju Jose <shiju.jose@huawei.com>
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
2023-02-02 16:15:53 -05:00
..
rv rv: remove redundant initialization of pointer ptr 2023-01-25 10:31:02 -05:00
blktrace.c blktrace: Fix output non-blktrace event when blk_classic option enabled 2022-12-08 09:26:11 -07:00
bpf_trace.c bpf: Skip task with pid=1 in send_signal_common() 2023-01-06 22:48:58 +01:00
bpf_trace.h
error_report-traces.c
fgraph.c
fprobe.c tracing/fprobe: Fix to check whether fprobe is registered correctly 2022-11-04 08:50:07 +09:00
ftrace.c ftrace: Export ftrace_free_filter() to modules 2023-01-24 11:20:58 -05:00
ftrace_internal.h
Kconfig tracing: Kconfig: Fix spelling/grammar/punctuation 2023-01-24 13:22:38 -05:00
kprobe_event_gen_test.c tracing: kprobe: Fix potential null-ptr-deref on trace_array in kprobe_event_gen_test_exit() 2022-11-18 10:15:34 +09:00
Makefile
pid_list.c
pid_list.h
power-traces.c
preemptirq_delay_test.c
rethook.c rethook: fix a potential memleak in rethook_alloc() 2022-11-18 10:15:34 +09:00
ring_buffer.c ring-buffer: Handle resize in early boot up 2022-12-10 13:36:04 -05:00
ring_buffer_benchmark.c ring_buffer: Remove unused "event" parameter 2022-11-23 19:08:30 -05:00
rpm-traces.c
synth_event_gen_test.c tracing: Fix memory leak in test_gen_synth_cmd() and test_empty_synth_event() 2022-11-17 17:51:38 -05:00
trace.c tracing: Fix poll() and select() do not work on per_cpu trace_pipe and trace_pipe_raw 2023-02-02 16:15:53 -05:00
trace.h tracing: Make sure trace_printk() can output as soon as it can be used 2023-01-24 11:27:29 -05:00
trace_benchmark.c tracing: Add numeric delta time to the trace event benchmark 2022-09-26 13:01:09 -04:00
trace_benchmark.h tracing: Add numeric delta time to the trace event benchmark 2022-09-26 13:01:09 -04:00
trace_boot.c
trace_branch.c
trace_clock.c
trace_dynevent.c tracing: Free buffers when a used dynamic event is removed 2022-11-23 19:07:12 -05:00
trace_dynevent.h
trace_entries.h
trace_eprobe.c tracing: Fix race where eprobes can be called before the event 2022-11-24 00:42:18 +09:00
trace_event_perf.c tracing/perf: Use strndup_user instead of kzalloc/strncpy_from_user 2022-11-23 19:08:31 -05:00
trace_events.c tracing: remove unnecessary trace_trigger ifdef 2022-12-10 13:36:04 -05:00
trace_events_filter.c tracing/filter: fix kernel-doc warnings 2023-01-25 10:28:13 -05:00
trace_events_filter_test.h
trace_events_hist.c trace_events_hist: add check for return value of 'create_hist_field' 2023-01-24 18:19:36 -05:00
trace_events_inject.c
trace_events_synth.c tracing: Fix issue of missing one synthetic field 2022-12-10 13:36:04 -05:00
trace_events_trigger.c tracing: Do not synchronize freeing of trigger filter on boot up 2022-12-14 08:50:56 -05:00
trace_events_user.c Tracing updates for 6.2: 2022-12-15 18:01:16 -08:00
trace_export.c tracing: Fix some typos in comments 2020-11-10 20:39:40 -05:00
trace_functions.c
trace_functions_graph.c
trace_hwlat.c
trace_irqsoff.c
trace_kdb.c
trace_kprobe.c trace/kprobe: remove duplicated calls of ring_buffer_event_data 2022-12-09 23:48:05 -05:00
trace_kprobe_selftest.c
trace_kprobe_selftest.h
trace_mmiotrace.c
trace_nop.c
trace_osnoise.c tracing/osnoise: Use built-in RCU list checking 2023-01-24 18:11:41 -05:00
trace_output.c tracing: Make sure trace_printk() can output as soon as it can be used 2023-01-24 11:27:29 -05:00
trace_output.h
trace_preemptirq.c tracing: hold caller_addr to hardirq_{enable,disable}_ip 2022-09-06 22:26:00 -04:00
trace_printk.c
trace_probe.c Trace probes updates for 6.2: 2022-12-21 18:57:24 -08:00
trace_probe.h tracing/probes: Reject symbol/symstr type for uprobe 2022-12-15 09:00:20 +09:00
trace_probe_kernel.h tracing: Add "(fault)" name injection to kernel probes 2022-10-12 13:50:20 -04:00
trace_probe_tmpl.h tracing/probes: Add symstr type for dynamic events 2022-12-15 08:48:57 +09:00
trace_recursion_record.c
trace_sched_switch.c
trace_sched_wakeup.c
trace_selftest.c x86/ftrace: Make it call depth tracking aware 2022-10-17 16:41:19 +02:00
trace_selftest_dynamic.c
trace_seq.c
trace_stack.c
trace_stat.c
trace_stat.h
trace_synth.h
trace_syscalls.c tracing: Remove unused __bad_type_size() method 2022-11-17 20:21:06 -05:00
trace_uprobe.c tracing/probes: Reject symbol/symstr type for uprobe 2022-12-15 09:00:20 +09:00
tracing_map.c tracing: Remove unused variable 'dups' 2022-10-03 12:20:31 -04:00
tracing_map.h