diff options
Diffstat (limited to 'arch/powerpc/kernel/irq.c')
| -rw-r--r-- | arch/powerpc/kernel/irq.c | 23 | 
1 files changed, 21 insertions, 2 deletions
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c index 71413f41278..5cbcf4d5a80 100644 --- a/arch/powerpc/kernel/irq.c +++ b/arch/powerpc/kernel/irq.c @@ -122,8 +122,8 @@ static inline notrace int decrementer_check_overflow(void)  }  /* This is called whenever we are re-enabling interrupts - * and returns either 0 (nothing to do) or 500/900 if there's - * either an EE or a DEC to generate. + * and returns either 0 (nothing to do) or 500/900/280/a00/e80 if + * there's an EE, DEC or DBELL to generate.   *   * This is called in two contexts: From arch_local_irq_restore()   * before soft-enabling interrupts, and from the exception exit @@ -182,6 +182,13 @@ notrace unsigned int __check_irq_replay(void)  	local_paca->irq_happened &= ~PACA_IRQ_DBELL;  	if (happened & PACA_IRQ_DBELL)  		return 0x280; +#else +	local_paca->irq_happened &= ~PACA_IRQ_DBELL; +	if (happened & PACA_IRQ_DBELL) { +		if (cpu_has_feature(CPU_FTR_HVMODE)) +			return 0xe80; +		return 0xa00; +	}  #endif /* CONFIG_PPC_BOOK3E */  	/* There should be nothing left ! */ @@ -367,6 +374,15 @@ 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_DOORBELL +	if (cpu_has_feature(CPU_FTR_DBELL)) { +		seq_printf(p, "%*s: ", prec, "DBL"); +		for_each_online_cpu(j) +			seq_printf(p, "%10u ", per_cpu(irq_stat, j).doorbell_irqs); +		seq_printf(p, "  Doorbell interrupts\n"); +	} +#endif +  	return 0;  } @@ -380,6 +396,9 @@ u64 arch_irq_stat_cpu(unsigned int cpu)  	sum += per_cpu(irq_stat, cpu).pmu_irqs;  	sum += per_cpu(irq_stat, cpu).mce_exceptions;  	sum += per_cpu(irq_stat, cpu).spurious_irqs; +#ifdef CONFIG_PPC_DOORBELL +	sum += per_cpu(irq_stat, cpu).doorbell_irqs; +#endif  	return sum;  }  |