On Thu, Jan 02, 2020 at 02:13:15PM +0800, Yang Weijiang wrote: > If write to subpage is not allowed, EPT violation generates > and it's handled in fast_page_fault(). > > In current implementation, SPPT setup is only handled in handle_spp() > vmexit handler, it's triggered when SPP bit is set in EPT leaf > entry while SPPT entries are not ready. > > A SPP specific bit(11) is added to exit_qualification and a new > exit reason(66) is introduced for SPP. ... > diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c > index 6f92b40d798c..c41791ebee65 100644 > --- a/arch/x86/kvm/mmu/mmu.c > +++ b/arch/x86/kvm/mmu/mmu.c > @@ -6372,6 +6427,8 @@ unsigned long kvm_mmu_calculate_default_mmu_pages(struct kvm *kvm) > return nr_mmu_pages; > } > > +#include "spp.c" > + Unless there is a *very* good reason for these shenanigans, spp.c needs to built via the Makefile like any other source. If this is justified for whatever reason, then that justification needs to be very clearly stated in the changelog. In general, the code organization of this entire series likely needs to be overhauled. There are gobs exports which are either completely unnecessary or completely backswards. E.g. exporting VMX-only functions from spp.c, which presumably are only callbed by VMX. EXPORT_SYMBOL_GPL(vmx_spp_flush_sppt); EXPORT_SYMBOL_GPL(vmx_spp_init); Exporting ioctl helpers from the same file, which are presumably called only from x86.c. EXPORT_SYMBOL_GPL(kvm_vm_ioctl_get_subpages); EXPORT_SYMBOL_GPL(kvm_vm_ioctl_set_subpages);