On Mon, Oct 07, 2019 at 10:59:01AM -0700, kan.li...@linux.intel.com wrote: > diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h > index 61448c19a132..ee9ef0c4cb08 100644 > --- a/include/linux/perf_event.h > +++ b/include/linux/perf_event.h > @@ -100,6 +100,7 @@ struct perf_raw_record { > */ > struct perf_branch_stack { > __u64 nr; > + __u64 tos; > struct perf_branch_entry entries[0]; > }; > > diff --git a/include/uapi/linux/perf_event.h b/include/uapi/linux/perf_event.h > index bb7b271397a6..fe36ebb7dc2e 100644 > --- a/include/uapi/linux/perf_event.h > +++ b/include/uapi/linux/perf_event.h > @@ -141,8 +141,9 @@ enum perf_event_sample_format { > PERF_SAMPLE_TRANSACTION = 1U << 17, > PERF_SAMPLE_REGS_INTR = 1U << 18, > PERF_SAMPLE_PHYS_ADDR = 1U << 19, > + PERF_SAMPLE_LBR_TOS = 1U << 20, > > - PERF_SAMPLE_MAX = 1U << 20, /* non-ABI */ > + PERF_SAMPLE_MAX = 1U << 21, /* non-ABI */ > > __PERF_SAMPLE_CALLCHAIN_EARLY = 1ULL << 63, /* non-ABI; > internal use */ > }; > @@ -864,6 +865,7 @@ enum perf_event_type { > * { u64 abi; # enum perf_sample_regs_abi > * u64 regs[weight(mask)]; } && > PERF_SAMPLE_REGS_INTR > * { u64 phys_addr;} && PERF_SAMPLE_PHYS_ADDR > + * { u64 tos;} && PERF_SAMPLE_LBR_TOS > * }; > */ > PERF_RECORD_SAMPLE = 9,
I have problems with the API.. You're introducing the intel specific LBR naming, and adding a whole new sample type vs extending the existing BRANCH_STACK (like you really already do with struct perf_branch_stack). So why not add a bit to PERF_SAMPLE_BRANCH_* to request the presence of the TOS field in the PERF_SAMPLE_BRANCH_STACK output?