On Mon, Jul 04, 2022 at 11:27:37AM +0200, Jan Beulich wrote: > On 01.07.2022 15:16, Roger Pau Monne wrote: > > --- a/xen/arch/x86/hvm/vmx/vmx.c > > +++ b/xen/arch/x86/hvm/vmx/vmx.c > > @@ -4065,6 +4065,11 @@ void vmx_vmexit_handler(struct cpu_user_regs *regs) > > > > if ( unlikely(exit_reason & VMX_EXIT_REASONS_FAILED_VMENTRY) ) > > return vmx_failed_vmentry(exit_reason, regs); > > + if ( unlikely(exit_reason & VMX_EXIT_REASONS_BUS_LOCK) ) > > + { > > + perfc_incr(buslock); > > + exit_reason &= ~VMX_EXIT_REASONS_BUS_LOCK; > > + } > > To cover for the flag bit, don't you also need to mask it off in > nvmx_idtv_handling()? Or (didn't go into detail with checking whether > there aren't any counter indications) pass the exit reason there from > vmx_vmexit_handler(), instead of re-reading it from the VMCS?
This seem to be an existing issue with nvmx_idtv_handling(), as it should use just the low 16bits to check against the VM Exit reason codes. I can send a pre-patch to fix it, could pass exit reason from vmx_vmexit_handler(), but I would still need to cast to uint16_t for comparing against exit reason codes, as there's a jump into the 'out' label before VMX_EXIT_REASONS_BUS_LOCK is masked out. I think there's a similar issue with nvmx_n2_vmexit_handler() that doesn't cast the value to uint16_t and is called before VMX_EXIT_REASONS_BUS_LOCK is removed from exit reason. Thanks, Roger.