Andi, On Thu, Jun 15, 2017 at 4:18 PM, Andi Kleen <a...@linux.intel.com> wrote: >> Looking at this approach, the user interface is straightforward, >> implementation in the x86 code is a bit more hairy because of the way >> the branch_stack is captured, via the cpuc->lbr_entries. If you assume >> that SKID_IP cannot be used with any other branch stack mode, then it >> is easy. It becomes messy if you don't. > > That should be fine. After all if you have real LBRs you don't need > the skid IP. > Yes, you still do. This is not the same thing. LBR captures only taken branches. I care about taken AND non-taken branches and I don't want to sample on a non-taken event, assuming it is available.
You need to inject the skid ip into the LBR stack somehow. Either directly in the registers or in the cpuc->lbr_entries. The injection can only happen on interrupt whereas the LBR captures 32 branches. So you'd have the skid ip info only for the most recent branch in the stack.