diff options
Diffstat (limited to 'arch/x86/include')
| -rw-r--r-- | arch/x86/include/asm/cpufeatures.h | 1 | ||||
| -rw-r--r-- | arch/x86/include/asm/cpuid.h | 8 | ||||
| -rw-r--r-- | arch/x86/include/asm/sev.h | 19 | ||||
| -rw-r--r-- | arch/x86/include/asm/xen/hypercall.h | 5 | 
4 files changed, 23 insertions, 10 deletions
| diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h index 602957dd2609..06fc0479a23f 100644 --- a/arch/x86/include/asm/cpufeatures.h +++ b/arch/x86/include/asm/cpufeatures.h @@ -218,6 +218,7 @@  #define X86_FEATURE_FLEXPRIORITY	( 8*32+ 1) /* "flexpriority" Intel FlexPriority */  #define X86_FEATURE_EPT			( 8*32+ 2) /* "ept" Intel Extended Page Table */  #define X86_FEATURE_VPID		( 8*32+ 3) /* "vpid" Intel Virtual Processor ID */ +#define X86_FEATURE_COHERENCY_SFW_NO	( 8*32+ 4) /* SNP cache coherency software work around not needed */  #define X86_FEATURE_VMMCALL		( 8*32+15) /* "vmmcall" Prefer VMMCALL to VMCALL */  #define X86_FEATURE_XENPV		( 8*32+16) /* Xen paravirtual guest */ diff --git a/arch/x86/include/asm/cpuid.h b/arch/x86/include/asm/cpuid.h deleted file mode 100644 index d5749b25fa10..000000000000 --- a/arch/x86/include/asm/cpuid.h +++ /dev/null @@ -1,8 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ - -#ifndef _ASM_X86_CPUID_H -#define _ASM_X86_CPUID_H - -#include <asm/cpuid/api.h> - -#endif /* _ASM_X86_CPUID_H */ diff --git a/arch/x86/include/asm/sev.h b/arch/x86/include/asm/sev.h index 89075ff19afa..02236962fdb1 100644 --- a/arch/x86/include/asm/sev.h +++ b/arch/x86/include/asm/sev.h @@ -619,6 +619,24 @@ 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; } @@ -634,6 +652,7 @@ static inline int rmp_make_shared(u64 pfn, enum pg_level level) { return -ENODEV  static 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 diff --git a/arch/x86/include/asm/xen/hypercall.h b/arch/x86/include/asm/xen/hypercall.h index 59a62c3780a2..a16d4631547c 100644 --- a/arch/x86/include/asm/xen/hypercall.h +++ b/arch/x86/include/asm/xen/hypercall.h @@ -94,12 +94,13 @@ DECLARE_STATIC_CALL(xen_hypercall, xen_hypercall_func);  #ifdef MODULE  #define __ADDRESSABLE_xen_hypercall  #else -#define __ADDRESSABLE_xen_hypercall __ADDRESSABLE_ASM_STR(__SCK__xen_hypercall) +#define __ADDRESSABLE_xen_hypercall \ +	__stringify(.global STATIC_CALL_KEY(xen_hypercall);)  #endif  #define __HYPERCALL					\  	__ADDRESSABLE_xen_hypercall			\ -	"call __SCT__xen_hypercall" +	__stringify(call STATIC_CALL_TRAMP(xen_hypercall))  #define __HYPERCALL_ENTRY(x)	"a" (x) | 
