Skip to content

Commit

Permalink
PCI/MSI: Move D0 check into pci_msi_check_device()
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Alexander Gordeev authored and Bjorn Helgaas committed Oct 1, 2014
1 parent ad975eb commit 27e2060
Showing 1 changed file with 10 additions and 17 deletions.
27 changes: 10 additions & 17 deletions drivers/pci/msi.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

/*
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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);

Expand All @@ -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) {
Expand Down

0 comments on commit 27e2060

Please sign in to comment.