Re: [PATCH 16/35] perf dlfilter: Add machine_pid and vcpu

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Jul 11, 2022 at 2:33 AM Adrian Hunter <adrian.hunter@xxxxxxxxx> wrote:
>
> 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@xxxxxxxxx>

Acked-by: Ian Rogers <irogers@xxxxxxxxxx>

Thanks,
Ian

> ---
>  tools/perf/Documentation/perf-dlfilter.txt | 22 ++++++++++++++++++++++
>  tools/perf/include/perf/perf_dlfilter.h    |  8 ++++++++
>  tools/perf/util/dlfilter.c                 |  2 ++
>  3 files changed, 32 insertions(+)
>
> diff --git a/tools/perf/Documentation/perf-dlfilter.txt b/tools/perf/Documentation/perf-dlfilter.txt
> index 594f5a5a0c9e..fb22e3b31dc5 100644
> --- a/tools/perf/Documentation/perf-dlfilter.txt
> +++ b/tools/perf/Documentation/perf-dlfilter.txt
> @@ -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
>  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> diff --git a/tools/perf/include/perf/perf_dlfilter.h b/tools/perf/include/perf/perf_dlfilter.h
> index 3eef03d661b4..a26e2f129f83 100644
> --- a/tools/perf/include/perf/perf_dlfilter.h
> +++ b/tools/perf/include/perf/perf_dlfilter.h
> @@ -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;
>  };
>
>  /*
> diff --git a/tools/perf/util/dlfilter.c b/tools/perf/util/dlfilter.c
> index db964d5a52af..54e4d4495e00 100644
> --- a/tools/perf/util/dlfilter.c
> +++ b/tools/perf/util/dlfilter.c
> @@ -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;
> --
> 2.25.1
>



[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux