[PATCH v3 01/17] ARM: Make global handler and CONFIG_MULTI_IRQ_HANDLER mutually exclusive
Nicolas Pitre
nicolas.pitre at linaro.org
Fri Nov 4 14:30:20 EDT 2011
On Fri, 4 Nov 2011, Marc Zyngier wrote:
> Even when CONFIG_MULTI_IRQ_HANDLER is selected, the core code
> requires the arch_irq_handler_default macro to be defined as
> a fallback.
>
> It turns out nobody is using that particular feature as both PXA
> and shmobile have all their machine descriptors populated with
> the interrupt handler, leaving unused code (or empty macros) in
> their entry-macro.S file just to be able to compile entry-armv.S.
>
> Make CONFIG_MULTI_IRQ_HANDLER exclusive wrt arch_irq_handler_default,
> which allows to remove one test from the hot path. Also cleanup both
> PXA and shmobile entry-macro.S.
>
> Cc: Eric Miao <eric.y.miao at gmail.com>
> Cc: Paul Mundt <lethal at linux-sh.org>
> Signed-off-by: Marc Zyngier <marc.zyngier at arm.com>
I like the look of it.
Acked-by: Nicolas Pitre <nico at linaro.org>
> ---
> arch/arm/kernel/entry-armv.S | 7 ++--
> arch/arm/mach-pxa/include/mach/entry-macro.S | 36 ---------------------
> arch/arm/mach-shmobile/include/mach/entry-macro.S | 9 -----
> 3 files changed, 3 insertions(+), 49 deletions(-)
>
> diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S
> index 9ad50c4..bd49a6a 100644
> --- a/arch/arm/kernel/entry-armv.S
> +++ b/arch/arm/kernel/entry-armv.S
> @@ -36,12 +36,11 @@
> #ifdef CONFIG_MULTI_IRQ_HANDLER
> ldr r1, =handle_arch_irq
> mov r0, sp
> - ldr r1, [r1]
> adr lr, BSYM(9997f)
> - teq r1, #0
> - movne pc, r1
> -#endif
> + ldr pc, [r1]
> +#else
> arch_irq_handler_default
> +#endif
> 9997:
> .endm
>
> diff --git a/arch/arm/mach-pxa/include/mach/entry-macro.S b/arch/arm/mach-pxa/include/mach/entry-macro.S
> index a73bc86..260c0c1 100644
> --- a/arch/arm/mach-pxa/include/mach/entry-macro.S
> +++ b/arch/arm/mach-pxa/include/mach/entry-macro.S
> @@ -7,45 +7,9 @@
> * License version 2. This program is licensed "as is" without any
> * warranty of any kind, whether express or implied.
> */
> -#include <mach/hardware.h>
> -#include <mach/irqs.h>
>
> .macro disable_fiq
> .endm
>
> - .macro get_irqnr_preamble, base, tmp
> - .endm
> -
> .macro arch_ret_to_user, tmp1, tmp2
> .endm
> -
> - .macro get_irqnr_and_base, irqnr, irqstat, base, tmp
> - mrc p15, 0, \tmp, c0, c0, 0 @ CPUID
> - mov \tmp, \tmp, lsr #13
> - and \tmp, \tmp, #0x7 @ Core G
> - cmp \tmp, #1
> - bhi 1002f
> -
> - @ Core Generation 1 (PXA25x)
> - mov \base, #io_p2v(0x40000000) @ IIR Ctl = 0x40d00000
> - add \base, \base, #0x00d00000
> - ldr \irqstat, [\base, #0] @ ICIP
> - ldr \irqnr, [\base, #4] @ ICMR
> -
> - ands \irqnr, \irqstat, \irqnr
> - beq 1001f
> - rsb \irqstat, \irqnr, #0
> - and \irqstat, \irqstat, \irqnr
> - clz \irqnr, \irqstat
> - rsb \irqnr, \irqnr, #(31 + PXA_IRQ(0))
> - b 1001f
> -1002:
> - @ Core Generation 2 (PXA27x) or Core Generation 3 (PXA3xx)
> - mrc p6, 0, \irqstat, c5, c0, 0 @ ICHP
> - tst \irqstat, #0x80000000
> - beq 1001f
> - bic \irqstat, \irqstat, #0x80000000
> - mov \irqnr, \irqstat, lsr #16
> - add \irqnr, \irqnr, #(PXA_IRQ(0))
> -1001:
> - .endm
> diff --git a/arch/arm/mach-shmobile/include/mach/entry-macro.S b/arch/arm/mach-shmobile/include/mach/entry-macro.S
> index 8d4a416..2a57b29 100644
> --- a/arch/arm/mach-shmobile/include/mach/entry-macro.S
> +++ b/arch/arm/mach-shmobile/include/mach/entry-macro.S
> @@ -18,14 +18,5 @@
> .macro disable_fiq
> .endm
>
> - .macro get_irqnr_preamble, base, tmp
> - .endm
> -
> - .macro get_irqnr_and_base, irqnr, irqstat, base, tmp
> - .endm
> -
> - .macro test_for_ipi, irqnr, irqstat, base, tmp
> - .endm
> -
> .macro arch_ret_to_user, tmp1, tmp2
> .endm
> --
> 1.7.0.4
>
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>
More information about the linux-arm-kernel
mailing list