We only change sme_me_mask very early in boot. It may be a candidate for conversion to patchable constant. Signed-off-by: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx> --- arch/x86/include/asm/mem_encrypt.h | 5 ++++- arch/x86/kernel/patchable_const.c | 2 ++ arch/x86/mm/mem_encrypt.c | 15 ++++----------- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/arch/x86/include/asm/mem_encrypt.h b/arch/x86/include/asm/mem_encrypt.h index 22c5f3e6f820..4131ddf262f3 100644 --- a/arch/x86/include/asm/mem_encrypt.h +++ b/arch/x86/include/asm/mem_encrypt.h @@ -18,10 +18,13 @@ #include <linux/init.h> #include <asm/bootparam.h> +#include <asm/patchable_const.h> #ifdef CONFIG_AMD_MEM_ENCRYPT -extern u64 sme_me_mask; +#define sme_me_mask_DEFAULT 0 +DECLARE_PATCHABLE_CONST_U64(sme_me_mask); +#define sme_me_mask sme_me_mask_READ() void sme_encrypt_execute(unsigned long encrypted_kernel_vaddr, unsigned long decrypted_kernel_vaddr, diff --git a/arch/x86/kernel/patchable_const.c b/arch/x86/kernel/patchable_const.c index 8d48c4c101ca..1bf2980d91b4 100644 --- a/arch/x86/kernel/patchable_const.c +++ b/arch/x86/kernel/patchable_const.c @@ -90,11 +90,13 @@ int patch_const_u64(unsigned long **start, unsigned long **stop, } PATCHABLE_CONST_U64(__PHYSICAL_MASK); +PATCHABLE_CONST_U64(sme_me_mask); #ifdef CONFIG_MODULES /* Add an entry for a constant here if it expected to be seen in the modules */ static const struct const_u64_table const_u64_table[] = { {"__PHYSICAL_MASK", __PHYSICAL_MASK_DEFAULT, &__PHYSICAL_MASK_CURRENT}, + {"sme_me_mask", sme_me_mask_DEFAULT, &sme_me_mask_CURRENT}, }; __init_or_module __nostackprotector diff --git a/arch/x86/mm/mem_encrypt.c b/arch/x86/mm/mem_encrypt.c index 5135b59ce6a5..c93b5c5eeccf 100644 --- a/arch/x86/mm/mem_encrypt.c +++ b/arch/x86/mm/mem_encrypt.c @@ -36,13 +36,6 @@ static char sme_cmdline_arg[] __initdata = "mem_encrypt"; static char sme_cmdline_on[] __initdata = "on"; static char sme_cmdline_off[] __initdata = "off"; -/* - * Since SME related variables are set early in the boot process they must - * reside in the .data section so as not to be zeroed out when the .bss - * section is later cleared. - */ -u64 sme_me_mask __section(.data) = 0; -EXPORT_SYMBOL(sme_me_mask); DEFINE_STATIC_KEY_FALSE(sev_enable_key); EXPORT_SYMBOL_GPL(sev_enable_key); @@ -997,7 +990,7 @@ void __init __nostackprotector sme_enable(struct boot_params *bp) return; /* SEV state cannot be controlled by a command line option */ - sme_me_mask = me_mask; + sme_me_mask_SET(me_mask); sev_enabled = true; return; } @@ -1028,11 +1021,11 @@ void __init __nostackprotector sme_enable(struct boot_params *bp) cmdline_find_option(cmdline_ptr, cmdline_arg, buffer, sizeof(buffer)); if (!strncmp(buffer, cmdline_on, sizeof(buffer))) - sme_me_mask = me_mask; + sme_me_mask_SET(me_mask); else if (!strncmp(buffer, cmdline_off, sizeof(buffer))) - sme_me_mask = 0; + sme_me_mask_SET(0); else - sme_me_mask = active_by_default ? me_mask : 0; + sme_me_mask_SET(active_by_default ? me_mask : 0); if (__PHYSICAL_MASK_SET(__PHYSICAL_MASK & ~sme_me_mask)) { /* Can we handle it? */ -- 2.15.1 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>