From: "Maciej Wieczór-Retman" <m.wieczorretman@pm.me>
To: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
Cc: tglx@kernel.org, peterz@infradead.org, xin@zytor.com,
maciej.wieczor-retman@intel.com, babu.moger@amd.com,
chang.seok.bae@intel.com, sohil.mehta@intel.com,
dave.hansen@linux.intel.com, jpoimboe@kernel.org,
elena.reshetova@intel.com, hpa@zytor.com, ak@linux.intel.com,
darwi@linutronix.de, bp@alien8.de, mingo@redhat.com,
x86@kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v11 3/4] x86/cpu: Do a sanity check on required feature bits
Date: Sat, 21 Mar 2026 05:58:18 +0000 [thread overview]
Message-ID: <ab4xlKVJtk4IOcS4@maciej> (raw)
In-Reply-To: <20260321003015.4i7wrqmaunbljguw@desk>
On 2026-03-20 at 17:31:27 -0700, Pawan Gupta wrote:
>On Fri, Mar 20, 2026 at 12:50:25PM +0000, Maciej Wieczor-Retman wrote:
>...
>> diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
>> index 0e318f3d56cb..92159a0963c8 100644
>> --- a/arch/x86/kernel/cpu/common.c
>> +++ b/arch/x86/kernel/cpu/common.c
>> @@ -2005,6 +2005,38 @@ const char *x86_cap_name(unsigned int bit, char *buf)
>> return buf;
>> }
>>
>> +/*
>> + * As a sanity check compare the final x86_capability bitmask with the initial
>> + * predefined required feature bits.
>> + */
>> +static void verify_required_features(const struct cpuinfo_x86 *c)
>> +{
>> + u32 required_features[NCAPINTS] = REQUIRED_MASK_INIT;
>> + DECLARE_BITMAP(missing, NCAPINTS * 32);
>> + char cap_buf[X86_CAP_BUF_SIZE];
>> + u32 *missing_u32;
>> + unsigned int i;
>> + u32 error = 0;
>> +
>> + memset(missing, 0, sizeof(missing));
>> + missing_u32 = (u32 *)missing;
>> +
>> + for (i = 0; i < NCAPINTS; i++) {
>> + missing_u32[i] = ~c->x86_capability[i] & required_features[i];
>> + error |= missing_u32[i];
>> + }
>> +
>> + if (!error)
>> + return;
>> +
>> + /* At least one required feature is missing */
>> + pr_warn("CPU %d: missing required feature(s):", c->cpu_index);
>> + for_each_set_bit(i, missing, NCAPINTS * 32)
>> + pr_cont(" %s", x86_cap_name(i, cap_buf));
>> + pr_cont("\n");
>> + add_taint(TAINT_CPU_OUT_OF_SPEC, LOCKDEP_STILL_OK);
>> +}
>
>Do we need 2 loops? Can this be simplified as below:
>
>static void verify_required_features(const struct cpuinfo_x86 *c)
>{
> u32 required_features[NCAPINTS + 1] = REQUIRED_MASK_INIT;
> char cap_buf[X86_CAP_BUF_SIZE];
> int i, error = 0;
>
> for_each_set_bit(i, (unsigned long *)required_features, NCAPINTS * 32) {
> if (test_bit(i, (unsigned long *)c->x86_capability))
> continue;
> if (!error)
> pr_warn("CPU %d: missing required feature(s):", c->cpu_index);
> pr_cont(" %s", x86_cap_name(i, cap_buf));
> error = 1;
> }
>
> if (!error)
> return;
>
> pr_cont("\n");
> add_taint(TAINT_CPU_OUT_OF_SPEC, LOCKDEP_STILL_OK);
>}
I'll have to test it but one concern I'd have is the pr_cont() in this
context? Since it can technically have asynchronous problems I would
think putting more code between subsequent calls to pr_cont() can
increase the chance of some race condition. But perhaps these two if
checks are not nearly enough for that to happen.
Otherwise I liked in the previous approach the steps of setting up a
bitmask with simple bitwise logic operations, then checking the results
later. But the above code also works and I think it is easier to read.
So if there is no opposition I'll test it and switch to it for the next
version, thanks :)
--
Kind regards
Maciej Wieczór-Retman
next prev parent reply other threads:[~2026-03-21 5:58 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-20 12:50 [PATCH v11 0/4] x86: Capability bits fix and required bits sanity check Maciej Wieczor-Retman
2026-03-20 12:50 ` [PATCH v11 1/4] x86/cpu: Clear feature bits disabled at compile-time Maciej Wieczor-Retman
2026-03-20 12:50 ` [PATCH v11 2/4] x86/cpu: Check if feature string is non-zero Maciej Wieczor-Retman
2026-03-23 14:24 ` Borislav Petkov
2026-03-23 15:52 ` Maciej Wieczor-Retman
2026-03-23 16:23 ` Borislav Petkov
2026-03-23 16:58 ` Maciej Wieczor-Retman
2026-03-23 17:51 ` Borislav Petkov
2026-03-23 18:11 ` Maciej Wieczor-Retman
2026-03-23 18:15 ` H. Peter Anvin
2026-03-20 12:50 ` [PATCH v11 3/4] x86/cpu: Do a sanity check on required feature bits Maciej Wieczor-Retman
2026-03-21 0:31 ` Pawan Gupta
2026-03-21 5:58 ` Maciej Wieczór-Retman [this message]
2026-03-23 18:16 ` Pawan Gupta
2026-03-23 18:33 ` Maciej Wieczor-Retman
2026-03-26 18:36 ` Maciej Wieczor-Retman
2026-03-26 19:04 ` Pawan Gupta
2026-03-26 19:11 ` Maciej Wieczor-Retman
2026-03-28 1:52 ` H. Peter Anvin
2026-03-28 2:01 ` H. Peter Anvin
2026-03-30 9:47 ` Maciej Wieczor-Retman
2026-03-30 10:09 ` Maciej Wieczor-Retman
2026-03-30 16:01 ` Pawan Gupta
2026-03-30 21:24 ` David Laight
2026-03-31 8:12 ` Maciej Wieczor-Retman
2026-03-31 13:29 ` Maciej Wieczor-Retman
2026-03-23 16:31 ` Borislav Petkov
2026-03-23 17:05 ` Maciej Wieczor-Retman
2026-03-23 17:55 ` Borislav Petkov
2026-03-23 18:43 ` H. Peter Anvin
2026-03-23 18:43 ` H. Peter Anvin
2026-03-23 19:19 ` Borislav Petkov
2026-03-23 20:24 ` H. Peter Anvin
2026-03-23 20:58 ` Borislav Petkov
2026-03-23 21:40 ` H. Peter Anvin
2026-03-23 21:50 ` Borislav Petkov
2026-03-23 21:56 ` Borislav Petkov
2026-03-23 22:03 ` H. Peter Anvin
2026-03-23 22:09 ` Borislav Petkov
2026-03-24 1:16 ` H. Peter Anvin
2026-03-20 12:50 ` [PATCH v11 4/4] x86/cpu: Clear feature bits whose dependencies were cleared Maciej Wieczor-Retman
2026-03-23 16:35 ` Borislav Petkov
2026-03-23 17:23 ` Maciej Wieczor-Retman
2026-03-23 17:59 ` Borislav Petkov
2026-03-23 18:18 ` Maciej Wieczor-Retman
2026-03-23 18:57 ` H. Peter Anvin
2026-03-23 19:30 ` Borislav Petkov
2026-03-25 9:33 ` Maciej Wieczor-Retman
2026-03-23 19:33 ` Ahmed S. Darwish
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ab4xlKVJtk4IOcS4@maciej \
--to=m.wieczorretman@pm.me \
--cc=ak@linux.intel.com \
--cc=babu.moger@amd.com \
--cc=bp@alien8.de \
--cc=chang.seok.bae@intel.com \
--cc=darwi@linutronix.de \
--cc=dave.hansen@linux.intel.com \
--cc=elena.reshetova@intel.com \
--cc=hpa@zytor.com \
--cc=jpoimboe@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=maciej.wieczor-retman@intel.com \
--cc=mingo@redhat.com \
--cc=pawan.kumar.gupta@linux.intel.com \
--cc=peterz@infradead.org \
--cc=sohil.mehta@intel.com \
--cc=tglx@kernel.org \
--cc=x86@kernel.org \
--cc=xin@zytor.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox