Re: [PATCH] x86/MCE/AMD: fix warning about sleep-in-atomic at early boot

From: Konstantin Khlebnikov
Date: Fri Nov 01 2019 - 09:39:28 EST


On 31/10/2019 17.29, Borislav Petkov wrote:
On Thu, Oct 31, 2019 at 04:04:48PM +0300, Konstantin Khlebnikov wrote:
Function smca_configure() is called only for current cpu thus
rdmsr_safe_on_cpu() could be replaced with atomic rdmsr_safe().

BUG: sleeping function called from invalid context at kernel/sched/completion.c:99
in_atomic(): 1, irqs_disabled(): 1, pid: 0, name: swapper/1
CPU: 1 PID: 0 Comm: swapper/1 Not tainted 4.19.79-16 #1
^^^^^^^^^^

I'm assuming you hit this on latest upstream too?

I tried 5.4 once but there was no warning.
Code in 4.19 and in mainline almost the same.

Probably hardware needs full power cycle to reset state or something else.


Hardware name: GIGABYTE R181-Z90-00/MZ91-FS0-00, BIOS R11 10/25/2019
Call Trace:
dump_stack+0x5c/0x7b
___might_sleep+0xec/0x110
wait_for_completion+0x39/0x160
? __rdmsr_safe_on_cpu+0x45/0x60
rdmsr_safe_on_cpu+0xae/0xf0
? wrmsr_on_cpus+0x20/0x20
? machine_check_poll+0xfd/0x1f0
? mce_amd_feature_init+0x190/0x2d0
mce_amd_feature_init+0x190/0x2d0
mcheck_cpu_init+0x11a/0x460
identify_cpu+0x3e2/0x560
identify_secondary_cpu+0x13/0x80
smp_store_cpu_info+0x45/0x50
start_secondary+0xaa/0x200
secondary_startup_64+0xa4/0xb0

Except warning in kernel log everything works fine.

Fixes: 5896820e0aa3 ("x86/mce/AMD, EDAC/mce_amd: Define and use tables for known SMCA IP types")
Signed-off-by: Konstantin Khlebnikov <khlebnikov@xxxxxxxxxxxxxx>
---
arch/x86/kernel/cpu/mce/amd.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/x86/kernel/cpu/mce/amd.c b/arch/x86/kernel/cpu/mce/amd.c
index 6ea7fdc82f3c..c7ab0d38af79 100644
--- a/arch/x86/kernel/cpu/mce/amd.c
+++ b/arch/x86/kernel/cpu/mce/amd.c
@@ -269,7 +269,7 @@ static void smca_configure(unsigned int bank, unsigned int cpu)
if (smca_banks[bank].hwid)
return;
- if (rdmsr_safe_on_cpu(cpu, MSR_AMD64_SMCA_MCx_IPID(bank), &low, &high)) {
+ if (rdmsr_safe(MSR_AMD64_SMCA_MCx_IPID(bank), &low, &high)) {

Yazen, any objections?