In some hardware implementations, coherency between the encrypted and
unencrypted mappings of the same physical page is enforced. In such a system,
it is not required for software to flush the page from all CPU caches in the
system prior to changing the value of the C-bit for a page. This hardware-
enforced cache coherency is indicated by EAX[10] in CPUID leaf 0x8000001f.
Add this as a CPUID feature and skip flushing caches if the feature is present.
v2 -> v3:
Patch# 2: Moves the addition of the CPUID feature from
early_detect_mem_encrypt() to scattered.c.
Patch# 3,4: These two are the split of patch# 3 from v2. Patch# 3
is for non[PATCH 0/4 v3] x86: AMD: Don't flush encrypted pages if hardware enforces cache coherency-SEV encryptions while patch#4 is for SEV
encryptions.
[PATCH 1/4 v3] x86: AMD: Replace numeric value for SME CPUID leaf with a
[PATCH 2/4 v3] x86: AMD: Add hardware-enforced cache coherency as a
[PATCH 3/4 v3] x86: AMD: Don't flush cache if hardware enforces cache
[PATCH 4/4 v3] KVM: SVM: Don't flush cache if hardware enforces cache
arch/x86/boot/compressed/mem_encrypt.S | 5 +++--
arch/x86/include/asm/cpufeatures.h | 6 ++++++
arch/x86/kernel/cpu/amd.c | 2 +-
arch/x86/kernel/cpu/scattered.c | 5 +++--
arch/x86/kvm/cpuid.c | 2 +-
arch/x86/kvm/svm/sev.c | 3 ++-
arch/x86/kvm/svm/svm.c | 4 ++--
arch/x86/mm/mem_encrypt_identity.c | 4 ++--
arch/x86/mm/pat/set_memory.c | 2 +-
9 files changed, 21 insertions(+), 12 deletions(-)
Krish Sadhukhan (4):
x86: AMD: Replace numeric value for SME CPUID leaf with a #define
x86: AMD: Add hardware-enforced cache coherency as a CPUID feature
x86: AMD: Don't flush cache if hardware enforces cache coherency across en
cryption domnains
KVM: SVM: Don't flush cache if hardware enforces cache coherency across en
cryption domains