From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Ingo Molnar <mingo@kernel.org>, Thomas Gleixner <tglx@linutronix.de>
Cc: Jiri Olsa <jolsa@kernel.org>, Namhyung Kim <namhyung@kernel.org>,
Clark Williams <williams@redhat.com>,
linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org,
Arnaldo Carvalho de Melo <acme@redhat.com>,
Adrian Hunter <adrian.hunter@intel.com>
Subject: [PATCH 12/33] perf augmented_raw_syscalls: Reduce perf_event_output() boilerplate
Date: Mon, 26 Aug 2019 22:36:13 -0300 [thread overview]
Message-ID: <20190827013634.3173-13-acme@kernel.org> (raw)
In-Reply-To: <20190827013634.3173-1-acme@kernel.org>
From: Arnaldo Carvalho de Melo <acme@redhat.com>
Add a augmented__output() helper to reduce the boilerplate of sending
the augmented tracepoint to the PERF_EVENT_ARRAY BPF map associated with
the bpf-output event used to communicate with the userspace perf trace
tool.
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Link: https://lkml.kernel.org/n/tip-ln99gt0j4fv0kw0778h6vphm@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
.../examples/bpf/augmented_raw_syscalls.c | 24 +++++++++----------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/tools/perf/examples/bpf/augmented_raw_syscalls.c b/tools/perf/examples/bpf/augmented_raw_syscalls.c
index 8fd5ea059903..b80437971d80 100644
--- a/tools/perf/examples/bpf/augmented_raw_syscalls.c
+++ b/tools/perf/examples/bpf/augmented_raw_syscalls.c
@@ -87,6 +87,12 @@ static inline struct augmented_args_payload *augmented_args_payload(void)
return bpf_map_lookup_elem(&augmented_args_tmp, &key);
}
+static inline int augmented__output(void *ctx, struct augmented_args_payload *args, int len)
+{
+ /* If perf_event_output fails, return non-zero so that it gets recorded unaugmented */
+ return perf_event_output(ctx, &__augmented_syscalls__, BPF_F_CURRENT_CPU, args, len);
+}
+
static inline
unsigned int augmented_arg__read_str(struct augmented_arg *augmented_arg, const void *arg, unsigned int arg_len)
{
@@ -142,8 +148,7 @@ int sys_enter_connect(struct syscall_enter_args *args)
probe_read(&augmented_args->saddr, socklen, sockaddr_arg);
- /* If perf_event_output fails, return non-zero so that it gets recorded unaugmented */
- return perf_event_output(args, &__augmented_syscalls__, BPF_F_CURRENT_CPU, augmented_args, len + socklen);
+ return augmented__output(args, augmented_args, len + socklen);
}
SEC("!syscalls:sys_enter_sendto")
@@ -162,8 +167,7 @@ int sys_enter_sendto(struct syscall_enter_args *args)
probe_read(&augmented_args->saddr, socklen, sockaddr_arg);
- /* If perf_event_output fails, return non-zero so that it gets recorded unaugmented */
- return perf_event_output(args, &__augmented_syscalls__, BPF_F_CURRENT_CPU, augmented_args, len + socklen);
+ return augmented__output(args, augmented_args, len + socklen);
}
SEC("!syscalls:sys_enter_open")
@@ -178,8 +182,7 @@ int sys_enter_open(struct syscall_enter_args *args)
len += augmented_arg__read_str(&augmented_args->arg, filename_arg, sizeof(augmented_args->arg.value));
- /* If perf_event_output fails, return non-zero so that it gets recorded unaugmented */
- return perf_event_output(args, &__augmented_syscalls__, BPF_F_CURRENT_CPU, augmented_args, len);
+ return augmented__output(args, augmented_args, len);
}
SEC("!syscalls:sys_enter_openat")
@@ -194,8 +197,7 @@ int sys_enter_openat(struct syscall_enter_args *args)
len += augmented_arg__read_str(&augmented_args->arg, filename_arg, sizeof(augmented_args->arg.value));
- /* If perf_event_output fails, return non-zero so that it gets recorded unaugmented */
- return perf_event_output(args, &__augmented_syscalls__, BPF_F_CURRENT_CPU, augmented_args, len);
+ return augmented__output(args, augmented_args, len);
}
SEC("!syscalls:sys_enter_rename")
@@ -212,8 +214,7 @@ int sys_enter_rename(struct syscall_enter_args *args)
oldpath_len = augmented_arg__read_str(&augmented_args->arg, oldpath_arg, sizeof(augmented_args->arg.value));
len += oldpath_len + augmented_arg__read_str((void *)(&augmented_args->arg) + oldpath_len, newpath_arg, sizeof(augmented_args->arg.value));
- /* If perf_event_output fails, return non-zero so that it gets recorded unaugmented */
- return perf_event_output(args, &__augmented_syscalls__, BPF_F_CURRENT_CPU, augmented_args, len);
+ return augmented__output(args, augmented_args, len);
}
SEC("!syscalls:sys_enter_renameat")
@@ -230,8 +231,7 @@ int sys_enter_renameat(struct syscall_enter_args *args)
oldpath_len = augmented_arg__read_str(&augmented_args->arg, oldpath_arg, sizeof(augmented_args->arg.value));
len += oldpath_len + augmented_arg__read_str((void *)(&augmented_args->arg) + oldpath_len, newpath_arg, sizeof(augmented_args->arg.value));
- /* If perf_event_output fails, return non-zero so that it gets recorded unaugmented */
- return perf_event_output(args, &__augmented_syscalls__, BPF_F_CURRENT_CPU, augmented_args, len);
+ return augmented__output(args, augmented_args, len);
}
SEC("raw_syscalls:sys_enter")
--
2.21.0
next prev parent reply other threads:[~2019-08-27 1:36 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-27 1:36 [GIT PULL] perf/core improvements and fixes Arnaldo Carvalho de Melo
2019-08-27 1:36 ` [PATCH 01/33] perf cpumap: No need to include perf.h, ditch it Arnaldo Carvalho de Melo
2019-08-27 1:36 ` [PATCH 02/33] perf stat: Remove needless headers from stat.h Arnaldo Carvalho de Melo
2019-08-27 1:36 ` [PATCH 03/33] perf record: Move record_opts and other record decls out of perf.h Arnaldo Carvalho de Melo
2019-08-27 1:36 ` [PATCH 04/33] perf cacheline: Move cacheline related routines to separate files Arnaldo Carvalho de Melo
2019-08-27 1:36 ` [PATCH 05/33] perf srcline: Add missing srcline.h header to files needing its defs Arnaldo Carvalho de Melo
2019-08-27 1:36 ` [PATCH 06/33] perf sort: Remove needless headers from sort.h, provide fwd struct decls Arnaldo Carvalho de Melo
2019-08-27 1:36 ` [PATCH 07/33] perf tests: Fixes hang in zstd compression test by changing the source of random data Arnaldo Carvalho de Melo
2019-08-27 1:36 ` [PATCH 08/33] perf trace beauty ioctl: Fix off-by-one error in cmd->string table Arnaldo Carvalho de Melo
2019-08-27 1:36 ` [PATCH 09/33] perf augmented_raw_syscalls: Rename augmented_filename to augmented_arg Arnaldo Carvalho de Melo
2019-08-27 1:36 ` [PATCH 10/33] perf augmented_raw_syscalls: Postpone tmp map lookup to after pid_filter Arnaldo Carvalho de Melo
2019-08-27 1:36 ` [PATCH 11/33] perf augmented_raw_syscalls: Introduce helper to get the scratch space Arnaldo Carvalho de Melo
2019-08-27 1:36 ` Arnaldo Carvalho de Melo [this message]
2019-08-27 1:36 ` [PATCH 13/33] perf tools: Remove duplicate headers Arnaldo Carvalho de Melo
2019-08-27 1:36 ` [PATCH 14/33] perf report: Use timestamp__scnprintf_nsec() for time sort key Arnaldo Carvalho de Melo
2019-08-27 1:36 ` [PATCH 15/33] perf report: Fix --ns time sort key output Arnaldo Carvalho de Melo
2019-08-27 1:36 ` [PATCH 16/33] perf script: Fix memory leaks in list_scripts() Arnaldo Carvalho de Melo
2019-08-27 1:36 ` [PATCH 17/33] libperf: Add PERF_RECORD_MMAP 'struct mmap_event' to perf/event.h Arnaldo Carvalho de Melo
2019-08-27 1:36 ` [PATCH 18/33] libperf: Add PERF_RECORD_MMAP2 'struct mmap2_event' " Arnaldo Carvalho de Melo
2019-08-27 1:36 ` [PATCH 19/33] libperf: Add PERF_RECORD_COMM 'struct comm_event' " Arnaldo Carvalho de Melo
2019-08-27 1:36 ` [PATCH 20/33] libperf: Add PERF_RECORD_NAMESPACES 'struct namespaces_event' " Arnaldo Carvalho de Melo
2019-08-27 1:36 ` [PATCH 21/33] libperf: Add PERF_RECORD_FORK 'struct fork_event' " Arnaldo Carvalho de Melo
2019-08-27 1:36 ` [PATCH 22/33] libperf: Add PERF_RECORD_LOST 'struct lost_event' " Arnaldo Carvalho de Melo
2019-08-27 1:36 ` [PATCH 23/33] libperf: Add PERF_RECORD_LOST_SAMPLES 'struct lost_samples_event' " Arnaldo Carvalho de Melo
2019-08-27 1:36 ` [PATCH 24/33] libperf: Add PERF_RECORD_READ 'struct read_event' " Arnaldo Carvalho de Melo
2019-08-27 1:36 ` [PATCH 25/33] libperf: Add PERF_RECORD_THROTTLE 'struct throttle_event' " Arnaldo Carvalho de Melo
2019-08-27 1:36 ` [PATCH 26/33] libperf: Add PERF_RECORD_KSYMBOL 'struct ksymbol_event' " Arnaldo Carvalho de Melo
2019-08-27 1:36 ` [PATCH 27/33] libperf: Add PERF_RECORD_BPF_EVENT 'struct bpf_event' " Arnaldo Carvalho de Melo
2019-08-27 1:36 ` [PATCH 28/33] libperf: Add PERF_RECORD_SAMPLE 'struct sample_event' " Arnaldo Carvalho de Melo
2019-08-27 1:36 ` [PATCH 29/33] libperf: Rename the PERF_RECORD_ structs to have a "perf" suffix Arnaldo Carvalho de Melo
2019-08-27 1:36 ` [PATCH 30/33] perf tools: Rename perf_event::ksymbol_event to perf_event::ksymbol Arnaldo Carvalho de Melo
2019-08-27 1:36 ` [PATCH 31/33] perf tools: Rename perf_event::bpf_event to perf_event::bpf Arnaldo Carvalho de Melo
2019-08-27 1:36 ` [PATCH 32/33] perf tool: Rename perf_tool::bpf_event to bpf Arnaldo Carvalho de Melo
2019-08-27 1:36 ` [PATCH 33/33] perf evsel: Rename perf_missing_features::bpf_event to ::bpf Arnaldo Carvalho de Melo
2019-08-27 8:24 ` [GIT PULL] perf/core improvements and fixes Ingo Molnar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190827013634.3173-13-acme@kernel.org \
--to=acme@kernel.org \
--cc=acme@redhat.com \
--cc=adrian.hunter@intel.com \
--cc=jolsa@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=namhyung@kernel.org \
--cc=tglx@linutronix.de \
--cc=williams@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.