diff options
author | Russell King <rmk+kernel@arm.linux.org.uk> | 2010-11-15 09:20:41 -0500 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2010-12-20 10:06:58 -0500 |
commit | cab8c6f3053c1b147bba825844c8e208f8b3b9f4 (patch) | |
tree | ee11484788efc820b48f2348ec72df6e8356b7b5 | |
parent | 46c48f222f568decb881a552caa1c8f9c96c521e (diff) |
ARM: SMP: move ipi_count into irq_stat structure
Move the ipi_count into irq_stat, which allows the ipi_data structure
to be entirely removed.
Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-rw-r--r-- | arch/arm/include/asm/hardirq.h | 3 | ||||
-rw-r--r-- | arch/arm/kernel/smp.c | 14 |
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 { | |||
10 | #ifdef CONFIG_LOCAL_TIMERS | 10 | #ifdef CONFIG_LOCAL_TIMERS |
11 | unsigned int local_timer_irqs; | 11 | unsigned int local_timer_irqs; |
12 | #endif | 12 | #endif |
13 | #ifdef CONFIG_SMP | ||
14 | unsigned int ipi_irqs; | ||
15 | #endif | ||
13 | } ____cacheline_aligned irq_cpustat_t; | 16 | } ____cacheline_aligned irq_cpustat_t; |
14 | 17 | ||
15 | #include <linux/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */ | 18 | #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 @@ | |||
46 | */ | 46 | */ |
47 | struct secondary_data secondary_data; | 47 | struct secondary_data secondary_data; |
48 | 48 | ||
49 | /* | ||
50 | * structures for inter-processor calls | ||
51 | */ | ||
52 | struct ipi_data { | ||
53 | unsigned long ipi_count; | ||
54 | }; | ||
55 | |||
56 | static DEFINE_PER_CPU(struct ipi_data, ipi_data); | ||
57 | |||
58 | enum ipi_msg_type { | 49 | enum ipi_msg_type { |
59 | IPI_TIMER = 2, | 50 | IPI_TIMER = 2, |
60 | IPI_RESCHEDULE, | 51 | IPI_RESCHEDULE, |
@@ -398,7 +389,7 @@ void show_ipi_list(struct seq_file *p) | |||
398 | seq_puts(p, "IPI:"); | 389 | seq_puts(p, "IPI:"); |
399 | 390 | ||
400 | for_each_present_cpu(cpu) | 391 | for_each_present_cpu(cpu) |
401 | seq_printf(p, " %10lu", per_cpu(ipi_data, cpu).ipi_count); | 392 | seq_printf(p, " %10u", __get_irq_stat(cpu, ipi_irqs)); |
402 | 393 | ||
403 | seq_putc(p, '\n'); | 394 | seq_putc(p, '\n'); |
404 | } | 395 | } |
@@ -513,10 +504,9 @@ static void ipi_cpu_stop(unsigned int cpu) | |||
513 | asmlinkage void __exception do_IPI(int ipinr, struct pt_regs *regs) | 504 | asmlinkage void __exception do_IPI(int ipinr, struct pt_regs *regs) |
514 | { | 505 | { |
515 | unsigned int cpu = smp_processor_id(); | 506 | unsigned int cpu = smp_processor_id(); |
516 | struct ipi_data *ipi = &per_cpu(ipi_data, cpu); | ||
517 | struct pt_regs *old_regs = set_irq_regs(regs); | 507 | struct pt_regs *old_regs = set_irq_regs(regs); |
518 | 508 | ||
519 | ipi->ipi_count++; | 509 | __inc_irq_stat(cpu, ipi_irqs); |
520 | 510 | ||
521 | switch (ipinr) { | 511 | switch (ipinr) { |
522 | case IPI_TIMER: | 512 | case IPI_TIMER: |