]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/x86/kernel/irq_32.c
generic: sparse irqs: use irq_desc() together with dyn_array, instead of irq_desc[]
[linux-2.6-omap-h63xx.git] / arch / x86 / kernel / irq_32.c
index b71e02d42f4fd288a21a51f256c422b6d4d74d83..ede513be517dfb606cb32bb6a225254d4b0837f2 100644 (file)
@@ -224,9 +224,9 @@ unsigned int do_IRQ(struct pt_regs *regs)
        struct pt_regs *old_regs;
        /* high bit used in ret_from_ code */
        int overflow, irq = ~regs->orig_ax;
-       struct irq_desc *desc = irq_desc + irq;
+       struct irq_desc *desc = irq_to_desc(irq);
 
-       if (unlikely((unsigned)irq >= NR_IRQS)) {
+       if (unlikely((unsigned)irq >= nr_irqs)) {
                printk(KERN_EMERG "%s: cannot handle IRQ %d\n",
                                        __func__, irq);
                BUG();
@@ -271,17 +271,18 @@ int show_interrupts(struct seq_file *p, void *v)
                seq_putc(p, '\n');
        }
 
-       if (i < NR_IRQS) {
+       if (i < nr_irqs) {
                unsigned any_count = 0;
+               struct irq_desc *desc = irq_to_desc(i);
 
-               spin_lock_irqsave(&irq_desc[i].lock, flags);
+               spin_lock_irqsave(&desc->lock, flags);
 #ifndef CONFIG_SMP
                any_count = kstat_irqs(i);
 #else
                for_each_online_cpu(j)
                        any_count |= kstat_cpu(j).irqs[i];
 #endif
-               action = irq_desc[i].action;
+               action = desc->action;
                if (!action && !any_count)
                        goto skip;
                seq_printf(p, "%3d: ",i);
@@ -291,8 +292,8 @@ int show_interrupts(struct seq_file *p, void *v)
                for_each_online_cpu(j)
                        seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
 #endif
-               seq_printf(p, " %8s", irq_desc[i].chip->name);
-               seq_printf(p, "-%-8s", irq_desc[i].name);
+               seq_printf(p, " %8s", desc->chip->name);
+               seq_printf(p, "-%-8s", desc->name);
 
                if (action) {
                        seq_printf(p, "  %s", action->name);
@@ -302,8 +303,8 @@ int show_interrupts(struct seq_file *p, void *v)
 
                seq_putc(p, '\n');
 skip:
-               spin_unlock_irqrestore(&irq_desc[i].lock, flags);
-       } else if (i == NR_IRQS) {
+               spin_unlock_irqrestore(&desc->lock, flags);
+       } else if (i == nr_irqs) {
                seq_printf(p, "NMI: ");
                for_each_online_cpu(j)
                        seq_printf(p, "%10u ", nmi_count(j));
@@ -396,19 +397,22 @@ void fixup_irqs(cpumask_t map)
        unsigned int irq;
        static int warned;
 
-       for (irq = 0; irq < NR_IRQS; irq++) {
+       for (irq = 0; irq < nr_irqs; irq++) {
                cpumask_t mask;
+               struct irq_desc *desc;
+
                if (irq == 2)
                        continue;
 
-               cpus_and(mask, irq_desc[irq].affinity, map);
+               desc = irq_to_desc(irq);
+               cpus_and(mask, desc->affinity, map);
                if (any_online_cpu(mask) == NR_CPUS) {
                        printk("Breaking affinity for irq %i\n", irq);
                        mask = map;
                }
-               if (irq_desc[irq].chip->set_affinity)
-                       irq_desc[irq].chip->set_affinity(irq, mask);
-               else if (irq_desc[irq].action && !(warned++))
+               if (desc->chip->set_affinity)
+                       desc->chip->set_affinity(irq, mask);
+               else if (desc->action && !(warned++))
                        printk("Cannot set affinity for irq %i\n", irq);
        }