diff --git a/sys/x86/x86/tsc.c b/sys/x86/x86/tsc.c --- a/sys/x86/x86/tsc.c +++ b/sys/x86/x86/tsc.c @@ -212,10 +212,24 @@ memcpy(p, regs, sizeof(regs)); p += sizeof(regs); } + + /* + * Begin the search at &brand[5]: we currently expect no less + * than four digits for the frequency and either M/G/T modifier + * beforehand. See Figure 3-10, "Algorithm for Extracting + * Processor Frequency," in the above-noted document. + * + * Note that this may be inaccurate in some corner cases. + * Future work might consider scanning backward for a space + * instead and doing digit calculations from there as depicted + * in the algorithm described to future-proof it, in case more + * or fewer digits are used in the frequency description. + */ p = NULL; - for (i = 0; i < sizeof(brand) - 1; i++) + for (i = 5; i < sizeof(brand) - 1; i++) if (brand[i] == 'H' && brand[i + 1] == 'z') p = brand + i; + if (p != NULL) { p -= 5; switch (p[4]) {