perf dlfilter: Add machine_pid and vcpu
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>
This commit is contained in:
parent
e28fb159f1
commit
2273e46b98
|
@ -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
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue