>--- a/arch/x86/kvm/vmx/vmx.c >+++ b/arch/x86/kvm/vmx/vmx.c >@@ -5302,9 +5302,16 @@ static int handle_apic_eoi_induced(struct kvm_vcpu *vcpu) > static int handle_apic_write(struct kvm_vcpu *vcpu) > { > unsigned long exit_qualification = vmx_get_exit_qual(vcpu); >- u32 offset = exit_qualification & 0xfff; > >- /* APIC-write VM exit is trap-like and thus no need to adjust IP */ >+ /* >+ * APIC-write VM-Exit is trap-like, KVM doesn't need to advance RIP and >+ * hardware has done any necessary aliasing, offset adjustments, etc... >+ * for the access. I.e. the correct value has already been written to >+ * the vAPIC page for the correct 16-byte chunk. KVM needs only to >+ * retrieve the register value and emulate the access. >+ */ >+ u32 offset = exit_qualification & 0xff0; Can we take this opportunity to remove offset/exit_qualification? They are used just once. >+ > kvm_apic_write_nodecode(vcpu, offset); > return 1; > } >-- >2.35.0.263.gb82422642f-goog >