[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 5/9] x86/amd: Probe for legacy SSBD interfaces on boot
>>> On 03.12.18 at 17:18, <andrew.cooper3@xxxxxxxxxx> wrote: > +static void __init noinline amd_probe_legacy_ssbd(void) > +{ > + uint64_t new; > + > + /* > + * Search for mechanisms of controlling Memory Disambiguation. > + * > + * If the CPU reports that it is fixed, there is nothing to do. If we > + * have an architectural MSR_SPEC_CTRL.SSBD control, leave everything > + * to the common code. > + */ > + if (cpu_has_amd_ssb_no || cpu_has_amd_ssbd) > + return; > + > + /* Use MSR_VIRT_SPEC_CTRL if our hypervisor offers it. */ > + if (cpu_has_virt_sc_ssbd) { > + setup_force_cpu_cap(X86_FEATURE_LEGACY_SSBD); The only issue I have is with this double meaning of the new synthetic feature here and ... > + return; > + } > + > + /* Probe for LS_CFG settings. */ > + switch (boot_cpu_data.x86) { > + default: return; /* No known LS_CFG settings. */ > + case 0x15: ls_cfg_ssbd_mask = 1ull << 54; break; > + case 0x16: ls_cfg_ssbd_mask = 1ull << 33; break; > + case 0x17: ls_cfg_ssbd_mask = 1ull << 10; break; > + } > + > + /* > + * MSR_AMD64_LS_CFG isn't architectural, and may not be virtualised > + * fully. Check that we can actually flip the bit before concluding > + * that LS_CFG is available for use. > + */ > + if (rdmsr_safe(MSR_AMD64_LS_CFG, ls_cfg_base) || > + wrmsr_safe(MSR_AMD64_LS_CFG, ls_cfg_base ^ ls_cfg_ssbd_mask)) > + return; > + > + rdmsrl(MSR_AMD64_LS_CFG, new); > + if (new != (ls_cfg_base ^ ls_cfg_ssbd_mask)) > + return; > + > + /* > + * Leave ls_cfg_base with the bit clear. This is Xen's overall > + * default, and it simplifies the context switch logic. > + */ > + ls_cfg_base &= ~ls_cfg_ssbd_mask; > + if ((new != ls_cfg_base) && wrmsr_safe(MSR_AMD64_LS_CFG, ls_cfg_base)) > + return; > + > + /* LS_CFG appears to work fully. Lets choose to use it. */ > + setup_force_cpu_cap(X86_FEATURE_LEGACY_SSBD); ... here. Granted you explicitly say so ... > --- a/xen/include/asm-x86/cpufeatures.h > +++ b/xen/include/asm-x86/cpufeatures.h > @@ -25,6 +25,7 @@ XEN_CPUFEATURE(XEN_SMAP, (FSCAPINTS+0)*32+11) /* > SMAP gets used by Xen it > XEN_CPUFEATURE(LFENCE_DISPATCH, (FSCAPINTS+0)*32+12) /* lfence set as > Dispatch Serialising */ > XEN_CPUFEATURE(IND_THUNK_LFENCE,(FSCAPINTS+0)*32+13) /* Use IND_THUNK_LFENCE > */ > XEN_CPUFEATURE(IND_THUNK_JMP, (FSCAPINTS+0)*32+14) /* Use IND_THUNK_JMP */ > +XEN_CPUFEATURE(LEGACY_SSBD, (FSCAPINTS+0)*32+15) /* LS_CFG or > VIRT_SPEC_CTRL available for SSBD */ ... here, but I still will need to see how this gets used before giving my ack here. Additionally I can see "legacy" as a suitable name for the LS_CFG approach, but does this also fit the VIRT_SPEC_CTRL one? One other question: There's now redundant code in init_amd() handling opt_ssbd. Would it not fit here to remove/replace that? Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |