kvm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Yang Weijiang <weijiang.yang@intel.com>
To: kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
	pbonzini@redhat.com, mst@redhat.com, rkrcmar@redhat.com,
	jmattson@google.com, yu.c.zhang@intel.com
Cc: Yang Weijiang <weijiang.yang@intel.com>
Subject: [PATCH v3 0/9] Enable Sub-page Write Protection Support
Date: Thu,  6 Jun 2019 23:28:03 +0800	[thread overview]
Message-ID: <20190606152812.13141-1-weijiang.yang@intel.com> (raw)

EPT-Based Sub-Page write Protection(SPP)is a HW capability which
allows Virtual Machine Monitor(VMM) to specify write-permission for
guest physical memory at a sub-page(128 byte) granularity. When this
capability is enabled, the CPU enforces write-access check for
sub-pages within a 4KB page.

The feature is targeted to provide fine-grained memory protection
for usages such as device virtualization, memory check-point and
VM introspection etc.

SPP is active when the "sub-page write protection" (bit 23) is 1 in
Secondary VM-Execution Controls. The feature is backed with a Sub-Page
Permission Table(SPPT), SPPT is referenced via a 64-bit control field
called Sub-Page Permission Table Pointer (SPPTP) which contains a
4K-aligned physical address.

Right now, only 4KB physical pages are supported for SPP. To enable SPP
for certain physical page, we need to first make the physical page
write-protected, then set bit 61 of the corresponding EPT leaf entry. 
While HW walks EPT, if bit 61 is set, it traverses SPPT with the guset
physical address to find out the sub-page permissions at the leaf entry.
If the corresponding bit is set, write to sub-page is permitted,
otherwise, SPP induced EPT vilation is generated.

Please refer to the SPP introduction document in this patch set and Intel SDM
for details:

Intel SDM:
https://software.intel.com/sites/default/files/managed/39/c5/325462-sdm-vol-1-2abcd-3abcd.pdf

Previous patch:
https://lkml.org/lkml/2018/11/30/605

Patch 1: Introduction to SPP.
Patch 2: Add SPP related flags and control bits.
Patch 3: Functions for SPPT setup.
Patch 4: Add SPP access bitmaps for memslots.
Patch 5: Low level implementation of SPP operations.
Patch 6: Implement User space access IOCTLs.
Patch 7: Handle SPP induced VMExit and EPT violation.
Patch 8: Enable lazy mode SPPT setup.
Patch 9: Handle memory remapping and reclaim.


Change logs:

V2 - V3:                                                                
 1. Rebased patches to kernel 5.1 release                                
 2. Deferred SPPT setup to EPT fault handler if the page is not available
    while set_subpage() is being called.                                 
 3. Added init IOCTL to reduce extra cost if SPP is not used.            
 4. Refactored patch structure, cleaned up cross referenced functions.    
 5. Added code to deal with memory swapping/migration/shrinker cases.    
                                                                           
V2 - V1:                                                                
 1. Rebased to 4.20-rc1                                                  
 2. Move VMCS change to a separated patch.                               
 3. Code refine and Bug fix 


Yang Weijiang (9):
  Documentation: Introduce EPT based Subpage Protection
  KVM: VMX: Add control flags for SPP enabling
  KVM: VMX: Implement functions for SPPT paging setup
  KVM: VMX: Introduce SPP access bitmap and operation functions
  KVM: VMX: Add init/set/get functions for SPP
  KVM: VMX: Introduce SPP user-space IOCTLs
  KVM: VMX: Handle SPP induced vmexit and page fault
  KVM: MMU: Enable Lazy mode SPPT setup
  KVM: MMU: Handle host memory remapping and reclaim

 Documentation/virtual/kvm/spp_kvm.txt | 216 ++++++++++++
 arch/x86/include/asm/cpufeatures.h    |   1 +
 arch/x86/include/asm/kvm_host.h       |  26 +-
 arch/x86/include/asm/vmx.h            |  10 +
 arch/x86/include/uapi/asm/vmx.h       |   2 +
 arch/x86/kernel/cpu/intel.c           |   4 +
 arch/x86/kvm/mmu.c                    | 469 ++++++++++++++++++++++++++
 arch/x86/kvm/mmu.h                    |   1 +
 arch/x86/kvm/vmx/capabilities.h       |   5 +
 arch/x86/kvm/vmx/vmx.c                | 138 ++++++++
 arch/x86/kvm/x86.c                    | 141 ++++++++
 include/linux/kvm_host.h              |   9 +
 include/uapi/linux/kvm.h              |  17 +
 13 files changed, 1038 insertions(+), 1 deletion(-)
 create mode 100644 Documentation/virtual/kvm/spp_kvm.txt

-- 
2.17.2


             reply	other threads:[~2019-06-06 15:30 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-06 15:28 Yang Weijiang [this message]
2019-06-06 15:28 ` [PATCH v3 1/9] Documentation: Introduce EPT based Subpage Protection Yang Weijiang
2019-06-07  3:57   ` Jidong Xiao
2019-06-07 13:11     ` Yang Weijiang
2019-06-10  4:31       ` Jidong Xiao
2019-06-06 15:28 ` [PATCH v3 2/9] KVM: VMX: Add control flags for SPP enabling Yang Weijiang
2019-06-06 15:28 ` [PATCH v3 3/9] KVM: VMX: Implement functions for SPPT paging setup Yang Weijiang
2019-06-06 15:28 ` [PATCH v3 4/9] KVM: VMX: Introduce SPP access bitmap and operation functions Yang Weijiang
2019-06-06 15:28 ` [PATCH v3 5/9] KVM: VMX: Add init/set/get functions for SPP Yang Weijiang
2019-06-06 15:28 ` [PATCH v3 6/9] KVM: VMX: Introduce SPP user-space IOCTLs Yang Weijiang
2019-06-06 15:28 ` [PATCH v3 7/9] KVM: VMX: Handle SPP induced vmexit and page fault Yang Weijiang
2019-06-06 15:28 ` [PATCH v3 8/9] KVM: MMU: Enable Lazy mode SPPT setup Yang Weijiang
2019-06-06 15:28 ` [PATCH v3 9/9] KVM: MMU: Handle host memory remapping and reclaim Yang Weijiang
2019-06-07 13:27 ` [PATCH v3 0/9] Enable Sub-page Write Protection Support Paolo Bonzini
2019-06-07 14:28   ` Yang Weijiang
2019-06-19  2:08   ` Yang Weijiang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190606152812.13141-1-weijiang.yang@intel.com \
    --to=weijiang.yang@intel.com \
    --cc=jmattson@google.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=rkrcmar@redhat.com \
    --cc=yu.c.zhang@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).