struct irq_cfg *cfg;                                            \
        struct irq_pin_list *entry;                                     \
                                                                        \
-       BUG_ON(irq >= nr_irqs);                                         \
        cfg = irq_cfg(irq);                                             \
        entry = cfg->irq_2_pin;                                         \
        for (;;) {                                                      \
        struct irq_cfg *cfg;
        struct irq_pin_list *entry;
 
-       BUG_ON(irq >= nr_irqs);
        cfg = irq_cfg(irq);
        entry = cfg->irq_2_pin;
        for (;;) {
        struct irq_cfg *cfg;
        struct irq_pin_list *entry;
 
-       BUG_ON(irq >= nr_irqs);
        /* first time to refer irq_cfg, so with new */
        cfg = irq_cfg_alloc(irq);
        entry = cfg->irq_2_pin;
                                best_guess = irq;
                }
        }
-       BUG_ON(best_guess >= nr_irqs);
        return best_guess;
 }
 
                        irq += nr_ioapic_registers[i++];
                irq += pin;
        }
-       BUG_ON(irq >= nr_irqs);
        return irq;
 }
 
        int cpu;
        struct irq_cfg *cfg;
 
-       BUG_ON((unsigned)irq >= nr_irqs);
        cfg = irq_cfg(irq);
 
        /* Only try and allocate irqs on cpus that are present */
        cpumask_t mask;
        int cpu, vector;
 
-       BUG_ON((unsigned)irq >= nr_irqs);
        cfg = irq_cfg(irq);
        BUG_ON(!cfg->vector);
 
                struct irq_desc *desc;
                struct irq_cfg *cfg;
                irq = __get_cpu_var(vector_irq)[vector];
-               if (irq >= nr_irqs)
-                       continue;
 
                desc = irq_to_desc(irq);
                cfg = irq_cfg(irq);
 
        struct irq_desc *desc;
        unsigned long flags;
 
