[PATCH v3 0/3] arch/x86: Enable MPK feature on AMD

From: Babu Moger
Date: Mon May 11 2020 - 19:32:58 EST


AMD's next generation of EPYC processors support the MPK (Memory
Protection Keys) feature.

AMD documentation for MPK feature is available at "AMD64 Architecture
Programmerâs Manual Volume 2: System Programming, Pub. 24593 Rev. 3.34,
Section 5.6.6 Memory Protection Keys (MPK) Bit".

The documentation can be obtained at the link below:
https://bugzilla.kernel.org/show_bug.cgi?id=206537

This series enables the feature on AMD and updates config parameters
to reflect the MPK support on generic x86 platforms.

---
v3:
- Fixed the problem Jim Mattson pointed out which can cause pkru
resources to get corrupted during host and guest switches.
- Moved the PKU feature detection code from VMX.c to common code.

v2:
https://lore.kernel.org/lkml/158897190718.22378.3974700869904223395.stgit@xxxxxxxxxxxxxxxxxxx/
- Introduced intermediate config option X86_MEMORY_PROTECTION_KEYS to
avoid user propmpts. Kept X86_INTEL_MEMORY_PROTECTION_KEYS as is.
Eventually, we will be moving to X86_MEMORY_PROTECTION_KEYS after
couple of kernel revisions.
- Moved pkru data structures to kvm_vcpu_arch. Moved save/restore pkru
to kvm_load_host_xsave_state/kvm_load_guest_xsave_state.

v1:
https://lore.kernel.org/lkml/158880240546.11615.2219410169137148044.stgit@xxxxxxxxxxxxxxxxxxx/

Babu Moger (3):
arch/x86: Rename config X86_INTEL_MEMORY_PROTECTION_KEYS to generic x86
KVM: x86: Move pkru save/restore to x86.c
KVM: x86: Move MPK feature detection to common code


Documentation/core-api/protection-keys.rst | 3 ++-
arch/x86/Kconfig | 11 +++++++++--
arch/x86/include/asm/disabled-features.h | 4 ++--
arch/x86/include/asm/kvm_host.h | 1 +
arch/x86/include/asm/mmu.h | 2 +-
arch/x86/include/asm/mmu_context.h | 4 ++--
arch/x86/include/asm/pgtable.h | 4 ++--
arch/x86/include/asm/pgtable_types.h | 2 +-
arch/x86/include/asm/special_insns.h | 2 +-
arch/x86/include/uapi/asm/mman.h | 2 +-
arch/x86/kernel/cpu/common.c | 2 +-
arch/x86/kvm/cpuid.c | 4 +++-
arch/x86/kvm/vmx/vmx.c | 22 ----------------------
arch/x86/kvm/x86.c | 17 +++++++++++++++++
arch/x86/mm/Makefile | 2 +-
arch/x86/mm/pkeys.c | 2 +-
scripts/headers_install.sh | 2 +-
tools/arch/x86/include/asm/disabled-features.h | 4 ++--
18 files changed, 48 insertions(+), 42 deletions(-)

--