lkml.org 
[lkml]   [2017]   [Jul]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v10 05/38] x86/CPU/AMD: Handle SME reduction in physical address size
    Date
    When System Memory Encryption (SME) is enabled, the physical address
    space is reduced. Adjust the x86_phys_bits value to reflect this
    reduction.

    Reviewed-by: Borislav Petkov <bp@suse.de>
    Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
    ---
    arch/x86/kernel/cpu/amd.c | 24 +++++++++++++-----------
    1 file changed, 13 insertions(+), 11 deletions(-)

    diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
    index 7f658d0..e41670e 100644
    --- a/arch/x86/kernel/cpu/amd.c
    +++ b/arch/x86/kernel/cpu/amd.c
    @@ -614,21 +614,23 @@ static void early_init_amd(struct cpuinfo_x86 *c)
    set_cpu_bug(c, X86_BUG_AMD_E400);

    /*
    - * BIOS support is required for SME. If BIOS has not enabled SME
    - * then don't advertise the feature (set in scattered.c). Also,
    - * since the SME support requires long mode, don't advertise the
    - * feature under CONFIG_X86_32.
    + * BIOS support is required for SME. If BIOS has enabled SME then
    + * adjust x86_phys_bits by the SME physical address space reduction
    + * value. If BIOS has not enabled SME then don't advertise the
    + * feature (set in scattered.c). Also, since the SME support requires
    + * long mode, don't advertise the feature under CONFIG_X86_32.
    */
    if (cpu_has(c, X86_FEATURE_SME)) {
    - if (IS_ENABLED(CONFIG_X86_32)) {
    - clear_cpu_cap(c, X86_FEATURE_SME);
    - } else {
    - u64 msr;
    + u64 msr;

    - /* Check if SME is enabled */
    - rdmsrl(MSR_K8_SYSCFG, msr);
    - if (!(msr & MSR_K8_SYSCFG_MEM_ENCRYPT))
    + /* Check if SME is enabled */
    + rdmsrl(MSR_K8_SYSCFG, msr);
    + if (msr & MSR_K8_SYSCFG_MEM_ENCRYPT) {
    + c->x86_phys_bits -= (cpuid_ebx(0x8000001f) >> 6) & 0x3f;
    + if (IS_ENABLED(CONFIG_X86_32))
    clear_cpu_cap(c, X86_FEATURE_SME);
    + } else {
    + clear_cpu_cap(c, X86_FEATURE_SME);
    }
    }
    }
    --
    1.9.1
    \
     
     \ /
      Last update: 2017-07-17 23:27    [W:4.048 / U:0.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site