powerpc: core irq_data conversion.
authorLennert Buytenhek <buytenh@wantstofly.org>
Mon, 7 Mar 2011 14:00:20 +0000 (14:00 +0000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Thu, 10 Mar 2011 00:04:04 +0000 (11:04 +1100)
Signed-off-by: Lennert Buytenhek <buytenh@secretlab.ca>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/kernel/irq.c
arch/powerpc/kernel/machine_kexec.c

index 8a958ca26ac2e59422a260435c046415f2bafb2b..0a5570338b96c6bef5bdda5769e0c5be066b2cda 100644 (file)
@@ -237,6 +237,7 @@ int show_interrupts(struct seq_file *p, void *v)
        int i = *(loff_t *) v, j, prec;
        struct irqaction *action;
        struct irq_desc *desc;
+       struct irq_chip *chip;
 
        if (i > nr_irqs)
                return 0;
@@ -270,8 +271,9 @@ int show_interrupts(struct seq_file *p, void *v)
        for_each_online_cpu(j)
                seq_printf(p, "%10u ", kstat_irqs_cpu(i, j));
 
-       if (desc->chip)
-               seq_printf(p, "  %-16s", desc->chip->name);
+       chip = get_irq_desc_chip(desc);
+       if (chip)
+               seq_printf(p, "  %-16s", chip->name);
        else
                seq_printf(p, "  %-16s", "None");
        seq_printf(p, " %-8s", (desc->status & IRQ_LEVEL) ? "Level" : "Edge");
@@ -313,6 +315,8 @@ void fixup_irqs(const struct cpumask *map)
        alloc_cpumask_var(&mask, GFP_KERNEL);
 
        for_each_irq(irq) {
+               struct irq_chip *chip;
+
                desc = irq_to_desc(irq);
                if (!desc)
                        continue;
@@ -320,13 +324,15 @@ void fixup_irqs(const struct cpumask *map)
                if (desc->status & IRQ_PER_CPU)
                        continue;
 
-               cpumask_and(mask, desc->affinity, map);
+               chip = get_irq_desc_chip(desc);
+
+               cpumask_and(mask, desc->irq_data.affinity, map);
                if (cpumask_any(mask) >= nr_cpu_ids) {
                        printk("Breaking affinity for irq %i\n", irq);
                        cpumask_copy(mask, map);
                }
-               if (desc->chip->set_affinity)
-                       desc->chip->set_affinity(irq, mask);
+               if (chip->irq_set_affinity)
+                       chip->irq_set_affinity(&desc->irq_data, mask, true);
                else if (desc->action && !(warned++))
                        printk("Cannot set affinity for irq %i\n", irq);
        }
@@ -1145,11 +1151,14 @@ static int virq_debug_show(struct seq_file *m, void *private)
                raw_spin_lock_irqsave(&desc->lock, flags);
 
                if (desc->action && desc->action->handler) {
+                       struct irq_chip *chip;
+
                        seq_printf(m, "%5d  ", i);
                        seq_printf(m, "0x%05lx  ", virq_to_hw(i));
 
-                       if (desc->chip && desc->chip->name)
-                               p = desc->chip->name;
+                       chip = get_irq_desc_chip(desc);
+                       if (chip && chip->name)
+                               p = chip->name;
                        else
                                p = none;
                        seq_printf(m, "%-15s  ", p);
index 49a170af81456ce722fa58cd70e5980370f5f70b..976de37fe5b304b63baa5ddd9998ae761a960072 100644 (file)
@@ -26,20 +26,23 @@ void machine_kexec_mask_interrupts(void) {
 
        for_each_irq(i) {
                struct irq_desc *desc = irq_to_desc(i);
+               struct irq_chip *chip;
 
-               if (!desc || !desc->chip)
+               if (!desc)
                        continue;
 
-               if (desc->chip->eoi &&
-                   desc->status & IRQ_INPROGRESS)
-                       desc->chip->eoi(i);
+               chip = get_irq_desc_chip(desc);
+               if (!chip)
+                       continue;
+
+               if (chip->irq_eoi && desc->status & IRQ_INPROGRESS)
+                       chip->irq_eoi(&desc->irq_data);
 
-               if (desc->chip->mask)
-                       desc->chip->mask(i);
+               if (chip->irq_mask)
+                       chip->irq_mask(&desc->irq_data);
 
-               if (desc->chip->disable &&
-                   !(desc->status & IRQ_DISABLED))
-                       desc->chip->disable(i);
+               if (chip->irq_disable && !(desc->status & IRQ_DISABLED))
+                       chip->irq_disable(&desc->irq_data);
        }
 }