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 */
|
__u64 raw_callchain_nr; /* Number of raw_callchain entries */
|
||||||
const __u64 *raw_callchain; /* Refer <linux/perf_event.h> */
|
const __u64 *raw_callchain; /* Refer <linux/perf_event.h> */
|
||||||
const char *event;
|
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
|
The perf_dlfilter_fns structure
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,12 @@
|
||||||
#include <linux/perf_event.h>
|
#include <linux/perf_event.h>
|
||||||
#include <linux/types.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 */
|
/* Definitions for perf_dlfilter_sample flags */
|
||||||
enum {
|
enum {
|
||||||
PERF_DLFILTER_FLAG_BRANCH = 1ULL << 0,
|
PERF_DLFILTER_FLAG_BRANCH = 1ULL << 0,
|
||||||
|
@ -62,6 +68,8 @@ struct perf_dlfilter_sample {
|
||||||
__u64 raw_callchain_nr; /* Number of raw_callchain entries */
|
__u64 raw_callchain_nr; /* Number of raw_callchain entries */
|
||||||
const __u64 *raw_callchain; /* Refer <linux/perf_event.h> */
|
const __u64 *raw_callchain; /* Refer <linux/perf_event.h> */
|
||||||
const char *event;
|
const char *event;
|
||||||
|
__s32 machine_pid;
|
||||||
|
__s32 vcpu;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -495,6 +495,8 @@ int dlfilter__do_filter_event(struct dlfilter *d,
|
||||||
ASSIGN(misc);
|
ASSIGN(misc);
|
||||||
ASSIGN(raw_size);
|
ASSIGN(raw_size);
|
||||||
ASSIGN(raw_data);
|
ASSIGN(raw_data);
|
||||||
|
ASSIGN(machine_pid);
|
||||||
|
ASSIGN(vcpu);
|
||||||
|
|
||||||
if (sample->branch_stack) {
|
if (sample->branch_stack) {
|
||||||
d_sample.brstack_nr = sample->branch_stack->nr;
|
d_sample.brstack_nr = sample->branch_stack->nr;
|
||||||
|
|
Loading…
Reference in New Issue