On Fri, Jun 26, 2020 at 11:20:10AM -0700, [email protected] wrote: > -static inline u64 rdlbr_from(unsigned int idx) > +static inline u64 rdlbr_from(unsigned int idx, struct lbr_entry *lbr) > { > u64 val; > > + if (lbr) > + return lbr->from; > + > rdmsrl(x86_pmu.lbr_from + idx, val); > > return lbr_from_signext_quirk_rd(val); > } > > -static inline u64 rdlbr_to(unsigned int idx) > +static inline u64 rdlbr_to(unsigned int idx, struct lbr_entry *lbr) > { > u64 val; > > + if (lbr) > + return lbr->to; > + > rdmsrl(x86_pmu.lbr_to + idx, val); > > return val; > } > > -static inline u64 rdlbr_info(unsigned int idx) > +static inline u64 rdlbr_info(unsigned int idx, struct lbr_entry *lbr) > { > u64 val; > > + if (lbr) > + return lbr->info; > + > rdmsrl(x86_pmu.lbr_info + idx, val); > > return val;
These should probably be __always_inline, just to make sure the compiler doesn't do anything stupid.

