powerpc/book3s: Add basic infrastructure to handle HMI in Linux.
Handle Hypervisor Maintenance Interrupt (HMI) in Linux. This patch implements basic infrastructure to handle HMI in Linux host. The design is to invoke opal handle hmi in real mode for recovery and set irq_pending when we hit HMI. During check_irq_replay pull opal hmi event and print hmi info on console. Signed-off-by: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:

committed by
Benjamin Herrenschmidt

parent
84f1966e25
commit
0869b6fd20
@@ -189,6 +189,11 @@ notrace unsigned int __check_irq_replay(void)
|
||||
}
|
||||
#endif /* CONFIG_PPC_BOOK3E */
|
||||
|
||||
/* Check if an hypervisor Maintenance interrupt happened */
|
||||
local_paca->irq_happened &= ~PACA_IRQ_HMI;
|
||||
if (happened & PACA_IRQ_HMI)
|
||||
return 0xe60;
|
||||
|
||||
/* There should be nothing left ! */
|
||||
BUG_ON(local_paca->irq_happened != 0);
|
||||
|
||||
@@ -377,6 +382,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");
|
||||
|
||||
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, " Hypervisor Maintenance Interrupts\n");
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PPC_DOORBELL
|
||||
if (cpu_has_feature(CPU_FTR_DBELL)) {
|
||||
seq_printf(p, "%*s: ", prec, "DBL");
|
||||
@@ -400,6 +413,7 @@ 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_DOORBELL
|
||||
sum += per_cpu(irq_stat, cpu).doorbell_irqs;
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user