mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Ashok Raj <ashok.raj@intel.com>
To: Borislav Petkov <bp@alien8.de>
Cc: "Luck, Tony" <tony.luck@intel.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	LKML <linux-kernel@vger.kernel.org>, x86 <x86@kernel.org>,
	Ingo Molnar <mingo@kernel.org>,
	"Hansen, Dave" <dave.hansen@intel.com>,
	"Schofield, Alison" <alison.schofield@intel.com>,
	"Chatre, Reinette" <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>,
	"Lutomirski, Andy" <luto@kernel.org>,
	"andrew.cooper3@citrix.com" <andrew.cooper3@citrix.com>,
	"Ostrovsky, Boris" <boris.ostrovsky@oracle.com>,
	Martin Pohlack <mpohlack@amazon.de>,
	Ashok Raj <ashok.raj@intel.com>
Subject: Re: [Patch v3 Part2 3/9] x86/microcode/intel: Fix collect_cpu_info() to reflect current microcode
Date: Tue, 31 Jan 2023 14:32:12 -0800	[thread overview]
Message-ID: <Y9mW7EiL/BpYFLWn@a4bf019067fa.jf.intel.com> (raw)
In-Reply-To: <Y9mDYMASXCFaFkNU@zn.tnic>

On Tue, Jan 31, 2023 at 10:08:48PM +0100, Borislav Petkov wrote:
> On Tue, Jan 31, 2023 at 08:49:52PM +0000, Luck, Tony wrote:
> > What happens here if the update on the first hyperthread failed (sure, it shouldn't,
> > but stuff happens at large scale).  In this case the current rev is still older that the
> > the cache version ... so there is no "goto out", and this hyperthread will now write
> > the MSR to initiate microcode update here, while the first thread is off executing
> > arbitrary code (the situation that we want to avoid).
> 
> Lemme see if I can follow: we sync all threads in __reload_late() and
> once they all arrive, we send them down into ->apply_microcode.

I was interpreting Thomas's response here

https://lore.kernel.org/lkml/87y1pygiyf.ffs@tglx/

---------
#3

Not to talk about the completely broken error handling in the actual
microcode loading case in __reload_late()::wait_for_siblings code path.
---------

I thought sending sibling down the apply_microcode() just to update
revision might have bad interaction, so revise this to be more explicit and
update only the revision number and not have any other intended side
effect.

Patch3 was a prep-patch for patch4, to eliminate the call to
apply_microcode(). Maybe that wasn't the issue?

It's likely Thomas hinted at somthing else and I took the wrong hint.

> 
> T0 arrives, and fails the update. That is this piece:
> 
>         /* write microcode via MSR 0x79 */
>         wrmsrl(MSR_IA32_UCODE_WRITE, (unsigned long)mc->bits);
> 
>         rev = intel_get_microcode_revision();
> 
>         if (rev != mc->hdr.rev) {
>                 pr_err("CPU%d update to revision 0x%x failed\n",
>                        cpu, mc->hdr.rev);
>                 return UCODE_ERROR;
>         }
> 
> We return here without updating cpu_sig.rev, as we should.
> 
> T1 arrives, updates successfully and updates its cpu_sig.rev.
> 
> T0's patch level has been updated too with that because the microcode
> engine is shared between the threads. T0's cpu_sig.rev isn't, however,
> as that has happened "behind its back", so to speak.
> 
> Is that the scenario you're talking about?

The fix in patch4 was just attempting to not call apply_microcode(), since
at this time the other CPUs that arrived in wait_for_siblings: have left,
doing an update when the others are strictly not in renedzvous is the
condition we try to avoid.

Again, maybe this is me reading Thomas's request incorrectly.

Cheers,
Ashok

  reply	other threads:[~2023-01-31 22:33 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 [this message]
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 ` [Patch v3 Part2 4/9] x86/microcode: Do not call apply_microcode() on sibling threads Ashok Raj
2023-02-01 22:21   ` 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=Y9mW7EiL/BpYFLWn@a4bf019067fa.jf.intel.com \
    --to=ashok.raj@intel.com \
    --cc=alison.schofield@intel.com \
    --cc=andrew.cooper3@citrix.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

all inboxes | Powered by JetHome®