summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/include/asm/hardirq.h3
-rw-r--r--arch/arm/kernel/smp.c14
2 files changed, 5 insertions, 12 deletions
diff --git a/arch/arm/include/asm/hardirq.h b/arch/arm/include/asm/hardirq.h
index 923eaa1ba83b..824b08aa3f7a 100644
--- a/arch/arm/include/asm/hardirq.h
+++ b/arch/arm/include/asm/hardirq.h
@@ -10,6 +10,9 @@ typedef struct {
#ifdef CONFIG_LOCAL_TIMERS
unsigned int local_timer_irqs;
#endif
+#ifdef CONFIG_SMP
+ unsigned int ipi_irqs;
+#endif
} ____cacheline_aligned irq_cpustat_t;
#include <linux/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
index 24131264ec2c..65b5ba867805 100644
--- a/arch/arm/kernel/smp.c
+++ b/arch/arm/kernel/smp.c
@@ -46,15 +46,6 @@
*/
struct secondary_data secondary_data;
-/*
- * structures for inter-processor calls
- */
-struct ipi_data {
- unsigned long ipi_count;
-};
-
-static DEFINE_PER_CPU(struct ipi_data, ipi_data);
-
enum ipi_msg_type {
IPI_TIMER = 2,
IPI_RESCHEDULE,
@@ -398,7 +389,7 @@ void show_ipi_list(struct seq_file *p)
seq_puts(p, "IPI:");
for_each_present_cpu(cpu)
- seq_printf(p, " %10lu", per_cpu(ipi_data, cpu).ipi_count);
+ seq_printf(p, " %10u", __get_irq_stat(cpu, ipi_irqs));
seq_putc(p, '\n');
}
@@ -513,10 +504,9 @@ static void ipi_cpu_stop(unsigned int cpu)
asmlinkage void __exception do_IPI(int ipinr, struct pt_regs *regs)
{
unsigned int cpu = smp_processor_id();
- struct ipi_data *ipi = &per_cpu(ipi_data, cpu);
struct pt_regs *old_regs = set_irq_regs(regs);
- ipi->ipi_count++;
+ __inc_irq_stat(cpu, ipi_irqs);
switch (ipinr) {
case IPI_TIMER: