perf dlfilter: Add machine_pid and vcpu
authorAdrian Hunter <adrian.hunter@intel.com>
Mon, 11 Jul 2022 09:31:59 +0000 (12:31 +0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 20 Jul 2022 14:08:13 +0000 (11:08 -0300)
Add machine_pid and vcpu to struct perf_dlfilter_sample. The 'size' can be
used to determine if the values are present, however machine_pid is zero if
unused in any case. vcpu should be ignored if machine_pid is zero.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Acked-by: Ian Rogers <irogers@google.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: kvm@vger.kernel.org
Link: https://lore.kernel.org/r/20220711093218.10967-17-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/Documentation/perf-dlfilter.txt
tools/perf/include/perf/perf_dlfilter.h
tools/perf/util/dlfilter.c

index 594f5a5..fb22e3b 100644 (file)
@@ -107,9 +107,31 @@ struct perf_dlfilter_sample {
        __u64 raw_callchain_nr; /* Number of raw_callchain entries */
        const __u64 *raw_callchain; /* Refer <linux/perf_event.h> */
        const char *event;
+       __s32 machine_pid;
+       __s32 vcpu;
 };
 ----
 
+Note: 'machine_pid' and 'vcpu' are not original members, but were added together later.
+'size' can be used to determine their presence at run time.
+PERF_DLFILTER_HAS_MACHINE_PID will be defined if they are present at compile time.
+For example:
+[source,c]
+----
+#include <perf/perf_dlfilter.h>
+#include <stddef.h>
+#include <stdbool.h>
+
+static inline bool have_machine_pid(const struct perf_dlfilter_sample *sample)
+{
+#ifdef PERF_DLFILTER_HAS_MACHINE_PID
+       return sample->size >= offsetof(struct perf_dlfilter_sample, vcpu) + sizeof(sample->vcpu);
+#else
+       return false;
+#endif
+}
+----
+
 The perf_dlfilter_fns structure
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
index 3eef03d..a26e2f1 100644 (file)
@@ -9,6 +9,12 @@
 #include <linux/perf_event.h>
 #include <linux/types.h>
 
+/*
+ * The following macro can be used to determine if this header defines
+ * perf_dlfilter_sample machine_pid and vcpu.
+ */
+#define PERF_DLFILTER_HAS_MACHINE_PID
+
 /* Definitions for perf_dlfilter_sample flags */
 enum {
        PERF_DLFILTER_FLAG_BRANCH       = 1ULL << 0,
@@ -62,6 +68,8 @@ struct perf_dlfilter_sample {
        __u64 raw_callchain_nr; /* Number of raw_callchain entries */
        const __u64 *raw_callchain; /* Refer <linux/perf_event.h> */
        const char *event;
+       __s32 machine_pid;
+       __s32 vcpu;
 };
 
 /*
index db964d5..54e4d44 100644 (file)
@@ -495,6 +495,8 @@ int dlfilter__do_filter_event(struct dlfilter *d,
        ASSIGN(misc);
        ASSIGN(raw_size);
        ASSIGN(raw_data);
+       ASSIGN(machine_pid);
+       ASSIGN(vcpu);
 
        if (sample->branch_stack) {
                d_sample.brstack_nr = sample->branch_stack->nr;