static void cpu_set_affinity_irq(unsigned int irq, const struct cpumask *dest)
  {
 -      if (cpu_check_affinity(irq, dest))
 +      int cpu_dest;
 +
 +      cpu_dest = cpu_check_affinity(irq, dest);
 +      if (cpu_dest < 0)
                return;
  
-       cpumask_copy(&irq_desc[irq].affinity, &cpumask_of_cpu(cpu_dest));
 -      cpumask_copy(irq_desc[irq].affinity, dest);
++      cpumask_copy(&irq_desc[irq].affinity, dest);
  }
  #endif
  
 
  
        for (i = 0; i < count; i++) {
                desc[i].irq = i;
+               init_alloc_desc_masks(&desc[i], 0, true);
 +              desc[i].kstat_irqs = kstat_irqs_all[i];
        }
- 
        return arch_early_irq_init();
  }
  
 
  
  extern struct lock_class_key irq_desc_lock_class;
  extern void init_kstat_irqs(struct irq_desc *desc, int cpu, int nr);
 +extern void clear_kstat_irqs(struct irq_desc *desc);
  extern spinlock_t sparse_irq_lock;
+ 
+ #ifdef CONFIG_SPARSE_IRQ
+ /* irq_desc_ptrs allocated at boot time */
+ extern struct irq_desc **irq_desc_ptrs;
+ #else
+ /* irq_desc_ptrs is a fixed size array */
  extern struct irq_desc *irq_desc_ptrs[NR_IRQS];
+ #endif
  
  #ifdef CONFIG_PROC_FS
  extern void register_irq_proc(unsigned int irq, struct irq_desc *desc);