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