Skip to content

tracing/user_events: Update user_events ABI from

Beau Belgrave linux-arch linux-trace-devel lkml 3 versions – New

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v3 Latest6 patches 0 repliesNew
  2. v27 patches 6 repliesSuperseded
  3. v17 patches 7 repliesSuperseded

Patches in v3 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/6tracing/user_events: Use NULL for strstr checkskernel/trace/trace_events_user.c+3 -30 replies
2/6tracing/user_events: Use WRITE instead of READ for io vector importkernel/trace/trace_events_user.c+2 -10 replies
3/6tracing/user_events: Ensure user provided strings are safely formattedkernel/trace/trace_events_user.c+59 -320 replies
4/6tracing/user_events: Use refcount instead of atomic for ref trackingkernel/trace/trace_events_user.c+24 -290 replies
5/6tracing/user_events: Use bits vs bytes for enabled status page datainclude/linux/user_events.h kernel/trace/trace_events_user.c samples/user_events/example.c +2 more+135 -380 replies
6/6tracing/user_events: Update ABI documentation to align to bits vs bytesDocumentation/trace/user_events.rst+58 -280 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v3 yet.

Read the v3 thread

Cover letter [PATCH v3 0/6] tracing/user_events: Update user_events ABI from

This series covers the changes that were brought up once user_events went into 5.18. The largest change is moving away from byte index to a bit index, as first suggested by Mathieu Desnoyers.

The other changes are either fixes that have accumulated or found by Mathieu.

NOTE: The sample and self-tests do not build unless you manually install user_events.h into usr/include/linux.

Psuedo code example of typical usage with the new ABI:
struct user_reg reg;

int page_fd = open("user_events_status", O_RDWR);
char *page_data = mmap(NULL, PAGE_SIZE, PROT_READ, MAP_SHARED, page_fd, 0); close(page_fd);

int data_fd = open("user_events_data", O_RDWR);

reg.size = sizeof(reg);
reg.name_args = (__u64)"test";

ioctl(data_fd, DIAG_IOCSREG, &reg);
int status_id = reg.status_bit / 8;
int status_mask = 1 << (reg.status_bit % 8);
int write_id = reg.write_index;

struct iovec io[2];
io[0].iov_base = &write_id;
io[0].iov_len = sizeof(write_id);
io[1].iov_base = payload;
io[1].iov_len = sizeof(payload);

if (page_data[status_id] & status_mask)

	writev(data_fd, io, 2);

V2 Updates:
Changed from status_index and status_mask on user_reg to just status_bit. Updated and added byte-wise and long-wise indexing pattern into docs. Updated tests to use byte-wise index pattern.
Updated sample to show long-wise index pattern.

V3 Updates:
Rebase to recent ftrace/core head.
Updated comments to show how index/bit to byte is calculated. Changed to BIT() macro vs 1 << X.

Beau Belgrave (6):
tracing/user_events: Use NULL for strstr checks tracing/user_events: Use WRITE instead of READ for io vector import tracing/user_events: Ensure user provided strings are safely formatted tracing/user_events: Use refcount instead of atomic for ref tracking tracing/user_events: Use bits vs bytes for enabled status page data tracing/user_events: Update ABI documentation to align to bits vs
bytes

 Documentation/trace/user_events.rst           |  86 ++++---
 include/linux/user_events.h                   |  15 +-
 kernel/trace/trace_events_user.c              | 228 ++++++++++++------
 samples/user_events/example.c                 |  25 +-
 .../selftests/user_events/ftrace_test.c       |  47 +++-
 .../testing/selftests/user_events/perf_test.c |  11 +-
 6 files changed, 281 insertions(+), 131 deletions(-)

base-commit: 26b2da5fc0b41a9a6a5e30b858da28572a6f4cbc

Signature · 1 line
2.25.1