[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[patch V2 27/31] genirq/msi: Convert to new functions



Use the new iterator functions and add locking where required.

Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
---
 kernel/irq/msi.c |   23 ++++++++++++++---------
 1 file changed, 14 insertions(+), 9 deletions(-)

--- a/kernel/irq/msi.c
+++ b/kernel/irq/msi.c
@@ -348,6 +348,7 @@ EXPORT_SYMBOL_GPL(msi_next_desc);
 unsigned int msi_get_virq(struct device *dev, unsigned int index)
 {
        struct msi_desc *desc;
+       unsigned int ret = 0;
        bool pcimsi;
 
        if (!dev->msi.data)
@@ -355,11 +356,12 @@ unsigned int msi_get_virq(struct device
 
        pcimsi = msi_device_has_property(dev, MSI_PROP_PCI_MSI);
 
-       for_each_msi_entry(desc, dev) {
+       msi_lock_descs(dev);
+       msi_for_each_desc(desc, dev, MSI_DESC_ASSOCIATED) {
                /* PCI-MSI has only one descriptor for multiple interrupts. */
                if (pcimsi) {
-                       if (desc->irq && index < desc->nvec_used)
-                               return desc->irq + index;
+                       if (index < desc->nvec_used)
+                               ret = desc->irq + index;
                        break;
                }
 
@@ -367,10 +369,13 @@ unsigned int msi_get_virq(struct device
                 * PCI-MSIX and platform MSI use a descriptor per
                 * interrupt.
                 */
-               if (desc->msi_index == index)
-                       return desc->irq;
+               if (desc->msi_index == index) {
+                       ret = desc->irq;
+                       break;
+               }
        }
-       return 0;
+       msi_unlock_descs(dev);
+       return ret;
 }
 EXPORT_SYMBOL_GPL(msi_get_virq);
 
@@ -401,7 +406,7 @@ static const struct attribute_group **ms
        int i;
 
        /* Determine how many msi entries we have */
-       for_each_msi_entry(entry, dev)
+       msi_for_each_desc(entry, dev, MSI_DESC_ALL)
                num_msi += entry->nvec_used;
        if (!num_msi)
                return NULL;
@@ -411,7 +416,7 @@ static const struct attribute_group **ms
        if (!msi_attrs)
                return ERR_PTR(-ENOMEM);
 
-       for_each_msi_entry(entry, dev) {
+       msi_for_each_desc(entry, dev, MSI_DESC_ALL) {
                for (i = 0; i < entry->nvec_used; i++) {
                        msi_dev_attr = kzalloc(sizeof(*msi_dev_attr), 
GFP_KERNEL);
                        if (!msi_dev_attr)
@@ -831,7 +836,7 @@ static bool msi_check_reservation_mode(s
         * Checking the first MSI descriptor is sufficient. MSIX supports
         * masking and MSI does so when the can_mask attribute is set.
         */
-       desc = first_msi_entry(dev);
+       desc = msi_first_desc(dev, MSI_DESC_ALL);
        return desc->pci.msi_attrib.is_msix || desc->pci.msi_attrib.can_mask;
 }
 




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.