diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-09-01 17:33:35 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-09-01 17:33:35 -0400 |
commit | 17e6b00ac422b49d44a0b8d98402a211f726282d (patch) | |
tree | c7e9143030d20625a0bd94e12ddaf9421890c375 /arch/mn10300 | |
parent | 5e359bf2219d8622eb0931701e45af55db323228 (diff) | |
parent | e324c4dc4a5991d5b1171f434884a4026345e4b4 (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:
"This updated pull request does not contain the last few GIC related
patches which were reported to cause a regression. There is a fix
available, but I let it breed for a couple of days first.
The irq departement provides:
- new infrastructure to support non PCI based MSI interrupts
- a couple of new irq chip drivers
- the usual pile of fixlets and updates to irq chip drivers
- preparatory changes for removal of the irq argument from interrupt
flow handlers
- preparatory changes to remove IRQF_VALID"
* 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (129 commits)
irqchip/imx-gpcv2: IMX GPCv2 driver for wakeup sources
irqchip: Add bcm2836 interrupt controller for Raspberry Pi 2
irqchip: Add documentation for the bcm2836 interrupt controller
irqchip/bcm2835: Add support for being used as a second level controller
irqchip/bcm2835: Refactor handle_IRQ() calls out of MAKE_HWIRQ
PCI: xilinx: Fix typo in function name
irqchip/gic: Ensure gic_cpu_if_up/down() programs correct GIC instance
irqchip/gic: Only allow the primary GIC to set the CPU map
PCI/MSI: pci-xgene-msi: Consolidate chained IRQ handler install/remove
unicore32/irq: Prepare puv3_gpio_handler for irq argument removal
tile/pci_gx: Prepare trio_handle_level_irq for irq argument removal
m68k/irq: Prepare irq handlers for irq argument removal
C6X/megamode-pic: Prepare megamod_irq_cascade for irq argument removal
blackfin: Prepare irq handlers for irq argument removal
arc/irq: Prepare idu_cascade_isr for irq argument removal
sparc/irq: Use access helper irq_data_get_affinity_mask()
sparc/irq: Use helper irq_data_get_irq_handler_data()
parisc/irq: Use access helper irq_data_get_affinity_mask()
mn10300/irq: Use access helper irq_data_get_affinity_mask()
irqchip/i8259: Prepare i8259_irq_dispatch for irq argument removal
...
Diffstat (limited to 'arch/mn10300')
-rw-r--r-- | arch/mn10300/kernel/cevt-mn10300.c | 2 | ||||
-rw-r--r-- | arch/mn10300/kernel/irq.c | 13 |
2 files changed, 8 insertions, 7 deletions
diff --git a/arch/mn10300/kernel/cevt-mn10300.c b/arch/mn10300/kernel/cevt-mn10300.c index 3aae9f5a98aa..d9b34dd44f04 100644 --- a/arch/mn10300/kernel/cevt-mn10300.c +++ b/arch/mn10300/kernel/cevt-mn10300.c | |||
@@ -116,7 +116,7 @@ int __init init_clockevents(void) | |||
116 | { | 116 | { |
117 | struct irq_data *data; | 117 | struct irq_data *data; |
118 | data = irq_get_irq_data(cd->irq); | 118 | data = irq_get_irq_data(cd->irq); |
119 | cpumask_copy(data->affinity, cpumask_of(cpu)); | 119 | cpumask_copy(irq_data_get_affinity_mask(data), cpumask_of(cpu)); |
120 | iact->flags |= IRQF_NOBALANCING; | 120 | iact->flags |= IRQF_NOBALANCING; |
121 | } | 121 | } |
122 | #endif | 122 | #endif |
diff --git a/arch/mn10300/kernel/irq.c b/arch/mn10300/kernel/irq.c index 480de70f4059..c716437baa2c 100644 --- a/arch/mn10300/kernel/irq.c +++ b/arch/mn10300/kernel/irq.c | |||
@@ -87,7 +87,8 @@ static void mn10300_cpupic_mask_ack(struct irq_data *d) | |||
87 | tmp2 = GxICR(irq); | 87 | tmp2 = GxICR(irq); |
88 | 88 | ||
89 | irq_affinity_online[irq] = | 89 | irq_affinity_online[irq] = |
90 | cpumask_any_and(d->affinity, cpu_online_mask); | 90 | cpumask_any_and(irq_data_get_affinity_mask(d), |
91 | cpu_online_mask); | ||
91 | CROSS_GxICR(irq, irq_affinity_online[irq]) = | 92 | CROSS_GxICR(irq, irq_affinity_online[irq]) = |
92 | (tmp & (GxICR_LEVEL | GxICR_ENABLE)) | GxICR_DETECT; | 93 | (tmp & (GxICR_LEVEL | GxICR_ENABLE)) | GxICR_DETECT; |
93 | tmp = CROSS_GxICR(irq, irq_affinity_online[irq]); | 94 | tmp = CROSS_GxICR(irq, irq_affinity_online[irq]); |
@@ -124,7 +125,7 @@ static void mn10300_cpupic_unmask_clear(struct irq_data *d) | |||
124 | } else { | 125 | } else { |
125 | tmp = GxICR(irq); | 126 | tmp = GxICR(irq); |
126 | 127 | ||
127 | irq_affinity_online[irq] = cpumask_any_and(d->affinity, | 128 | irq_affinity_online[irq] = cpumask_any_and(irq_data_get_affinity_mask(d), |
128 | cpu_online_mask); | 129 | cpu_online_mask); |
129 | CROSS_GxICR(irq, irq_affinity_online[irq]) = (tmp & GxICR_LEVEL) | GxICR_ENABLE | GxICR_DETECT; | 130 | CROSS_GxICR(irq, irq_affinity_online[irq]) = (tmp & GxICR_LEVEL) | GxICR_ENABLE | GxICR_DETECT; |
130 | tmp = CROSS_GxICR(irq, irq_affinity_online[irq]); | 131 | tmp = CROSS_GxICR(irq, irq_affinity_online[irq]); |
@@ -316,15 +317,16 @@ void migrate_irqs(void) | |||
316 | self = smp_processor_id(); | 317 | self = smp_processor_id(); |
317 | for (irq = 0; irq < NR_IRQS; irq++) { | 318 | for (irq = 0; irq < NR_IRQS; irq++) { |
318 | struct irq_data *data = irq_get_irq_data(irq); | 319 | struct irq_data *data = irq_get_irq_data(irq); |
320 | struct cpumask *mask = irq_data_get_affinity_mask(data); | ||
319 | 321 | ||
320 | if (irqd_is_per_cpu(data)) | 322 | if (irqd_is_per_cpu(data)) |
321 | continue; | 323 | continue; |
322 | 324 | ||
323 | if (cpumask_test_cpu(self, data->affinity) && | 325 | if (cpumask_test_cpu(self, mask) && |
324 | !cpumask_intersects(&irq_affinity[irq], cpu_online_mask)) { | 326 | !cpumask_intersects(&irq_affinity[irq], cpu_online_mask)) { |
325 | int cpu_id; | 327 | int cpu_id; |
326 | cpu_id = cpumask_first(cpu_online_mask); | 328 | cpu_id = cpumask_first(cpu_online_mask); |
327 | cpumask_set_cpu(cpu_id, data->affinity); | 329 | cpumask_set_cpu(cpu_id, mask); |
328 | } | 330 | } |
329 | /* We need to operate irq_affinity_online atomically. */ | 331 | /* We need to operate irq_affinity_online atomically. */ |
330 | arch_local_cli_save(flags); | 332 | arch_local_cli_save(flags); |
@@ -335,8 +337,7 @@ void migrate_irqs(void) | |||
335 | GxICR(irq) = x & GxICR_LEVEL; | 337 | GxICR(irq) = x & GxICR_LEVEL; |
336 | tmp = GxICR(irq); | 338 | tmp = GxICR(irq); |
337 | 339 | ||
338 | new = cpumask_any_and(data->affinity, | 340 | new = cpumask_any_and(mask, cpu_online_mask); |
339 | cpu_online_mask); | ||
340 | irq_affinity_online[irq] = new; | 341 | irq_affinity_online[irq] = new; |
341 | 342 | ||
342 | CROSS_GxICR(irq, new) = | 343 | CROSS_GxICR(irq, new) = |