diff options
author | Wu Zhangjin <wuzhangjin@gmail.com> | 2010-07-23 21:22:14 -0400 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2010-08-05 08:26:24 -0400 |
commit | de3bc0e7ba5e89d63cb2dbac4e49a5c4b18669b5 (patch) | |
tree | 16813f3d063da6c8d8fdbe47b574b4067d048579 /arch/mips | |
parent | b8c7428af023c4cc37b8651e309713c1f4d9a18e (diff) |
MIPS: Loongson: Oprofile: add a new do_perfcnt_IRQ()
On FuLoong-2F IP6 is shared by the performance counter overflow interrupt
and the Bonito northbridge interrupt. To reduce overhead only call
do_IRQ() when oprofile is enabled to reduce overhead.
This patch adds an inline function do_perfcnt_IRQ() to hide the #if's ,
which can be shared by the other Loongson machines, i.e. gdium.
Signed-off-by: Wu Zhangjin <wuzhangjin@gmail.com>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/1492/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips')
-rw-r--r-- | arch/mips/include/asm/mach-loongson/loongson.h | 8 | ||||
-rw-r--r-- | arch/mips/loongson/fuloong-2e/irq.c | 2 | ||||
-rw-r--r-- | arch/mips/loongson/lemote-2f/irq.c | 4 |
3 files changed, 10 insertions, 4 deletions
diff --git a/arch/mips/include/asm/mach-loongson/loongson.h b/arch/mips/include/asm/mach-loongson/loongson.h index 53ee881c675d..cb6985f24303 100644 --- a/arch/mips/include/asm/mach-loongson/loongson.h +++ b/arch/mips/include/asm/mach-loongson/loongson.h | |||
@@ -62,6 +62,14 @@ extern int mach_i8259_irq(void); | |||
62 | #define LOONGSON_IRQ_BASE 32 | 62 | #define LOONGSON_IRQ_BASE 32 |
63 | #define LOONGSON2_PERFCNT_IRQ (MIPS_CPU_IRQ_BASE + 6) /* cpu perf counter */ | 63 | #define LOONGSON2_PERFCNT_IRQ (MIPS_CPU_IRQ_BASE + 6) /* cpu perf counter */ |
64 | 64 | ||
65 | #include <linux/interrupt.h> | ||
66 | static inline void do_perfcnt_IRQ(void) | ||
67 | { | ||
68 | #if defined(CONFIG_OPROFILE) || defined(CONFIG_OPROFILE_MODULE) | ||
69 | do_IRQ(LOONGSON2_PERFCNT_IRQ); | ||
70 | #endif | ||
71 | } | ||
72 | |||
65 | #define LOONGSON_FLASH_BASE 0x1c000000 | 73 | #define LOONGSON_FLASH_BASE 0x1c000000 |
66 | #define LOONGSON_FLASH_SIZE 0x02000000 /* 32M */ | 74 | #define LOONGSON_FLASH_SIZE 0x02000000 /* 32M */ |
67 | #define LOONGSON_FLASH_TOP (LOONGSON_FLASH_BASE+LOONGSON_FLASH_SIZE-1) | 75 | #define LOONGSON_FLASH_TOP (LOONGSON_FLASH_BASE+LOONGSON_FLASH_SIZE-1) |
diff --git a/arch/mips/loongson/fuloong-2e/irq.c b/arch/mips/loongson/fuloong-2e/irq.c index 99e08c3db3f4..d61a04222b87 100644 --- a/arch/mips/loongson/fuloong-2e/irq.c +++ b/arch/mips/loongson/fuloong-2e/irq.c | |||
@@ -30,7 +30,7 @@ asmlinkage void mach_irq_dispatch(unsigned int pending) | |||
30 | if (pending & CAUSEF_IP7) | 30 | if (pending & CAUSEF_IP7) |
31 | do_IRQ(MIPS_CPU_IRQ_BASE + 7); | 31 | do_IRQ(MIPS_CPU_IRQ_BASE + 7); |
32 | else if (pending & CAUSEF_IP6) /* perf counter loverflow */ | 32 | else if (pending & CAUSEF_IP6) /* perf counter loverflow */ |
33 | do_IRQ(LOONGSON2_PERFCNT_IRQ); | 33 | do_perfcnt_IRQ(); |
34 | else if (pending & CAUSEF_IP5) | 34 | else if (pending & CAUSEF_IP5) |
35 | i8259_irqdispatch(); | 35 | i8259_irqdispatch(); |
36 | else if (pending & CAUSEF_IP2) | 36 | else if (pending & CAUSEF_IP2) |
diff --git a/arch/mips/loongson/lemote-2f/irq.c b/arch/mips/loongson/lemote-2f/irq.c index c6db7e7df963..71347d7030c5 100644 --- a/arch/mips/loongson/lemote-2f/irq.c +++ b/arch/mips/loongson/lemote-2f/irq.c | |||
@@ -79,9 +79,7 @@ void mach_irq_dispatch(unsigned int pending) | |||
79 | if (pending & CAUSEF_IP7) | 79 | if (pending & CAUSEF_IP7) |
80 | do_IRQ(LOONGSON_TIMER_IRQ); | 80 | do_IRQ(LOONGSON_TIMER_IRQ); |
81 | else if (pending & CAUSEF_IP6) { /* North Bridge, Perf counter */ | 81 | else if (pending & CAUSEF_IP6) { /* North Bridge, Perf counter */ |
82 | #if defined(CONFIG_OPROFILE) || defined(CONFIG_OPROFILE_MODULE) | 82 | do_perfcnt_IRQ(); |
83 | do_IRQ(LOONGSON2_PERFCNT_IRQ); | ||
84 | #endif | ||
85 | bonito_irqdispatch(); | 83 | bonito_irqdispatch(); |
86 | } else if (pending & CAUSEF_IP3) /* CPU UART */ | 84 | } else if (pending & CAUSEF_IP3) /* CPU UART */ |
87 | do_IRQ(LOONGSON_UART_IRQ); | 85 | do_IRQ(LOONGSON_UART_IRQ); |