Merge branch 'x86/irq' into x86/apic
authorH. Peter Anvin <hpa@zytor.com>
Tue, 23 Feb 2010 00:20:34 +0000 (16:20 -0800)
committerH. Peter Anvin <hpa@zytor.com>
Tue, 23 Feb 2010 00:20:34 +0000 (16:20 -0800)
Merge reason:
Conflicts in arch/x86/kernel/apic/io_apic.c

Resolved Conflicts:
arch/x86/kernel/apic/io_apic.c

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
1  2 
arch/x86/kernel/apic/io_apic.c
arch/x86/kernel/smpboot.c

index d55e43d352b30adf193de5ec57eb1beccd95c5a3,527390cd6115d69bdfd39aa0de04962eda12cf15..979589881c809ce6bfa2ea20f00ce6df0a40976c
@@@ -3221,14 -3276,11 +3278,11 @@@ unsigned int create_irq_nr(unsigned in
                        irq = new;
                break;
        }
 -      spin_unlock_irqrestore(&vector_lock, flags);
 +      raw_spin_unlock_irqrestore(&vector_lock, flags);
  
-       if (irq > 0) {
-               dynamic_irq_init(irq);
-               /* restore it, in case dynamic_irq_init clear it */
-               if (desc_new)
-                       desc_new->chip_data = cfg_new;
-       }
+       if (irq > 0)
+               dynamic_irq_init_keep_chip_data(irq);
        return irq;
  }
  
@@@ -3250,20 -3302,13 +3304,13 @@@ int create_irq(void
  void destroy_irq(unsigned int irq)
  {
        unsigned long flags;
-       struct irq_cfg *cfg;
-       struct irq_desc *desc;
  
-       /* store it, in case dynamic_irq_cleanup clear it */
-       desc = irq_to_desc(irq);
-       cfg = desc->chip_data;
-       dynamic_irq_cleanup(irq);
-       /* connect back irq_cfg */
-       desc->chip_data = cfg;
+       dynamic_irq_cleanup_keep_chip_data(irq);
  
        free_irte(irq);
 -      spin_lock_irqsave(&vector_lock, flags);
 +      raw_spin_lock_irqsave(&vector_lock, flags);
-       __clear_irq_vector(irq, cfg);
+       __clear_irq_vector(irq, get_irq_chip_data(irq));
 -      spin_unlock_irqrestore(&vector_lock, flags);
 +      raw_spin_unlock_irqrestore(&vector_lock, flags);
  }
  
  /*
Simple merge