tracing: Kill the buggy trace_cpu
Get series with b4
b4 am [email protected]Versions newest first · linked by author and title
- v2 Latest7 patches 1 replyIn review
- v17 patches 9 repliesSuperseded
Patches in v2 No applies recorded yet
| # | Subject and files | Size | Replies | Applied |
|---|---|---|---|---|
| 1/7 | tracing: Introduce trace_create_cpu_file() and tracing_get_cpu()kernel/ | +36 | 0 replies | |
| 2/7 | tracing: Change tracing_pipe_fops() to rely on tracing_get_cpu()kernel/ | +7 | 0 replies | |
| 3/7 | tracing: Change tracing_buffers_fops to rely on tracing_get_cpu()kernel/ | +4 | 0 replies | |
| 4/7 | tracing: Change tracing_stats_fops to rely on tracing_get_cpu()kernel/ | +6 | 0 replies | |
| 5/7 | tracing: Change tracing_entries_fops to rely on tracing_get_cpu()kernel/ | +12 | 0 replies | |
| 6/7 | tracing: Change tracing_fops/snapshot_fops to rely on tracing_get_cpu()kernel/ | +22 | 0 replies | |
| 7/7 | tracing: Kill trace_cpu struct/memberskernel/ kernel/ | +0 | 0 replies |
Reviews trailers per patch
No Reviewed-by, Acked-by or Tested-by trailers for v2 yet.
Cover letter [PATCH v2 0/7] tracing: Kill the buggy trace_cpu
Hello.
This series kills tracing_open_generic_tc/trace_cpu/etc.
trace_array_get(inode->i_private) is mostly fine, we do not dereference this pointer untill trace_array_get() succeeds. But trace_array_get(tc->tr) is wrong by the same reason why tracing_open_generic_file/etc are wrong, see 1/7.
(Steven, I think you are right and we can also remove the
list_for_each_entry() loop from trace_array_get() later, and avoid the (harmless but still) race with rmdir + mkdir. Lets discuss this after we fix the problems with file/call).
Changes:
1/7: Fix the whitespace problems.
Add the comment above tracing_get_cpu() and update the changelog. tracing_get_cpu() is always safe but the code like
cpu = tracing_get_cpu(inode);
if (trace_array_get(tr) == 0)
do_something(tr, cpu);
is racy, it can wrongly use RING_BUFFER_ALL_CPUS. IOW, tracing_get_cpu() should be used only after trace_array_get() or something else which takes trace_types_lock at least once.
5/7: No changes. checkpatch.pl complains, but that
"line over 80 characters" in tracing_entries_read() was not added by this patch and I do not know how can I make checkpatch.pl happy without adding a helper for per_cpu_ptr(tr->trace_buffer.data).
6/7: Incorporated the fix from Steven (thanks!).
Oleg.
kernel/trace/trace.c | 194 +++++++++++++++++++++----------------------------- kernel/trace/trace.h | 8 -- 2 files changed, 80 insertions(+), 122 deletions(-)