]> xenbits.xensource.com Git - legacy/linux-2.6.18-xen.git/commitdiff
linux: remove xen specific member from pci_dev
authorKeir Fraser <keir.fraser@citrix.com>
Wed, 4 Feb 2009 12:25:09 +0000 (12:25 +0000)
committerKeir Fraser <keir.fraser@citrix.com>
Wed, 4 Feb 2009 12:25:09 +0000 (12:25 +0000)
Move msi related variable irq_old out of struct pci_dev. This is
logically more consistent and has the additional benefit that xen
kernel and vanilla kernel now have the same pci_dev layout

Signed-off-by: Qing He <qing.he@intel.com>
drivers/pci/msi-xen.c
include/linux/pci.h

index 759bf547325d249605b3ddc6a30e4db883c3b6f8..1bb17ac484e4b74d32cafd6c362094cbbb3bb549 100644 (file)
@@ -44,6 +44,8 @@ struct msi_dev_list {
        struct list_head pirq_list_head;
        /* Used for saving/restoring MSI-X tables */
        void __iomem *mask_base;
+       /* Store default pre-assigned irq */
+       unsigned int default_irq;
 };
 
 struct msi_pirq_entry {
@@ -589,6 +591,7 @@ int pci_enable_msi(struct pci_dev* dev)
 {
        struct pci_bus *bus;
        int pos, temp, status = -EINVAL;
+       struct msi_dev_list *msi_dev_entry = get_msi_dev_pirq_list(dev);
 
        if (!pci_msi_enable || !dev)
                return status;
@@ -615,7 +618,7 @@ int pci_enable_msi(struct pci_dev* dev)
                        return ret;
 
                dev->irq = evtchn_map_pirq(-1, dev->irq);
-               dev->irq_old = temp;
+               msi_dev_entry->default_irq = temp;
 
                return ret;
        }
@@ -638,8 +641,8 @@ int pci_enable_msi(struct pci_dev* dev)
 
        status = msi_capability_init(dev);
        if ( !status )
-               dev->irq_old = temp;
-    else
+               msi_dev_entry->default_irq = temp;
+       else
                dev->irq = temp;
 
        return status;
@@ -650,6 +653,7 @@ void pci_disable_msi(struct pci_dev* dev)
 {
        int pos;
        int pirq;
+       struct msi_dev_list *msi_dev_entry = get_msi_dev_pirq_list(dev);
 
        if (!pci_msi_enable)
                return;
@@ -660,7 +664,7 @@ void pci_disable_msi(struct pci_dev* dev)
        if (!is_initial_xendomain()) {
                evtchn_map_pirq(dev->irq, 0);
                pci_frontend_disable_msi(dev);
-               dev->irq = dev->irq_old;
+               dev->irq = msi_dev_entry->default_irq;
                return;
        }
 #endif
@@ -671,7 +675,7 @@ void pci_disable_msi(struct pci_dev* dev)
 
        pirq = dev->irq;
        /* Restore dev->irq to its default pin-assertion vector */
-       dev->irq = dev->irq_old;
+       dev->irq = msi_dev_entry->default_irq;
        msi_unmap_pirq(dev, pirq);
 
        /* Disable MSI mode */
@@ -701,6 +705,7 @@ int pci_enable_msix(struct pci_dev* dev, struct msix_entry *entries, int nvec)
        int status, pos, nr_entries;
        int i, j, temp;
        u16 control;
+       struct msi_dev_list *msi_dev_entry = get_msi_dev_pirq_list(dev);
 
        if (!pci_msi_enable || !dev || !entries)
                return -EINVAL;
@@ -718,11 +723,13 @@ int pci_enable_msix(struct pci_dev* dev, struct msix_entry *entries, int nvec)
                struct msi_pirq_entry *pirq_entry;
                int ret, irq;
 
+               temp = dev->irq;
                ret = pci_frontend_enable_msix(dev, entries, nvec);
                if (ret) {
                        printk("get %x from pci_frontend_enable_msix\n", ret);
                        return ret;
                }
+               msi_dev_entry->default_irq = temp;
 
                msi_dev_entry = get_msi_dev_pirq_list(dev);
                for (i = 0; i < nvec; i++) {
@@ -783,7 +790,7 @@ int pci_enable_msix(struct pci_dev* dev, struct msix_entry *entries, int nvec)
        status = msix_capability_init(dev, entries, nvec);
 
        if ( !status )
-               dev->irq_old = temp;
+               msi_dev_entry->default_irq = temp;
        else
                dev->irq = temp;
 
@@ -795,6 +802,7 @@ void pci_disable_msix(struct pci_dev* dev)
 {
        int pos;
        u16 control;
+       struct msi_dev_list *msi_dev_entry = get_msi_dev_pirq_list(dev);
 
 
        if (!pci_msi_enable)
@@ -817,7 +825,7 @@ void pci_disable_msix(struct pci_dev* dev)
                        kfree(pirq_entry);
                }
 
-               dev->irq = dev->irq_old;
+               dev->irq = msi_dev_entry->default_irq;
                return;
        }
 #endif
@@ -867,7 +875,7 @@ void msi_remove_pci_irq_vectors(struct pci_dev* dev)
        spin_unlock_irqrestore(&msi_dev_entry->pirq_list_lock, flags);
        iounmap(msi_dev_entry->mask_base);
        msi_dev_entry->mask_base = NULL;
-       dev->irq = dev->irq_old;
+       dev->irq = msi_dev_entry->default_irq;
 }
 
 void pci_no_msi(void)
index 3045419d2af69330aae74fe57ff3bbb0b2ab57a2..0690c306927d2c251c2462e7312cbff99073f142 100644 (file)
@@ -152,9 +152,6 @@ struct pci_dev {
         * directly, use the values stored here. They might be different!
         */
        unsigned int    irq;
-#ifdef CONFIG_XEN
-       unsigned int    irq_old;
-#endif
        struct resource resource[DEVICE_COUNT_RESOURCE]; /* I/O and memory regions + expansion ROMs */
 
        /* These fields are used by common fixups */