]> err.no Git - linux-2.6/blobdiff - kernel/irq/chip.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/mingo/linux-2.6-sched
[linux-2.6] / kernel / irq / chip.c
index 76a9106a0bf4ad2a7a7d5805e1fc00c94522b696..615ce97c6cfd8393e85dbc4fb3b23f0cce762bcb 100644 (file)
@@ -11,6 +11,7 @@
  */
 
 #include <linux/irq.h>
+#include <linux/msi.h>
 #include <linux/module.h>
 #include <linux/interrupt.h>
 #include <linux/kernel_stat.h>
@@ -168,7 +169,7 @@ EXPORT_SYMBOL(set_irq_data);
 /**
  *     set_irq_data - set irq type data for an irq
  *     @irq:   Interrupt number
- *     @data:  Pointer to interrupt specific data
+ *     @entry: Pointer to MSI descriptor data
  *
  *     Set the hardware irq controller data for an irq
  */
@@ -185,6 +186,8 @@ int set_irq_msi(unsigned int irq, struct msi_desc *entry)
        desc = irq_desc + irq;
        spin_lock_irqsave(&desc->lock, flags);
        desc->msi_desc = entry;
+       if (entry)
+               entry->irq = irq;
        spin_unlock_irqrestore(&desc->lock, flags);
        return 0;
 }
@@ -565,10 +568,8 @@ __set_irq_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained,
 
        /* Uninstall? */
        if (handle == handle_bad_irq) {
-               if (desc->chip != &no_irq_chip) {
-                       desc->chip->mask(irq);
-                       desc->chip->ack(irq);
-               }
+               if (desc->chip != &no_irq_chip)
+                       mask_ack_irq(desc, irq);
                desc->status |= IRQ_DISABLED;
                desc->depth = 1;
        }