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

[patch V2 20/31] NTB/msi: Convert to msi_on_each_desc()



Replace the about to vanish iterators, make use of the filtering and take
the descriptor lock around the iteration.

Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
Reviewed-by: Logan Gunthorpe <logang@xxxxxxxxxxxx>
Cc: Logan Gunthorpe <logang@xxxxxxxxxxxx>
Cc: Jon Mason <jdmason@xxxxxxxx>
Cc: Dave Jiang <dave.jiang@xxxxxxxxx>
Cc: Allen Hubbe <allenbh@xxxxxxxxx>
Cc: linux-ntb@xxxxxxxxxxxxxxxx
---
 drivers/ntb/msi.c |   19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

--- a/drivers/ntb/msi.c
+++ b/drivers/ntb/msi.c
@@ -108,8 +108,10 @@ int ntb_msi_setup_mws(struct ntb_dev *nt
        if (!ntb->msi)
                return -EINVAL;
 
-       desc = first_msi_entry(&ntb->pdev->dev);
+       msi_lock_descs(&ntb->pdev->dev);
+       desc = msi_first_desc(&ntb->pdev->dev, MSI_DESC_ASSOCIATED);
        addr = desc->msg.address_lo + ((uint64_t)desc->msg.address_hi << 32);
+       msi_unlock_descs(&ntb->pdev->dev);
 
        for (peer = 0; peer < ntb_peer_port_count(ntb); peer++) {
                peer_widx = ntb_peer_highest_mw_idx(ntb, peer);
@@ -281,13 +283,15 @@ int ntbm_msi_request_threaded_irq(struct
                                  const char *name, void *dev_id,
                                  struct ntb_msi_desc *msi_desc)
 {
+       struct device *dev = &ntb->pdev->dev;
        struct msi_desc *entry;
        int ret;
 
        if (!ntb->msi)
                return -EINVAL;
 
-       for_each_pci_msi_entry(entry, ntb->pdev) {
+       msi_lock_descs(dev);
+       msi_for_each_desc(entry, dev, MSI_DESC_ASSOCIATED) {
                if (irq_has_action(entry->irq))
                        continue;
 
@@ -304,14 +308,17 @@ int ntbm_msi_request_threaded_irq(struct
                ret = ntbm_msi_setup_callback(ntb, entry, msi_desc);
                if (ret) {
                        devm_free_irq(&ntb->dev, entry->irq, dev_id);
-                       return ret;
+                       goto unlock;
                }
 
-
-               return entry->irq;
+               ret = entry->irq;
+               goto unlock;
        }
+       ret = -ENODEV;
 
-       return -ENODEV;
+unlock:
+       msi_unlock_descs(dev);
+       return ret;
 }
 EXPORT_SYMBOL(ntbm_msi_request_threaded_irq);
 




 


Rackspace

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