On Wed, Nov 06, 2024 at 11:03:10AM -0500, Liang, Kan wrote: > > +static unsigned long common_misc_flags(struct pt_regs *regs) > > +{ > > + if (regs->flags & PERF_EFLAGS_EXACT) > > + return PERF_RECORD_MISC_EXACT_IP; > > + > > + return 0; > > +} > > + > > +unsigned long perf_arch_guest_misc_flags(struct pt_regs *regs) > > +{ > > + unsigned long guest_state = perf_guest_state(); > > + unsigned long flags = common_misc_flags(regs); > > + > > + if (guest_state & PERF_GUEST_USER) > > + flags |= PERF_RECORD_MISC_GUEST_USER; > > + else if (guest_state & PERF_GUEST_ACTIVE) > > + flags |= PERF_RECORD_MISC_GUEST_KERNEL; > > + > > The logic of setting the GUEST_KERNEL flag is implicitly changed here. > > For the current code, the GUEST_KERNEL flag is set for !PERF_GUEST_USER, > which include both guest_in_kernel and guest_in_NMI. Where is the "guest_in_NMI" state coming from? KVM only reports user v. kernel mode. -- Thanks Oliver