FAILED: patch "[PATCH] x86/sev: Guard sev_evict_cache() with CONFIG_AMD_MEM_ENCRYPT" failed to apply to 6.6-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 6.6-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.6.y
git checkout FETCH_HEAD
git cherry-pick -x 7f830e126dc357fc086905ce9730140fd4528d66
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2025092125-stitch-starting-35cb@gregkh' --subject-prefix 'PATCH 6.6.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 7f830e126dc357fc086905ce9730140fd4528d66 Mon Sep 17 00:00:00 2001
From: Tom Lendacky <[email protected]>
Date: Mon, 15 Sep 2025 11:04:12 -0500
Subject: [PATCH] x86/sev: Guard sev_evict_cache() with CONFIG_AMD_MEM_ENCRYPT
The sev_evict_cache() is guest-related code and should be guarded by CONFIG_AMD_MEM_ENCRYPT, not CONFIG_KVM_AMD_SEV.
CONFIG_AMD_MEM_ENCRYPT=y is required for a guest to run properly as an SEV-SNP guest, but a guest kernel built with CONFIG_KVM_AMD_SEV=n would get the stub function of sev_evict_cache() instead of the version that performs the actual eviction. Move the function declarations under the appropriate #ifdef.
arch/x86/include/asm/sev.h +19 -19
@@ -562,6 +562,24 @@ enum es_result sev_es_ghcb_hv_call(struct ghcb *ghcb,extern struct ghcb *boot_ghcb; +static inline void sev_evict_cache (void *va,int npages) +{ +volatile u8 val__always_unused ; +u8 *bytes = va; +int page_idx; + +/* +* For SEV guests, a read from the first/last cache-lines of a 4K page +* using the guest key is sufficient to cause a flush of all cache-lines +* associated with that 4K page without incurring all the overhead of a +* full CLFLUSH sequence. +*/ +for (page_idx =0 ; page_idx < npages; page_idx++) { + val = bytes[page_idx *PAGE_SIZE ]; + val = bytes[page_idx *PAGE_SIZE +PAGE_SIZE -1 ]; + } +} +#else /* !CONFIG_AMD_MEM_ENCRYPT */ #define snp_vmpl 0
@@ -605,6 +623,7 @@ static inline int snp_send_guest_request(struct snp_msg_desc *mdesc,static inline int snp_svsm_vtpm_send_command (u8 *buffer) {return -ENODEV ; }static inline void __init snp_secure_tsc_prepare (void ) { }static inline void __init snp_secure_tsc_init (void ) { } +static inline void sev_evict_cache (void *va,int npages) {}#endif /* CONFIG_AMD_MEM_ENCRYPT */
@@ -619,24 +638,6 @@ int rmp_make_shared(u64 pfn, enum pg_level level);void snp_leak_pages (u64 pfn,unsigned int npages);void kdump_sev_callback (void );void snp_fixup_e820_tables (void ); - -static inline void sev_evict_cache (void *va,int npages) -{ -volatile u8 val__always_unused ; -u8 *bytes = va; -int page_idx; - -/* -* For SEV guests, a read from the first/last cache-lines of a 4K page -* using the guest key is sufficient to cause a flush of all cache-lines -* associated with that 4K page without incurring all the overhead of a -* full CLFLUSH sequence. -*/ -for (page_idx =0 ; page_idx < npages; page_idx++) { - val = bytes[page_idx *PAGE_SIZE ]; - val = bytes[page_idx *PAGE_SIZE +PAGE_SIZE -1 ]; - } -}#else static inline bool snp_probe_rmptable_info (void ) {return false; }static inline int snp_rmptable_init (void ) {return -ENOSYS ; }
@@ -652,7 +653,6 @@ static inline int rmp_make_shared(u64 pfn, enum pg_level level) { return -ENODEVstatic inline void snp_leak_pages (u64 pfn,unsigned int npages) {}static inline void kdump_sev_callback (void ) { }static inline void snp_fixup_e820_tables (void ) {} -static inline void sev_evict_cache (void *va,int npages) {}#endif #endif