PCI/MSI: Move D0 check into pci_msi_check_device()
authorAlexander Gordeev <agordeev@redhat.com>
Tue, 23 Sep 2014 20:25:11 +0000 (14:25 -0600)
committerBjorn Helgaas <bhelgaas@google.com>
Wed, 1 Oct 2014 18:21:14 +0000 (12:21 -0600)
Both callers of pci_msi_check_device() check that the device is in D0
state, so move the check from the callers into pci_msi_check_device()
itself.

In pci_enable_msi_range(), note that pci_msi_check_device() never returns a
positive value any more, so the loop that called it until it returns zero
or negative is no longer necessary.

[bhelgaas: changelog, split to separate patch]
Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/pci/msi.c

index db21b77..338b027 100644 (file)
@@ -810,7 +810,10 @@ static int pci_msi_check_device(struct pci_dev *dev, int nvec)
        struct pci_bus *bus;
 
        /* MSI must be globally enabled and supported by the device */
-       if (!pci_msi_enable || !dev || dev->no_msi)
+       if (!pci_msi_enable)
+               return -EINVAL;
+
+       if (!dev || dev->no_msi || dev->current_state != PCI_D0)
                return -EINVAL;
 
        /*
@@ -934,13 +937,13 @@ int pci_enable_msix(struct pci_dev *dev, struct msix_entry *entries, int nvec)
        int status, nr_entries;
        int i, j;
 
-       if (!entries || !dev->msix_cap || dev->current_state != PCI_D0)
-               return -EINVAL;
-
        status = pci_msi_check_device(dev, nvec);
        if (status)
                return status;
 
+       if (!entries)
+               return -EINVAL;
+
        nr_entries = pci_msix_vec_count(dev);
        if (nr_entries < 0)
                return nr_entries;
@@ -1047,8 +1050,9 @@ int pci_enable_msi_range(struct pci_dev *dev, int minvec, int maxvec)
        int nvec;
        int rc;
 
-       if (dev->current_state != PCI_D0)
-               return -EINVAL;
+       rc = pci_msi_check_device(dev, minvec);
+       if (rc)
+               return rc;
 
        WARN_ON(!!dev->msi_enabled);
 
@@ -1070,17 +1074,6 @@ int pci_enable_msi_range(struct pci_dev *dev, int minvec, int maxvec)
        else if (nvec > maxvec)
                nvec = maxvec;
 
-       do {
-               rc = pci_msi_check_device(dev, nvec);
-               if (rc < 0) {
-                       return rc;
-               } else if (rc > 0) {
-                       if (rc < minvec)
-                               return -ENOSPC;
-                       nvec = rc;
-               }
-       } while (rc);
-
        do {
                rc = msi_capability_init(dev, nvec);
                if (rc < 0) {