x86/apic: Do not use smp_processor_id() in preemptible code
Borislav Petkov
maintainerPATCH 1/1 x86/apic: Do not use smp_processor_id() in preemptible code
From: Borislav Petkov <[email protected]>
Call stack is:
check_preemption_disabled
? x2apic_prepare_cpu
x2apic_dead_cpu
cpuhp_invoke_callback
? cpuhp_kick_ap_work
? cpumask_next
_cpu_down
freeze_secondary_cpus
hibernation_snapshot
...
i.e., box is doing suspend-to-disk.
Signed-off-by Borislav Petkov <[email protected]>
--- arch/x86/kernel/apic/x2apic_cluster.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/x86/kernel/apic/x2apic_cluster.c +1 -1
@@ -156,7 +156,7 @@ static int x2apic_dead_cpu(unsigned int dead_cpu) {struct cluster_mask *cmsk =per_cpu (cluster_masks, dead_cpu); -cpumask_clear_cpu (smp_processor_id (), &cmsk->mask); +cpumask_clear_cpu (dead_cpu, &cmsk->mask);free_cpumask_var (per_cpu (ipi_mask, dead_cpu));return 0 ; }
Signature · 1 line
2.13.0
Quoted 26 lines · Borislav Petkov
From: Borislav Petkov <[email protected]>
Call stack is:
check_preemption_disabled
?x2apic_prepare_cpu
x2apic_dead_cpu
cpuhp_invoke_callback
?cpuhp_kick_ap_work
?cpumask_next
_cpu_down
freeze_secondary_cpus
hibernation_snapshot
...i.e., box is doing suspend-to-disk.
Signed-off-by Borislav Petkov <[email protected]>--- arch/x86/kernel/apic/x2apic_cluster.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)arch/x86/kernel/apic/x2apic_cluster.c +0
-0
arch/x86/kernel/apic/x2apic_cluster.c static int x2apic_dead_cpu(unsigned int dead_cpu) · line 159
Quoted 5 lines
arch/x86/kernel/apic/x2apic_cluster.c +1
-1@@ -156,7 +156,7 @@ static int x2apic_dead_cpu(unsigned int dead_cpu) {struct cluster_mask *cmsk =per_cpu (cluster_masks, dead_cpu); -cpumask_clear_cpu (smp_processor_id (), &cmsk->mask); +cpumask_clear_cpu (dead_cpu, &cmsk->mask);
Duh......
Quoted 7 lines
arch/x86/kernel/apic/x2apic_cluster.c +0
-0free_cpumask_var (per_cpu (ipi_mask, dead_cpu));return 0 ; }Signature · 1 line
2.13.0