diff options
Diffstat (limited to 'arch/x86/kernel/sev.c')
| -rw-r--r-- | arch/x86/kernel/sev.c | 27 | 
1 files changed, 12 insertions, 15 deletions
| diff --git a/arch/x86/kernel/sev.c b/arch/x86/kernel/sev.c index b59b09c2f284..7e1e63cc48e6 100644 --- a/arch/x86/kernel/sev.c +++ b/arch/x86/kernel/sev.c @@ -23,6 +23,7 @@  #include <linux/platform_device.h>  #include <linux/io.h>  #include <linux/psp-sev.h> +#include <linux/dmi.h>  #include <uapi/linux/sev-guest.h>  #include <asm/init.h> @@ -795,21 +796,6 @@ void __init early_snp_set_memory_shared(unsigned long vaddr, unsigned long paddr  	early_set_pages_state(vaddr, paddr, npages, SNP_PAGE_STATE_SHARED);  } -void __init snp_prep_memory(unsigned long paddr, unsigned int sz, enum psc_op op) -{ -	unsigned long vaddr, npages; - -	vaddr = (unsigned long)__va(paddr); -	npages = PAGE_ALIGN(sz) >> PAGE_SHIFT; - -	if (op == SNP_PAGE_STATE_PRIVATE) -		early_snp_set_memory_private(vaddr, paddr, npages); -	else if (op == SNP_PAGE_STATE_SHARED) -		early_snp_set_memory_shared(vaddr, paddr, npages); -	else -		WARN(1, "invalid memory op %d\n", op); -} -  static unsigned long __set_pages_state(struct snp_psc_desc *data, unsigned long vaddr,  				       unsigned long vaddr_end, int op)  { @@ -2136,6 +2122,17 @@ void __head __noreturn snp_abort(void)  	sev_es_terminate(SEV_TERM_SET_GEN, GHCB_SNP_UNSUPPORTED);  } +/* + * SEV-SNP guests should only execute dmi_setup() if EFI_CONFIG_TABLES are + * enabled, as the alternative (fallback) logic for DMI probing in the legacy + * ROM region can cause a crash since this region is not pre-validated. + */ +void __init snp_dmi_setup(void) +{ +	if (efi_enabled(EFI_CONFIG_TABLES)) +		dmi_setup(); +} +  static void dump_cpuid_table(void)  {  	const struct snp_cpuid_table *cpuid_table = snp_cpuid_get_table(); |