Received: by 2002:a25:8b12:0:0:0:0:0 with SMTP id i18csp438789ybl; Wed, 14 Aug 2019 00:03:20 -0700 (PDT) X-Google-Smtp-Source: APXvYqwhWFeqNkn4tSq65EH+mE4X/cbXMKod0ZcIcIArJRGHu6CR5jnoWBQPmANagwpgOIap8wjO X-Received: by 2002:a63:d315:: with SMTP id b21mr38455298pgg.326.1565766200190; Wed, 14 Aug 2019 00:03:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1565766200; cv=none; d=google.com; s=arc-20160816; b=0QiyDZm8/2ly1gm0Xo/XvxHwJXaGLaZVbiegGBLI8CmSSTy7ols4LiN6hxLEDg88Uj pYUBU49T10qAIzG8OhKQf3yQbD9LS27ldrWuJ3VQCqgL8bx4cpnXsrNiitXgrb9AsXw7 gFzAWm3UXLJ/sxvCX1lSXo5TSNek6/U6SNVBuDsA2GsjxAhgOBNP7U/a/kvGpX9PxBoe 9f+tA2ddwyhMQGBeJtT7Hiz4LIo8tzCalQs9Zx2TApfmdedvR6lZIovLzLORrwViFgyz A7ANhTQsFTHNhUx0v9mGXbGnpsLET8YebsU6fbdMGOgDSLrvY8NZQYKGeBVGQYNjjOK6 S+MQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from; bh=cSfwlmL6Wxffcq2b/5fpeMt1Cwoc91VDLJak6s77LT4=; b=Y4uLAt4lbFwDsjPkMNzhCPZwYXknyXBycPztGKXdUlL0ufLbnUw0u+IZ5Mf9oZmb3T anyWdmpVxPx8RBY4GXUwBHecdFPCkmCRodzZOLhDCo4CmhT66hPmM0tePoI3SVI/5Uvu OvFI2xNUqf3JghhFzvlY7TQR+Lwf4w6ttLC2oenEjLvJvDW5fIX5Gr9XIgcZgMa2SsdW kXXfNLiw6TYSNUYLAAdIo0HSq8wALYS5yQqgCuYPNKIgP4Hygi8X8wzrs3MbmJ3Rthqh NJJHoXWw/aQIZ4HLJC0zm3aDv+pmiMv9AwPJlreZZ5jqiWStLOrW24Z8kUk5IcMkyK1d DjLQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 59si12682383plp.331.2019.08.14.00.03.03; Wed, 14 Aug 2019 00:03:20 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727269AbfHNHCZ (ORCPT + 99 others); Wed, 14 Aug 2019 03:02:25 -0400 Received: from mga04.intel.com ([192.55.52.120]:42220 "EHLO mga04.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726373AbfHNHCZ (ORCPT ); Wed, 14 Aug 2019 03:02:25 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 14 Aug 2019 00:02:24 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,384,1559545200"; d="scan'208";a="181427050" Received: from unknown (HELO local-michael-cet-test.sh.intel.com) ([10.239.159.128]) by orsmga006.jf.intel.com with ESMTP; 14 Aug 2019 00:02:21 -0700 From: Yang Weijiang To: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, pbonzini@redhat.com, sean.j.christopherson@intel.com Cc: mst@redhat.com, rkrcmar@redhat.com, jmattson@google.com, yu.c.zhang@intel.com, alazar@bitdefender.com, Yang Weijiang Subject: [PATCH RESEND v4 0/9] Enable Sub-page Write Protection Support Date: Wed, 14 Aug 2019 15:03:54 +0800 Message-Id: <20190814070403.6588-1-weijiang.yang@intel.com> X-Mailer: git-send-email 2.17.2 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 violation is generated. This patch serial passed SPP function test and selftest on Ice-Lake platform. 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 SPP selftest patch: https://lkml.org/lkml/2019/6/18/1197 Previous patch: https://lkml.org/lkml/2019/6/6/695 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: V3 -> v4: 1. Modified documentation to make it consistent with patches. 2. Allocated SPPT root page in init_spp() instead of vmx_set_cr3() to avoid SPPT miss error. 3. Added back co-developers and sign-offs. 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 | 173 ++++++++++ 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 | 480 ++++++++++++++++++++++++++ arch/x86/kvm/mmu.h | 1 + arch/x86/kvm/vmx/capabilities.h | 5 + arch/x86/kvm/vmx/vmx.c | 129 +++++++ arch/x86/kvm/x86.c | 141 ++++++++ include/linux/kvm_host.h | 9 + include/uapi/linux/kvm.h | 17 + 13 files changed, 997 insertions(+), 1 deletion(-) create mode 100644 Documentation/virtual/kvm/spp_kvm.txt -- 2.17.2