From: Sean Christopherson <seanjc@google.com>
To: Nathan Chancellor <nathan@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>,
x86@kernel.org, Josh Poimboeuf <jpoimboe@kernel.org>,
Kim Phillips <kim.phillips@amd.com>,
Paolo Bonzini <pbonzini@redhat.com>,
linux-kernel@vger.kernel.org, kvm@vger.kernel.org
Subject: Re: Hitting AUTOIBRS WARN_ON_ONCE() in init_amd() booting 32-bit kernel under KVM
Date: Fri, 6 Dec 2024 08:20:06 -0800 [thread overview]
Message-ID: <Z1MkNofJjt7Oq0G6@google.com> (raw)
In-Reply-To: <20241205220604.GA2054199@thelio-3990X>
On Thu, Dec 05, 2024, Nathan Chancellor wrote:
> Hi Boris and x86 + KVM folks,
>
> I got access to a new box that has an EPYC 9454P in it and I noticed
> that I hit the warning from
>
> /*
> * Make sure EFER[AIBRSE - Automatic IBRS Enable] is set. The APs are brought up
> * using the trampoline code and as part of it, MSR_EFER gets prepared there in
> * order to be replicated onto them. Regardless, set it here again, if not set,
> * to protect against any future refactoring/code reorganization which might
> * miss setting this important bit.
> */
> if (spectre_v2_in_eibrs_mode(spectre_v2_enabled) &&
> cpu_has(c, X86_FEATURE_AUTOIBRS))
> WARN_ON_ONCE(msr_set_bit(MSR_EFER, _EFER_AUTOIBRS));
>
> that was added by commit 8cc68c9c9e92 ("x86/CPU/AMD: Make sure
> EFER[AIBRSE] is set") when booting a 32-bit kernel in QEMU with KVM. I
> do not see this without KVM, so maybe this has something to do with
> commit 8c19b6f257fa ("KVM: x86: Propagate the AMD Automatic IBRS feature
> to the guest") as well?
This is a bug in the above code. msr_set_bit() returns '1' on a successful write.
Presumably spectre_v2_select_mitigation() sets EFER.AUTOIBRS when booting on bare
metal, in which case msr_set_bit() returns '0' because the bit is already set.
--
From: Sean Christopherson <seanjc@google.com>
Date: Fri, 6 Dec 2024 08:14:45 -0800
Subject: [PATCH] x86/CPU/AMD: WARN when setting EFER.AUTOIBRS if and only if
the WRMSR fails
When ensuring EFER.AUTOIBRS is set, WARN only on a negative return code
from msr_set_bit(), as '1' is used to indicate the WRMSR was successful
('0' indicates the MSR bit was already set).
Fixes: 8cc68c9c9e92 ("x86/CPU/AMD: Make sure EFER[AIBRSE] is set")
Reported-by: Nathan Chancellor <nathan@kernel.org>
Closes: https://lore.kernel.org/all/20241205220604.GA2054199@thelio-3990X
Signed-off-by: Sean Christopherson <seanjc@google.com>
---
arch/x86/kernel/cpu/amd.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
index d8408aafeed9..79d2e17f6582 100644
--- a/arch/x86/kernel/cpu/amd.c
+++ b/arch/x86/kernel/cpu/amd.c
@@ -1065,7 +1065,7 @@ static void init_amd(struct cpuinfo_x86 *c)
*/
if (spectre_v2_in_eibrs_mode(spectre_v2_enabled) &&
cpu_has(c, X86_FEATURE_AUTOIBRS))
- WARN_ON_ONCE(msr_set_bit(MSR_EFER, _EFER_AUTOIBRS));
+ WARN_ON_ONCE(msr_set_bit(MSR_EFER, _EFER_AUTOIBRS) < 0);
/* AMD CPUs don't need fencing after x2APIC/TSC_DEADLINE MSR writes. */
clear_cpu_cap(c, X86_FEATURE_APIC_MSRS_FENCE);
base-commit: b8f52214c61a5b99a54168145378e91b40d10c90
--
next prev parent reply other threads:[~2024-12-06 16:20 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-05 22:06 Hitting AUTOIBRS WARN_ON_ONCE() in init_amd() booting 32-bit kernel under KVM Nathan Chancellor
2024-12-06 16:20 ` Sean Christopherson [this message]
2024-12-06 19:02 ` [tip: x86/urgent] x86/CPU/AMD: WARN when setting EFER.AUTOIBRS if and only if the WRMSR fails tip-bot2 for Sean Christopherson
2024-12-09 20:44 ` Hitting AUTOIBRS WARN_ON_ONCE() in init_amd() booting 32-bit kernel under KVM Josh Poimboeuf
2024-12-09 20:54 ` Sean Christopherson
2024-12-09 20:59 ` Borislav Petkov
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=Z1MkNofJjt7Oq0G6@google.com \
--to=seanjc@google.com \
--cc=bp@alien8.de \
--cc=jpoimboe@kernel.org \
--cc=kim.phillips@amd.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nathan@kernel.org \
--cc=pbonzini@redhat.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.