aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/kernel
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2011-01-15 15:33:40 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2011-01-15 15:33:40 -0500
commit16c1020362083b320868c0deef492249089c3cd3 (patch)
treeff200df3502e6010745713275d69fd0a07e399cf /arch/arm/kernel
parent65e5d002b5ad220db2bf9557f53de5a98f7dab86 (diff)
parentbbba75606963c82febf7bd2761ea848ac5d1a1bb (diff)
Merge branch 'devel-stable' of master.kernel.org:/home/rmk/linux-2.6-arm
* 'devel-stable' of master.kernel.org:/home/rmk/linux-2.6-arm: (161 commits) ARM: pxa: fix building issue of missing physmap.h ARM: mmp: PXA910 drive strength FAST using wrong value ARM: mmp: MMP2 drive strength FAST using wrong value ARM: pxa: fix recursive calls in pxa_low_gpio_chip AT91: Support for gsia18s board AT91: Acme Systems FOX Board G20 board files AT91: board-sam9m10g45ek.c: Remove duplicate inclusion of mach/hardware.h ARM: pxa: fix suspend/resume array index miscalculation ARM: pxa: use cpu_has_ipr() consistently in irq.c ARM: pxa: remove unused variable in clock-pxa3xx.c ARM: pxa: fix warning in zeus.c ARM: sa1111: fix typo in sa1111_retrigger_lowirq() ARM mxs: clkdev related compile fixes ARM i.MX mx31_3ds: Fix MC13783 regulator names ARM: plat-stmp3xxx: irq_data conversion. ARM: plat-spear: irq_data conversion. ARM: plat-orion: irq_data conversion. ARM: plat-omap: irq_data conversion. ARM: plat-nomadik: irq_data conversion. ARM: plat-mxc: irq_data conversion. ... Fix up trivial conflict in arch/arm/plat-omap/gpio.c (Lennert Buytenhek's irq_data conversion clashing with some omap irq updates)
Diffstat (limited to 'arch/arm/kernel')
-rw-r--r--arch/arm/kernel/ecard.c28
-rw-r--r--arch/arm/kernel/irq.c17
2 files changed, 24 insertions, 21 deletions
diff --git a/arch/arm/kernel/ecard.c b/arch/arm/kernel/ecard.c
index eed2f795e1b3..2ad62df37730 100644
--- a/arch/arm/kernel/ecard.c
+++ b/arch/arm/kernel/ecard.c
@@ -443,40 +443,40 @@ static expansioncard_ops_t ecard_default_ops = {
443 * 443 *
444 * They are not meant to be called directly, but via enable/disable_irq. 444 * They are not meant to be called directly, but via enable/disable_irq.
445 */ 445 */
446static void ecard_irq_unmask(unsigned int irqnr) 446static void ecard_irq_unmask(struct irq_data *d)
447{ 447{
448 ecard_t *ec = slot_to_ecard(irqnr - 32); 448 ecard_t *ec = slot_to_ecard(d->irq - 32);
449 449
450 if (ec) { 450 if (ec) {
451 if (!ec->ops) 451 if (!ec->ops)
452 ec->ops = &ecard_default_ops; 452 ec->ops = &ecard_default_ops;
453 453
454 if (ec->claimed && ec->ops->irqenable) 454 if (ec->claimed && ec->ops->irqenable)
455 ec->ops->irqenable(ec, irqnr); 455 ec->ops->irqenable(ec, d->irq);
456 else 456 else
457 printk(KERN_ERR "ecard: rejecting request to " 457 printk(KERN_ERR "ecard: rejecting request to "
458 "enable IRQs for %d\n", irqnr); 458 "enable IRQs for %d\n", d->irq);
459 } 459 }
460} 460}
461 461
462static void ecard_irq_mask(unsigned int irqnr) 462static void ecard_irq_mask(struct irq_data *d)
463{ 463{
464 ecard_t *ec = slot_to_ecard(irqnr - 32); 464 ecard_t *ec = slot_to_ecard(d->irq - 32);
465 465
466 if (ec) { 466 if (ec) {
467 if (!ec->ops) 467 if (!ec->ops)
468 ec->ops = &ecard_default_ops; 468 ec->ops = &ecard_default_ops;
469 469
470 if (ec->ops && ec->ops->irqdisable) 470 if (ec->ops && ec->ops->irqdisable)
471 ec->ops->irqdisable(ec, irqnr); 471 ec->ops->irqdisable(ec, d->irq);
472 } 472 }
473} 473}
474 474
475static struct irq_chip ecard_chip = { 475static struct irq_chip ecard_chip = {
476 .name = "ECARD", 476 .name = "ECARD",
477 .ack = ecard_irq_mask, 477 .irq_ack = ecard_irq_mask,
478 .mask = ecard_irq_mask, 478 .irq_mask = ecard_irq_mask,
479 .unmask = ecard_irq_unmask, 479 .irq_unmask = ecard_irq_unmask,
480}; 480};
481 481
482void ecard_enablefiq(unsigned int fiqnr) 482void ecard_enablefiq(unsigned int fiqnr)
@@ -551,7 +551,7 @@ static void ecard_check_lockup(struct irq_desc *desc)
551 printk(KERN_ERR "\nInterrupt lockup detected - " 551 printk(KERN_ERR "\nInterrupt lockup detected - "
552 "disabling all expansion card interrupts\n"); 552 "disabling all expansion card interrupts\n");
553 553
554 desc->chip->mask(IRQ_EXPANSIONCARD); 554 desc->irq_data.chip->irq_mask(&desc->irq_data);
555 ecard_dump_irq_state(); 555 ecard_dump_irq_state();
556 } 556 }
557 } else 557 } else
@@ -574,7 +574,7 @@ ecard_irq_handler(unsigned int irq, struct irq_desc *desc)
574 ecard_t *ec; 574 ecard_t *ec;
575 int called = 0; 575 int called = 0;
576 576
577 desc->chip->mask(irq); 577 desc->irq_data.chip->irq_mask(&desc->irq_data);
578 for (ec = cards; ec; ec = ec->next) { 578 for (ec = cards; ec; ec = ec->next) {
579 int pending; 579 int pending;
580 580
@@ -591,7 +591,7 @@ ecard_irq_handler(unsigned int irq, struct irq_desc *desc)
591 called ++; 591 called ++;
592 } 592 }
593 } 593 }
594 desc->chip->unmask(irq); 594 desc->irq_data.chip->irq_unmask(&desc->irq_data);
595 595
596 if (called == 0) 596 if (called == 0)
597 ecard_check_lockup(desc); 597 ecard_check_lockup(desc);
diff --git a/arch/arm/kernel/irq.c b/arch/arm/kernel/irq.c
index 8135438b8818..28536e352deb 100644
--- a/arch/arm/kernel/irq.c
+++ b/arch/arm/kernel/irq.c
@@ -88,7 +88,7 @@ int show_interrupts(struct seq_file *p, void *v)
88 seq_printf(p, "%*d: ", prec, i); 88 seq_printf(p, "%*d: ", prec, i);
89 for_each_present_cpu(cpu) 89 for_each_present_cpu(cpu)
90 seq_printf(p, "%10u ", kstat_irqs_cpu(i, cpu)); 90 seq_printf(p, "%10u ", kstat_irqs_cpu(i, cpu));
91 seq_printf(p, " %10s", desc->chip->name ? : "-"); 91 seq_printf(p, " %10s", desc->irq_data.chip->name ? : "-");
92 seq_printf(p, " %s", action->name); 92 seq_printf(p, " %s", action->name);
93 for (action = action->next; action; action = action->next) 93 for (action = action->next; action; action = action->next)
94 seq_printf(p, ", %s", action->name); 94 seq_printf(p, ", %s", action->name);
@@ -181,10 +181,11 @@ int __init arch_probe_nr_irqs(void)
181 181
182static void route_irq(struct irq_desc *desc, unsigned int irq, unsigned int cpu) 182static void route_irq(struct irq_desc *desc, unsigned int irq, unsigned int cpu)
183{ 183{
184 pr_debug("IRQ%u: moving from cpu%u to cpu%u\n", irq, desc->node, cpu); 184 pr_debug("IRQ%u: moving from cpu%u to cpu%u\n", irq, desc->irq_data.node, cpu);
185 185
186 raw_spin_lock_irq(&desc->lock); 186 raw_spin_lock_irq(&desc->lock);
187 desc->chip->set_affinity(irq, cpumask_of(cpu)); 187 desc->irq_data.chip->irq_set_affinity(&desc->irq_data,
188 cpumask_of(cpu), false);
188 raw_spin_unlock_irq(&desc->lock); 189 raw_spin_unlock_irq(&desc->lock);
189} 190}
190 191
@@ -199,16 +200,18 @@ void migrate_irqs(void)
199 struct irq_desc *desc; 200 struct irq_desc *desc;
200 201
201 for_each_irq_desc(i, desc) { 202 for_each_irq_desc(i, desc) {
202 if (desc->node == cpu) { 203 struct irq_data *d = &desc->irq_data;
203 unsigned int newcpu = cpumask_any_and(desc->affinity, 204
205 if (d->node == cpu) {
206 unsigned int newcpu = cpumask_any_and(d->affinity,
204 cpu_online_mask); 207 cpu_online_mask);
205 if (newcpu >= nr_cpu_ids) { 208 if (newcpu >= nr_cpu_ids) {
206 if (printk_ratelimit()) 209 if (printk_ratelimit())
207 printk(KERN_INFO "IRQ%u no longer affine to CPU%u\n", 210 printk(KERN_INFO "IRQ%u no longer affine to CPU%u\n",
208 i, cpu); 211 i, cpu);
209 212
210 cpumask_setall(desc->affinity); 213 cpumask_setall(d->affinity);
211 newcpu = cpumask_any_and(desc->affinity, 214 newcpu = cpumask_any_and(d->affinity,
212 cpu_online_mask); 215 cpu_online_mask);
213 } 216 }
214 217