aboutsummaryrefslogtreecommitdiff
path: root/arch/powerpc/include/asm/hardirq.h
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/include/asm/hardirq.h')
-rw-r--r--arch/powerpc/include/asm/hardirq.h36
1 files changed, 20 insertions, 16 deletions
diff --git a/arch/powerpc/include/asm/hardirq.h b/arch/powerpc/include/asm/hardirq.h
index 288e14d53b7..418fb654370 100644
--- a/arch/powerpc/include/asm/hardirq.h
+++ b/arch/powerpc/include/asm/hardirq.h
@@ -1,29 +1,33 @@
#ifndef _ASM_POWERPC_HARDIRQ_H
#define _ASM_POWERPC_HARDIRQ_H
-#ifdef __KERNEL__
-#include <asm/irq.h>
-#include <asm/bug.h>
+#include <linux/threads.h>
+#include <linux/irq.h>
-/* The __last_jiffy_stamp field is needed to ensure that no decrementer
- * interrupt is lost on SMP machines. Since on most CPUs it is in the same
- * cache line as local_irq_count, it is cheap to access and is also used on UP
- * for uniformity.
- */
typedef struct {
- unsigned int __softirq_pending; /* set_bit is used on this */
- unsigned int __last_jiffy_stamp;
+ unsigned int __softirq_pending;
+ unsigned int timer_irqs_event;
+ unsigned int timer_irqs_others;
+ unsigned int pmu_irqs;
+ unsigned int mce_exceptions;
+ unsigned int spurious_irqs;
+#ifdef CONFIG_PPC_DOORBELL
+ unsigned int doorbell_irqs;
+#endif
} ____cacheline_aligned irq_cpustat_t;
-#include <linux/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */
+DECLARE_PER_CPU_SHARED_ALIGNED(irq_cpustat_t, irq_stat);
-#define last_jiffy_stamp(cpu) __IRQ_STAT((cpu), __last_jiffy_stamp)
+#define __ARCH_IRQ_STAT
-static inline void ack_bad_irq(int irq)
+#define local_softirq_pending() __get_cpu_var(irq_stat).__softirq_pending
+
+static inline void ack_bad_irq(unsigned int irq)
{
- printk(KERN_CRIT "illegal vector %d received!\n", irq);
- BUG();
+ printk(KERN_CRIT "unexpected IRQ trap at vector %02x\n", irq);
}
-#endif /* __KERNEL__ */
+extern u64 arch_irq_stat_cpu(unsigned int cpu);
+#define arch_irq_stat_cpu arch_irq_stat_cpu
+
#endif /* _ASM_POWERPC_HARDIRQ_H */