linmiaohe <linmiaohe@xxxxxxxxxx> writes: > From: Miaohe Lin <linmiaohe@xxxxxxxxxx> > > Fix some typos in the comments. Also fix coding style. > [Sean Christopherson rewrites the comment of write_fault_to_shadow_pgtable > field in struct kvm_vcpu_arch.] > > Signed-off-by: Miaohe Lin <linmiaohe@xxxxxxxxxx> > --- > v1->v2: > Use Sean Christopherson' comment for write_fault_to_shadow_pgtable > --- > arch/x86/include/asm/kvm_host.h | 16 +++++++++++++--- > arch/x86/kvm/vmx/nested.c | 5 +++-- > 2 files changed, 16 insertions(+), 5 deletions(-) > > diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h > index 4dffbc10d3f8..40a0c0fd95ca 100644 > --- a/arch/x86/include/asm/kvm_host.h > +++ b/arch/x86/include/asm/kvm_host.h > @@ -781,9 +781,19 @@ struct kvm_vcpu_arch { > u64 msr_kvm_poll_control; > > /* > - * Indicate whether the access faults on its page table in guest > - * which is set when fix page fault and used to detect unhandeable > - * instruction. > + * Indicates the guest is trying to write a gfn that contains one or > + * more of the PTEs used to translate the write itself, i.e. the access > + * is changing its own translation in the guest page tables. KVM exits > + * to userspace if emulation of the faulting instruction fails and this > + * flag is set, as KVM cannot make forward progress. > + * > + * If emulation fails for a write to guest page tables, KVM unprotects > + * (zaps) the shadow page for the target gfn and resumes the guest to > + * retry the non-emulatable instruction (on hardware). Unprotecting the > + * gfn doesn't allow forward progress for a self-changing access because > + * doing so also zaps the translation for the gfn, i.e. retrying the > + * instruction will hit a !PRESENT fault, which results in a new shadow > + * page and sends KVM back to square one. > */ > bool write_fault_to_shadow_pgtable; > > diff --git a/arch/x86/kvm/vmx/nested.c b/arch/x86/kvm/vmx/nested.c > index 657c2eda357c..e7faebccd733 100644 > --- a/arch/x86/kvm/vmx/nested.c > +++ b/arch/x86/kvm/vmx/nested.c > @@ -544,7 +544,8 @@ static void nested_vmx_disable_intercept_for_msr(unsigned long *msr_bitmap_l1, > } > } > > -static inline void enable_x2apic_msr_intercepts(unsigned long *msr_bitmap) { > +static inline void enable_x2apic_msr_intercepts(unsigned long *msr_bitmap) > +{ > int msr; > > for (msr = 0x800; msr <= 0x8ff; msr += BITS_PER_LONG) { > @@ -1981,7 +1982,7 @@ static int nested_vmx_handle_enlightened_vmptrld(struct kvm_vcpu *vcpu, > } > > /* > - * Clean fields data can't de used on VMLAUNCH and when we switch > + * Clean fields data can't be used on VMLAUNCH and when we switch > * between different L2 guests as KVM keeps a single VMCS12 per L1. > */ > if (from_launch || evmcs_gpa_changed) With Sean's comment added the subject of the patch is a bit unexpected :-) But the change itself looks good (and thanks Sean for the great explanation!). Reviewed-by: Vitaly Kuznetsov <vkuznets@xxxxxxxxxx> -- Vitaly