Re: [PATCH v8 3/3] x86/cpu: Do a sanity check on required feature bits
From: Sohil Mehta
Date: Tue Mar 10 2026 - 03:06:02 EST
On 3/2/2026 7:25 AM, Maciej Wieczor-Retman wrote:
> +/*
> + * As a sanity check compare the final x86_capability bitmask with the initial
> + * predefined required feature bits. In case of a mismatch emit a warning with
> + * the faulty bitmask value.
Aren't we printing the faulty feature name instead of the bitmask value?
> + */
> +static void verify_required_features(const struct cpuinfo_x86 *c)
> +{
> + u32 missing[NCAPINTS] = REQUIRED_MASK_INITIALIZER;
> + char cap_buf[16];
> + u32 error = 0;
> + unsigned int i;
> +
X86 prefers reverse Xmas order for variable declarations.
> + for (i = 0; i < NCAPINTS; i++) {
> + missing[i] &= ~c->x86_capability[i];
> + error |= missing[i];
> + }
> +
> + if (!error)
> + return; /* All good */
> +
The tail comments should be avoided. This one is completely unnecessary
here.
> + /*
> + * At least one required feature is missing. Print a warning,
> + * and taint the kernel.
> + */
The "print a warning, and taint the kernel" part seems redundant.
Probably there is no need for a comment here as well.
> + pr_warn("cpu %d: missing required feature(s):", c->cpu_index);
> + for_each_set_bit(i, (void *)missing, NCAPINTS << 5)
for_each_set_bit() typically expects unsigned long *. Do you run into
any issue if you use that?
> + pr_cont(" %s", x86_cap_name(i, cap_buf));
> + pr_cont("\n");
> + add_taint(TAINT_CPU_OUT_OF_SPEC, LOCKDEP_STILL_OK);
> +}
> +
> /*
> * This does the hard work of actually picking apart the CPU stuff...
> */
> @@ -2125,6 +2156,8 @@ static void identify_cpu(struct cpuinfo_x86 *c)
> mcheck_cpu_init(c);
>
> numa_add_cpu(smp_processor_id());
> +
> + verify_required_features(c);
> }
>
> /*