[MODERATED] Re: [PATCH 3/4] V8 more sampling fun 3
mark gross <[email protected]> Thu, 16 Apr 2020 15:54:56 -0700
| Newsgroups | org.kernel.lore.historical-speck |
|---|---|
| Message-ID | <20200416225455.GC2583@u1904> |
On Thu, Apr 16, 2020 at 12:17:23PM -0500, speck for Josh Poimboeuf wrote: > On Thu, Jan 16, 2020 at 02:16:07PM -0800, speck for mark gross wrote: > > From: mark gross <[email protected]> > > Subject: [PATCH 3/4] x86/speculation: Special Register Buffer Data Sampling > > (SRBDS) mitigation control. > > Subjects don't need periods. > > > +static enum srbds_mitigations srbds_mitigation __ro_after_init = SRBDS_MITIGATION_FULL; > > +static const char * const srbds_strings[] = { > > + [SRBDS_MITIGATION_OFF] = "Vulnerable", > > + [SRBDS_MITIGATION_UCODE_NEEDED] = "Vulnerable: No microcode", > > + [SRBDS_MITIGATION_FULL] = "Mitigated: Microcode", > > FWIW, this is at least the third time I've made this comment... I'm very sorry I miss this multiple times. > s/Mitigated/Mitigation/ > > > + [SRBDS_MITIGATION_TSX_OFF] = "Mitigated: TSX disabled", > > s/Mitigated/Mitigation > > > @@ -1142,6 +1177,26 @@ static void __init cpu_set_bug_bits(struct cpuinfo_x86 *c) > > (ia32_cap & ARCH_CAP_TSX_CTRL_MSR))) > > setup_force_cpu_bug(X86_BUG_TAA); > > > > + /* > > + * Some parts on the list don't have RDRAND or RDSEED. Make sure > > + * they show as "Not affected". > > + */ > > + if (cpu_has(c, X86_FEATURE_RDRAND) || cpu_has(c, X86_FEATURE_RDSEED)) { > > + if (cpu_matches(SRBDS, cpu_vuln_blacklist)) { > > + /* > > + * Parts in the blacklist that enumerate MDS_NO are > > + * only vulnerable if TSX can be used. To handle cases > > + * where TSX gets fused off check to see if TSX is > > + * fused off and thus not affected. > > + */ > > + if ((ia32_cap & ARCH_CAP_MDS_NO) && tsx_fused_off(c)) > > + goto srbds_not_affected; > > + > > + setup_force_cpu_bug(X86_BUG_SRBDS); > > + } > > + } > > + > > +srbds_not_affected: > > if (cpu_matches(NO_MELTDOWN, cpu_vuln_whitelist)) > > return; > > When nitpicking the whitespace before, I think I completely missed the > fact that this goto is extremely ugly. And there are a lot of > unnecessary nested ifs. And the comment is redundant. > > How about something like this: > > /* > * Parts in the SRBDS blacklist that enumerate MDS_NO are only > * vulnerable if TSX isn't fused off. > */ > if (cpu_matches(SRBDS, cpu_vuln_blacklist) && > (cpu_has(c, X86_FEATURE_RDRAND) || cpu_has(c, X86_FEATURE_RDSEED)) && > (!(ia32_cap & ARCH_CAP_MDS_NO) || !tsx_fused_off(c))) > setup_force_cpu_bug(X86_BUG_SRBDS); I had this in an unreleased version but, I thought the redability of the conditional too much for me so I created the tsx_fused_off funtion to. I also considerd the contropositive of what I did have if (!(ia32_cap & ARCH_CAP_MDS_NO) || !tsx_fused_off(c)) goto srbds_not_affected; also hard to read / parse finally I thought of: if ((ia32_cap & ARCH_CAP_MDS_NO) && tsx_fused_off(c)) continue; else setup_force_cpu_bug(X86_BUG_SRBDS); and thought that looked pretty dumb too. But, Like I said I'm not going to argue. --mark