powerpc/64s: Move HMI IRQ stat from percpu variable to paca.
With the proposed change in percpu bootmem allocator to use page mapping [1], the percpu first chunk memory area can come from vmalloc ranges. This makes the HMI (Hypervisor Maintenance Interrupt) handler crash the kernel whenever percpu variable is accessed in real mode. This patch fixes this issue by moving the HMI IRQ stat inside paca for safe access in realmode. [1] https://lore.kernel.org/linuxppc-dev/20200608070904.387440-1-aneesh.kumar@linux.ibm.com/ Suggested-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com> Signed-off-by: Mahesh Salgaonkar <mahesh@linux.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/159290806973.3642154.5244613424529764050.stgit@jupiter
This commit is contained in:

committed by
Michael Ellerman

parent
d3c61954fc
commit
ada68a66b7
@@ -621,13 +621,14 @@ int arch_show_interrupts(struct seq_file *p, int prec)
|
||||
seq_printf(p, "%10u ", per_cpu(irq_stat, j).mce_exceptions);
|
||||
seq_printf(p, " Machine check exceptions\n");
|
||||
|
||||
#ifdef CONFIG_PPC_BOOK3S_64
|
||||
if (cpu_has_feature(CPU_FTR_HVMODE)) {
|
||||
seq_printf(p, "%*s: ", prec, "HMI");
|
||||
for_each_online_cpu(j)
|
||||
seq_printf(p, "%10u ",
|
||||
per_cpu(irq_stat, j).hmi_exceptions);
|
||||
seq_printf(p, "%10u ", paca_ptrs[j]->hmi_irqs);
|
||||
seq_printf(p, " Hypervisor Maintenance Interrupts\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
seq_printf(p, "%*s: ", prec, "NMI");
|
||||
for_each_online_cpu(j)
|
||||
@@ -665,7 +666,9 @@ u64 arch_irq_stat_cpu(unsigned int cpu)
|
||||
sum += per_cpu(irq_stat, cpu).mce_exceptions;
|
||||
sum += per_cpu(irq_stat, cpu).spurious_irqs;
|
||||
sum += per_cpu(irq_stat, cpu).timer_irqs_others;
|
||||
sum += per_cpu(irq_stat, cpu).hmi_exceptions;
|
||||
#ifdef CONFIG_PPC_BOOK3S_64
|
||||
sum += paca_ptrs[cpu]->hmi_irqs;
|
||||
#endif
|
||||
sum += per_cpu(irq_stat, cpu).sreset_irqs;
|
||||
#ifdef CONFIG_PPC_WATCHDOG
|
||||
sum += per_cpu(irq_stat, cpu).soft_nmi_irqs;
|
||||
|
Reference in New Issue
Block a user