diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-10-09 06:42:04 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-10-09 06:42:04 -0400 |
commit | 782d59c5dfc5ac39ac8cfb4c6dd40597938dde9c (patch) | |
tree | 2d831c436a1962bfe5dfdb3afeaf87c7a3e82132 /arch | |
parent | 47137c6ba1bcde30215795f9594cea770946456b (diff) | |
parent | 2828c9cdb8bd30f49c48210c014ccdd4cb994931 (diff) |
Merge branch 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull irq updates from Thomas Gleixner:
"The irq departement delivers:
- a cleanup series to get rid of mindlessly copied code.
- another bunch of new pointlessly different interrupt chip drivers.
Adding homebrewn irq chips (and timers) to SoCs must provide a
value add which is beyond the imagination of mere mortals.
- the usual SoC irq controller updates, IOW my second cat herding
project"
* 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (44 commits)
irqchip: gic-v3: Implement CPU PM notifier
irqchip: gic-v3: Refactor gic_enable_redist to support both enabling and disabling
irqchip: renesas-intc-irqpin: Add minimal runtime PM support
irqchip: renesas-intc-irqpin: Add helper variable dev = &pdev->dev
irqchip: atmel-aic5: Add sama5d4 support
irqchip: atmel-aic5: The sama5d3 has 48 IRQs
Documentation: bcm7120-l2: Add Broadcom BCM7120-style L2 binding
irqchip: bcm7120-l2: Add Broadcom BCM7120-style Level 2 interrupt controller
irqchip: renesas-irqc: Add binding docs for new R-Car Gen2 SoCs
irqchip: renesas-irqc: Add DT binding documentation
irqchip: renesas-intc-irqpin: Document SoC-specific bindings
openrisc: Get rid of handle_IRQ
arm64: Get rid of handle_IRQ
ARM: omap2: irq: Convert to handle_domain_irq
ARM: imx: tzic: Convert to handle_domain_irq
ARM: imx: avic: Convert to handle_domain_irq
irqchip: or1k-pic: Convert to handle_domain_irq
irqchip: atmel-aic5: Convert to handle_domain_irq
irqchip: atmel-aic: Convert to handle_domain_irq
irqchip: gic-v3: Convert to handle_domain_irq
...
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/Kconfig | 1 | ||||
-rw-r--r-- | arch/arm/kernel/irq.c | 19 | ||||
-rw-r--r-- | arch/arm/mach-imx/avic.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-imx/tzic.c | 3 | ||||
-rw-r--r-- | arch/arm64/Kconfig | 1 | ||||
-rw-r--r-- | arch/arm64/include/asm/hardirq.h | 2 | ||||
-rw-r--r-- | arch/arm64/kernel/irq.c | 27 | ||||
-rw-r--r-- | arch/openrisc/Kconfig | 1 | ||||
-rw-r--r-- | arch/openrisc/include/asm/irq.h | 1 | ||||
-rw-r--r-- | arch/openrisc/kernel/irq.c | 12 |
10 files changed, 6 insertions, 63 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 82dfdeac3595..d9d32de9628c 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -24,6 +24,7 @@ config ARM | |||
24 | select GENERIC_SMP_IDLE_THREAD | 24 | select GENERIC_SMP_IDLE_THREAD |
25 | select GENERIC_STRNCPY_FROM_USER | 25 | select GENERIC_STRNCPY_FROM_USER |
26 | select GENERIC_STRNLEN_USER | 26 | select GENERIC_STRNLEN_USER |
27 | select HANDLE_DOMAIN_IRQ | ||
27 | select HARDIRQS_SW_RESEND | 28 | select HARDIRQS_SW_RESEND |
28 | select HAVE_ARCH_AUDITSYSCALL if (AEABI && !OABI_COMPAT) | 29 | select HAVE_ARCH_AUDITSYSCALL if (AEABI && !OABI_COMPAT) |
29 | select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL | 30 | select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL |
diff --git a/arch/arm/kernel/irq.c b/arch/arm/kernel/irq.c index 88de943eebd6..7c81ec428b9b 100644 --- a/arch/arm/kernel/irq.c +++ b/arch/arm/kernel/irq.c | |||
@@ -65,24 +65,7 @@ int arch_show_interrupts(struct seq_file *p, int prec) | |||
65 | */ | 65 | */ |
66 | void handle_IRQ(unsigned int irq, struct pt_regs *regs) | 66 | void handle_IRQ(unsigned int irq, struct pt_regs *regs) |
67 | { | 67 | { |
68 | struct pt_regs *old_regs = set_irq_regs(regs); | 68 | __handle_domain_irq(NULL, irq, false, regs); |
69 | |||
70 | irq_enter(); | ||
71 | |||
72 | /* | ||
73 | * Some hardware gives randomly wrong interrupts. Rather | ||
74 | * than crashing, do something sensible. | ||
75 | */ | ||
76 | if (unlikely(irq >= nr_irqs)) { | ||
77 | if (printk_ratelimit()) | ||
78 | printk(KERN_WARNING "Bad IRQ%u\n", irq); | ||
79 | ack_bad_irq(irq); | ||
80 | } else { | ||
81 | generic_handle_irq(irq); | ||
82 | } | ||
83 | |||
84 | irq_exit(); | ||
85 | set_irq_regs(old_regs); | ||
86 | } | 69 | } |
87 | 70 | ||
88 | /* | 71 | /* |
diff --git a/arch/arm/mach-imx/avic.c b/arch/arm/mach-imx/avic.c index 24b103c67f82..1a8932335b21 100644 --- a/arch/arm/mach-imx/avic.c +++ b/arch/arm/mach-imx/avic.c | |||
@@ -144,7 +144,7 @@ static void __exception_irq_entry avic_handle_irq(struct pt_regs *regs) | |||
144 | if (nivector == 0xffff) | 144 | if (nivector == 0xffff) |
145 | break; | 145 | break; |
146 | 146 | ||
147 | handle_IRQ(irq_find_mapping(domain, nivector), regs); | 147 | handle_domain_irq(domain, nivector, regs); |
148 | } while (1); | 148 | } while (1); |
149 | } | 149 | } |
150 | 150 | ||
diff --git a/arch/arm/mach-imx/tzic.c b/arch/arm/mach-imx/tzic.c index 1d4f384ca773..4de65eeda1eb 100644 --- a/arch/arm/mach-imx/tzic.c +++ b/arch/arm/mach-imx/tzic.c | |||
@@ -141,8 +141,7 @@ static void __exception_irq_entry tzic_handle_irq(struct pt_regs *regs) | |||
141 | while (stat) { | 141 | while (stat) { |
142 | handled = 1; | 142 | handled = 1; |
143 | irqofs = fls(stat) - 1; | 143 | irqofs = fls(stat) - 1; |
144 | handle_IRQ(irq_find_mapping(domain, | 144 | handle_domain_irq(domain, irqofs + i * 32, regs); |
145 | irqofs + i * 32), regs); | ||
146 | stat &= ~(1 << irqofs); | 145 | stat &= ~(1 << irqofs); |
147 | } | 146 | } |
148 | } | 147 | } |
diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index d0543d90db8d..9746dc24a117 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig | |||
@@ -30,6 +30,7 @@ config ARM64 | |||
30 | select GENERIC_STRNCPY_FROM_USER | 30 | select GENERIC_STRNCPY_FROM_USER |
31 | select GENERIC_STRNLEN_USER | 31 | select GENERIC_STRNLEN_USER |
32 | select GENERIC_TIME_VSYSCALL | 32 | select GENERIC_TIME_VSYSCALL |
33 | select HANDLE_DOMAIN_IRQ | ||
33 | select HARDIRQS_SW_RESEND | 34 | select HARDIRQS_SW_RESEND |
34 | select HAVE_ARCH_AUDITSYSCALL | 35 | select HAVE_ARCH_AUDITSYSCALL |
35 | select HAVE_ARCH_JUMP_LABEL | 36 | select HAVE_ARCH_JUMP_LABEL |
diff --git a/arch/arm64/include/asm/hardirq.h b/arch/arm64/include/asm/hardirq.h index 0be67821f9ce..e8a3268a891c 100644 --- a/arch/arm64/include/asm/hardirq.h +++ b/arch/arm64/include/asm/hardirq.h | |||
@@ -47,8 +47,6 @@ static inline void ack_bad_irq(unsigned int irq) | |||
47 | irq_err_count++; | 47 | irq_err_count++; |
48 | } | 48 | } |
49 | 49 | ||
50 | extern void handle_IRQ(unsigned int, struct pt_regs *); | ||
51 | |||
52 | /* | 50 | /* |
53 | * No arch-specific IRQ flags. | 51 | * No arch-specific IRQ flags. |
54 | */ | 52 | */ |
diff --git a/arch/arm64/kernel/irq.c b/arch/arm64/kernel/irq.c index dfa6e3e74fdd..071a6ec13bd8 100644 --- a/arch/arm64/kernel/irq.c +++ b/arch/arm64/kernel/irq.c | |||
@@ -40,33 +40,6 @@ int arch_show_interrupts(struct seq_file *p, int prec) | |||
40 | return 0; | 40 | return 0; |
41 | } | 41 | } |
42 | 42 | ||
43 | /* | ||
44 | * handle_IRQ handles all hardware IRQ's. Decoded IRQs should | ||
45 | * not come via this function. Instead, they should provide their | ||
46 | * own 'handler'. Used by platform code implementing C-based 1st | ||
47 | * level decoding. | ||
48 | */ | ||
49 | void handle_IRQ(unsigned int irq, struct pt_regs *regs) | ||
50 | { | ||
51 | struct pt_regs *old_regs = set_irq_regs(regs); | ||
52 | |||
53 | irq_enter(); | ||
54 | |||
55 | /* | ||
56 | * Some hardware gives randomly wrong interrupts. Rather | ||
57 | * than crashing, do something sensible. | ||
58 | */ | ||
59 | if (unlikely(irq >= nr_irqs)) { | ||
60 | pr_warn_ratelimited("Bad IRQ%u\n", irq); | ||
61 | ack_bad_irq(irq); | ||
62 | } else { | ||
63 | generic_handle_irq(irq); | ||
64 | } | ||
65 | |||
66 | irq_exit(); | ||
67 | set_irq_regs(old_regs); | ||
68 | } | ||
69 | |||
70 | void __init set_handle_irq(void (*handle_irq)(struct pt_regs *)) | 43 | void __init set_handle_irq(void (*handle_irq)(struct pt_regs *)) |
71 | { | 44 | { |
72 | if (handle_arch_irq) | 45 | if (handle_arch_irq) |
diff --git a/arch/openrisc/Kconfig b/arch/openrisc/Kconfig index 88e83368bbf5..e5a693b16da2 100644 --- a/arch/openrisc/Kconfig +++ b/arch/openrisc/Kconfig | |||
@@ -8,6 +8,7 @@ config OPENRISC | |||
8 | select OF | 8 | select OF |
9 | select OF_EARLY_FLATTREE | 9 | select OF_EARLY_FLATTREE |
10 | select IRQ_DOMAIN | 10 | select IRQ_DOMAIN |
11 | select HANDLE_DOMAIN_IRQ | ||
11 | select HAVE_MEMBLOCK | 12 | select HAVE_MEMBLOCK |
12 | select ARCH_REQUIRE_GPIOLIB | 13 | select ARCH_REQUIRE_GPIOLIB |
13 | select HAVE_ARCH_TRACEHOOK | 14 | select HAVE_ARCH_TRACEHOOK |
diff --git a/arch/openrisc/include/asm/irq.h b/arch/openrisc/include/asm/irq.h index b84634cc95eb..d9eee0a2b7b4 100644 --- a/arch/openrisc/include/asm/irq.h +++ b/arch/openrisc/include/asm/irq.h | |||
@@ -24,7 +24,6 @@ | |||
24 | 24 | ||
25 | #define NO_IRQ (-1) | 25 | #define NO_IRQ (-1) |
26 | 26 | ||
27 | void handle_IRQ(unsigned int, struct pt_regs *); | ||
28 | extern void set_handle_irq(void (*handle_irq)(struct pt_regs *)); | 27 | extern void set_handle_irq(void (*handle_irq)(struct pt_regs *)); |
29 | 28 | ||
30 | #endif /* __ASM_OPENRISC_IRQ_H__ */ | 29 | #endif /* __ASM_OPENRISC_IRQ_H__ */ |
diff --git a/arch/openrisc/kernel/irq.c b/arch/openrisc/kernel/irq.c index 967eb1430203..35e478a93116 100644 --- a/arch/openrisc/kernel/irq.c +++ b/arch/openrisc/kernel/irq.c | |||
@@ -48,18 +48,6 @@ void __init set_handle_irq(void (*handle_irq)(struct pt_regs *)) | |||
48 | handle_arch_irq = handle_irq; | 48 | handle_arch_irq = handle_irq; |
49 | } | 49 | } |
50 | 50 | ||
51 | void handle_IRQ(unsigned int irq, struct pt_regs *regs) | ||
52 | { | ||
53 | struct pt_regs *old_regs = set_irq_regs(regs); | ||
54 | |||
55 | irq_enter(); | ||
56 | |||
57 | generic_handle_irq(irq); | ||
58 | |||
59 | irq_exit(); | ||
60 | set_irq_regs(old_regs); | ||
61 | } | ||
62 | |||
63 | void __irq_entry do_IRQ(struct pt_regs *regs) | 51 | void __irq_entry do_IRQ(struct pt_regs *regs) |
64 | { | 52 | { |
65 | handle_arch_irq(regs); | 53 | handle_arch_irq(regs); |