-       if (irq >= nr_irqs) {
+       desc = irq_to_desc(irq);
+       if (!desc) {
                WARN(1, KERN_ERR "Trying to initialize invalid IRQ%d\n", irq);
                return;
        }
 
        /* Ensure we don't have left over values from a previous use of this irq */
-       desc = irq_to_desc(irq);
        spin_lock_irqsave(&desc->lock, flags);
        desc->status = IRQ_DISABLED;
        desc->chip = &no_irq_chip;
        struct irq_desc *desc;
        unsigned long flags;
 
-       if (irq >= nr_irqs) {
+       desc = __irq_to_desc(irq);
+       if (!desc) {
                WARN(1, KERN_ERR "Trying to cleanup invalid IRQ%d\n", irq);
                return;
        }
 
-       desc = irq_to_desc(irq);
        spin_lock_irqsave(&desc->lock, flags);
        if (desc->action) {
                spin_unlock_irqrestore(&desc->lock, flags);
        struct irq_desc *desc;
        unsigned long flags;
 
-       if (irq >= nr_irqs) {
+       desc = __irq_to_desc(irq);
+       if (!desc) {
                WARN(1, KERN_ERR "Trying to install chip for IRQ%d\n", irq);
                return -EINVAL;
        }
        unsigned long flags;
        int ret = -ENXIO;
 
-       if (irq >= nr_irqs) {
+       desc = __irq_to_desc(irq);
+       if (!desc) {
                printk(KERN_ERR "Trying to set irq type for IRQ%d\n", irq);
                return -ENODEV;
        }
 
-       desc = irq_to_desc(irq);
        if (type == IRQ_TYPE_NONE)
                return 0;
 
        struct irq_desc *desc;
        unsigned long flags;
 
-       if (irq >= nr_irqs) {
+       desc = __irq_to_desc(irq);
+       if (!desc) {
                printk(KERN_ERR
                       "Trying to install controller data for IRQ%d\n", irq);
                return -EINVAL;
        }
 
-       desc = irq_to_desc(irq);
        spin_lock_irqsave(&desc->lock, flags);
        desc->handler_data = data;
        spin_unlock_irqrestore(&desc->lock, flags);
        struct irq_desc *desc;
        unsigned long flags;
 
-       if (irq >= nr_irqs) {
+       desc = __irq_to_desc(irq);
+       if (!desc) {
                printk(KERN_ERR
                       "Trying to install msi data for IRQ%d\n", irq);
                return -EINVAL;
        }
-       desc = irq_to_desc(irq);
+
        spin_lock_irqsave(&desc->lock, flags);
        desc->msi_desc = entry;
        if (entry)
        struct irq_desc *desc;
        unsigned long flags;
 
-       desc = irq_to_desc(irq);
-       if (irq >= nr_irqs || !desc->chip) {
+       desc = __irq_to_desc(irq);
+       if (!desc) {
+               printk(KERN_ERR
+                      "Trying to install chip data for IRQ%d\n", irq);
+               return -EINVAL;
+       }
+
+       if (!desc->chip) {
                printk(KERN_ERR "BUG: bad set_irq_chip_data(IRQ#%d)\n", irq);
                return -EINVAL;
        }
        struct irq_desc *desc;
        unsigned long flags;
 
-       if (irq >= nr_irqs) {
+       desc = __irq_to_desc(irq);
+       if (!desc) {
                printk(KERN_ERR
                       "Trying to install type control for IRQ%d\n", irq);
                return;
        }
 
-       desc = irq_to_desc(irq);
-
        if (!handle)
                handle = handle_bad_irq;
        else if (desc->chip == &no_irq_chip) {
        struct irq_desc *desc;
        unsigned long flags;
 
-       if (irq >= nr_irqs) {
+       desc = __irq_to_desc(irq);
+       if (!desc) {
                printk(KERN_ERR "Trying to mark IRQ%d non-probeable\n", irq);
 
                return;
        }
 
-       desc = irq_to_desc(irq);
-
        spin_lock_irqsave(&desc->lock, flags);
        desc->status |= IRQ_NOPROBE;
        spin_unlock_irqrestore(&desc->lock, flags);
        struct irq_desc *desc;
        unsigned long flags;
 
-       if (irq >= nr_irqs) {
+       desc = __irq_to_desc(irq);
+       if (!desc) {
                printk(KERN_ERR "Trying to mark IRQ%d probeable\n", irq);
 
                return;
        }
 
-       desc = irq_to_desc(irq);
-
        spin_lock_irqsave(&desc->lock, flags);
        desc->status &= ~IRQ_NOPROBE;
        spin_unlock_irqrestore(&desc->lock, flags);
 
  */
 void synchronize_irq(unsigned int irq)
 {
-       struct irq_desc *desc = irq_to_desc(irq);
+       struct irq_desc *desc = __irq_to_desc(irq);
        unsigned int status;
 
-       if (irq >= nr_irqs)
+       if (!desc)
                return;
 
        do {
  */
 void disable_irq_nosync(unsigned int irq)
 {
-       struct irq_desc *desc = irq_to_desc(irq);
+       struct irq_desc *desc;
        unsigned long flags;
 
-       if (irq >= nr_irqs)
+       desc = __irq_to_desc(irq);
+       if (!desc)
                return;
 
        spin_lock_irqsave(&desc->lock, flags);
  */
 void disable_irq(unsigned int irq)
 {
-       struct irq_desc *desc = irq_to_desc(irq);
+       struct irq_desc *desc;
 
-       if (irq >= nr_irqs)
+       desc = __irq_to_desc(irq);
+       if (!desc)
                return;
 
        disable_irq_nosync(irq);
  */
 void enable_irq(unsigned int irq)
 {
-       struct irq_desc *desc = irq_to_desc(irq);
+       struct irq_desc *desc;
        unsigned long flags;
 
-       if (irq >= nr_irqs)
+       desc = __irq_to_desc(irq);
+       if (!desc)
                return;
 
        spin_lock_irqsave(&desc->lock, flags);
  */
 int can_request_irq(unsigned int irq, unsigned long irqflags)
 {
-       struct irq_desc *desc = irq_to_desc(irq);
+       struct irq_desc *desc;
        struct irqaction *action;
 
-       if (irq >= nr_irqs || desc->status & IRQ_NOREQUEST)
+       desc = __irq_to_desc(irq);
+       if (!desc)
+               return 0;
+
+       if (desc->status & IRQ_NOREQUEST)
                return 0;
 
        action = desc->action;
  */
 int setup_irq(unsigned int irq, struct irqaction *new)
 {
-       struct irq_desc *desc = irq_to_desc(irq);
+       struct irq_desc *desc;
        struct irqaction *old, **p;
        const char *old_name = NULL;
        unsigned long flags;
        int shared = 0;
        int ret;
 
-       if (irq >= nr_irqs)
+       desc = __irq_to_desc(irq);
+       if (!desc)
                return -EINVAL;
 
        if (desc->chip == &no_irq_chip)
        unsigned long flags;
 
        WARN_ON(in_interrupt());
-       if (irq >= nr_irqs)
+
+       desc = __irq_to_desc(irq);
+       if (!desc)
                return;
 
-       desc = irq_to_desc(irq);
        spin_lock_irqsave(&desc->lock, flags);
        p = &desc->action;
        for (;;) {
         */
        if ((irqflags & IRQF_SHARED) && !dev_id)
                return -EINVAL;
-       if (irq >= nr_irqs)
+
+       desc = __irq_to_desc(irq);
+       if (!desc)
                return -EINVAL;
-       desc = irq_to_desc(irq);
+
        if (desc->status & IRQ_NOREQUEST)
                return -EINVAL;
        if (!handler)