On Sun, Jun 09, 2024, Nicolas Saenz Julienne wrote: > Both VMX and SVM provide the length of the instruction > being run at the time of the page fault. Save it within 'struct > kvm_page_fault', as it'll become useful in the future. Nit, please wrap closer to 75 characters. > Signed-off-by: Nicolas Saenz Julienne <nsaenz@xxxxxxxxxx> > --- > arch/x86/kvm/mmu/mmu.c | 11 ++++++++--- > arch/x86/kvm/mmu/mmu_internal.h | 5 ++++- > arch/x86/kvm/vmx/vmx.c | 16 ++++++++++++++-- > 3 files changed, 26 insertions(+), 6 deletions(-) > > diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c > index 8d74bdef68c1d..39b113afefdfc 100644 > --- a/arch/x86/kvm/mmu/mmu.c > +++ b/arch/x86/kvm/mmu/mmu.c > @@ -4271,7 +4271,8 @@ void kvm_arch_async_page_ready(struct kvm_vcpu *vcpu, struct kvm_async_pf *work) > work->arch.cr3 != kvm_mmu_get_guest_pgd(vcpu, vcpu->arch.mmu)) > return; > > - kvm_mmu_do_page_fault(vcpu, work->cr2_or_gpa, work->arch.error_code, true, NULL); > + kvm_mmu_do_page_fault(vcpu, work->cr2_or_gpa, work->arch.error_code, > + true, NULL, 0); Hrm, I just proposed adding another (out) parameter to kvm_mmu_do_page_fault() in the TDX series[*], I wonder if we're reaching the point where it makes sense to have kvm_mmu_do_page_fault() take a struct too. [*] https://lore.kernel.org/all/ZuR09EqzU1WbQYGd@xxxxxxxxxx > diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c > index ac0682fece604..9ba38e0b0c7a8 100644 > --- a/arch/x86/kvm/vmx/vmx.c > +++ b/arch/x86/kvm/vmx/vmx.c > @@ -5807,11 +5807,13 @@ static int handle_ept_violation(struct kvm_vcpu *vcpu) > if (unlikely(allow_smaller_maxphyaddr && !kvm_vcpu_is_legal_gpa(vcpu, gpa))) > return kvm_emulate_instruction(vcpu, 0); > > - return kvm_mmu_page_fault(vcpu, gpa, error_code, NULL, 0); > + return kvm_mmu_page_fault(vcpu, gpa, error_code, NULL, > + vmcs_read32(VM_EXIT_INSTRUCTION_LEN)); It might be worth adding a cached EXREG for instruction length, e.g. VCPU_EXREG_EXIT_INFO_3 + vmx_get_insn_len(), similar to how for vmx_get_exit_qual() and vmx_get_intr_info() pair up with VCPU_EXREG_EXIT_INFO_{1,2}.