From: Ashok Raj <ashok.raj@intel.com>
To: Borislav Petkov <bp@alien8.de>, Thomas Gleixner <tglx@linutronix.de>
Cc: Ashok Raj <ashok.raj@intel.com>,
LKML <linux-kernel@vger.kernel.org>, x86 <x86@kernel.org>,
Ingo Molnar <mingo@kernel.org>, Tony Luck <tony.luck@intel.com>,
Dave Hansen <dave.hansen@intel.com>,
Alison Schofield <alison.schofield@intel.com>,
Reinette Chatre <reinette.chatre@intel.com>,
Tom Lendacky <thomas.lendacky@amd.com>,
Stefan Talpalaru <stefantalpalaru@yahoo.com>,
David Woodhouse <dwmw2@infradead.org>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Jonathan Corbet <corbet@lwn.net>,
"Rafael J . Wysocki" <rafael@kernel.org>,
Peter Zilstra <peterz@infradead.org>,
Andy Lutomirski <luto@kernel.org>,
Andrew Cooper <Andrew.Cooper3@citrix.com>,
Boris Ostrovsky <boris.ostrovsky@oracle.com>,
Martin Pohlack <mpohlack@amazon.de>
Subject: [Patch v3 Part2 4/9] x86/microcode: Do not call apply_microcode() on sibling threads
Date: Mon, 30 Jan 2023 13:39:50 -0800 [thread overview]
Message-ID: <20230130213955.6046-5-ashok.raj@intel.com> (raw)
In-Reply-To: <20230130213955.6046-1-ashok.raj@intel.com>
Microcode updates are applied at the core, so an update to one HT sibling
is effective on all HT siblings of the same core.
During late-load, after the primary has updated the microcode, it also
reflects that in the per-cpu structure (cpuinfo_x86) holding the current
revision.
Current code calls apply_microcode() to update the SW per-cpu revision.
But in the odd case when primary returned with an error, and as a result
the secondary didn't get the revision updated, will attempt to perform
a patch load and the primary has already been released to the system.
This could be problematic, because the whole rendezvous dance is to
prevent updates when one of the siblings could be executing arbitrary code.
Replace apply_microcode() with a call to collect_cpu_info() and let that
call also update the per-cpu structure instead of returning the previously
cached values.
Suggested-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Ashok Raj <ashok.raj@intel.com>
Cc: LKML <linux-kernel@vger.kernel.org>
Cc: x86 <x86@kernel.org>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Dave Hansen <dave.hansen@intel.com>
Cc: Alison Schofield <alison.schofield@intel.com>
Cc: Reinette Chatre <reinette.chatre@intel.com>
Cc: Thomas Gleixner (Intel) <tglx@linutronix.de>
Cc: Tom Lendacky <thomas.lendacky@amd.com>
Cc: Stefan Talpalaru <stefantalpalaru@yahoo.com>
Cc: David Woodhouse <dwmw2@infradead.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Rafael J. Wysocki <rafael@kernel.org>
Cc: Peter Zilstra (Intel) <peterz@infradead.org>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Andrew Cooper <Andrew.Cooper3@citrix.com>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: Martin Pohlack <mpohlack@amazon.de>
---
arch/x86/kernel/cpu/microcode/core.c | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/arch/x86/kernel/cpu/microcode/core.c b/arch/x86/kernel/cpu/microcode/core.c
index e4b4dfcf2d18..8452fad89bf6 100644
--- a/arch/x86/kernel/cpu/microcode/core.c
+++ b/arch/x86/kernel/cpu/microcode/core.c
@@ -386,6 +386,7 @@ static int __wait_for_cpus(atomic_t *t, long long timeout)
static int __reload_late(void *info)
{
int cpu = smp_processor_id();
+ struct ucode_cpu_info *uci;
enum ucode_state err;
int ret = 0;
@@ -421,12 +422,13 @@ static int __reload_late(void *info)
/*
* At least one thread has completed update on each core.
- * For others, simply call the update to make sure the
- * per-cpu cpuinfo can be updated with right microcode
- * revision.
+ * For siblings, collect the cpuinfo and update the
+ * per-cpu cpuinfo with the current microcode revision.
*/
- if (cpumask_first(topology_sibling_cpumask(cpu)) != cpu)
- err = microcode_ops->apply_microcode(cpu);
+ if (cpumask_first(topology_sibling_cpumask(cpu)) != cpu) {
+ uci = ucode_cpu_info + cpu;
+ microcode_ops->collect_cpu_info(cpu, &uci->cpu_sig);
+ }
return ret;
}
--
2.37.2
next prev parent reply other threads:[~2023-01-30 21:40 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-30 21:39 [Patch v3 Part2 0/9] x86/microcode: Declare microcode safe for late loading Ashok Raj
2023-01-30 21:39 ` [Patch v3 Part2 1/9] x86/microcode: Taint kernel only if microcode loading was successful Ashok Raj
2023-01-31 11:50 ` Borislav Petkov
2023-01-31 16:51 ` Ashok Raj
2023-01-31 20:20 ` Borislav Petkov
2023-01-31 22:54 ` Ashok Raj
2023-02-01 12:44 ` Borislav Petkov
2023-02-01 15:42 ` Ashok Raj
2023-02-01 21:47 ` Ashok Raj
2023-02-01 22:06 ` Borislav Petkov
2023-02-01 22:19 ` Ashok Raj
2023-02-01 22:26 ` Borislav Petkov
2023-01-31 12:17 ` Li, Aubrey
2023-01-31 15:32 ` Ashok Raj
2023-01-30 21:39 ` [Patch v3 Part2 2/9] x86/microcode: Report invalid writes to reload sysfs file Ashok Raj
2023-01-31 15:57 ` [tip: x86/microcode] x86/microcode: Allow only "1" as a late reload trigger value tip-bot2 for Ashok Raj
2023-01-30 21:39 ` [Patch v3 Part2 3/9] x86/microcode/intel: Fix collect_cpu_info() to reflect current microcode Ashok Raj
2023-01-31 16:48 ` Borislav Petkov
2023-01-31 17:34 ` Luck, Tony
2023-01-31 17:41 ` Ashok Raj
2023-01-31 20:40 ` Borislav Petkov
2023-01-31 20:49 ` Luck, Tony
2023-01-31 21:08 ` Borislav Petkov
2023-01-31 22:32 ` Ashok Raj
2023-01-31 22:43 ` Luck, Tony
2023-02-01 12:53 ` Borislav Petkov
2023-02-01 15:13 ` Ashok Raj
2023-02-01 15:25 ` Borislav Petkov
2023-02-01 16:15 ` Luck, Tony
2023-02-01 19:13 ` Dave Hansen
2023-02-01 19:32 ` Ashok Raj
2023-01-30 21:39 ` Ashok Raj [this message]
2023-02-01 22:21 ` [Patch v3 Part2 4/9] x86/microcode: Do not call apply_microcode() on sibling threads Dave Hansen
2023-02-01 22:40 ` Borislav Petkov
2023-02-02 2:51 ` Ashok Raj
2023-02-02 9:40 ` Borislav Petkov
2023-02-02 16:34 ` Ashok Raj
2023-01-30 21:39 ` [Patch v3 Part2 5/9] x86/microcode: Move late load warning to the same function that taints kernel Ashok Raj
2023-01-30 21:39 ` [Patch v3 Part2 6/9] x86/microcode/intel: Add minimum required revision to microcode header Ashok Raj
2023-01-30 21:39 ` [Patch v3 Part2 7/9] x86/microcode: Add a generic mechanism to declare support for minrev Ashok Raj
2023-01-30 21:39 ` [Patch v3 Part2 8/9] x86/microcode/intel: Drop wbinvd() from microcode loading Ashok Raj
2023-01-30 21:39 ` [Patch v3 Part2 9/9] x86/microcode: Provide an option to override minrev enforcement Ashok Raj
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=20230130213955.6046-5-ashok.raj@intel.com \
--to=ashok.raj@intel.com \
--cc=Andrew.Cooper3@citrix.com \
--cc=alison.schofield@intel.com \
--cc=benh@kernel.crashing.org \
--cc=boris.ostrovsky@oracle.com \
--cc=bp@alien8.de \
--cc=corbet@lwn.net \
--cc=dave.hansen@intel.com \
--cc=dwmw2@infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@kernel.org \
--cc=mingo@kernel.org \
--cc=mpohlack@amazon.de \
--cc=peterz@infradead.org \
--cc=rafael@kernel.org \
--cc=reinette.chatre@intel.com \
--cc=stefantalpalaru@yahoo.com \
--cc=tglx@linutronix.de \
--cc=thomas.lendacky@amd.com \
--cc=tony.luck@intel.com \
--cc=x86@kernel.org \
/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