diff options
-rw-r--r-- | drivers/pci/msi.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c index d5f90d6383bc..604265c40853 100644 --- a/drivers/pci/msi.c +++ b/drivers/pci/msi.c | |||
@@ -831,7 +831,7 @@ int pci_enable_msi_block(struct pci_dev *dev, unsigned int nvec) | |||
831 | int status, maxvec; | 831 | int status, maxvec; |
832 | u16 msgctl; | 832 | u16 msgctl; |
833 | 833 | ||
834 | if (!dev->msi_cap) | 834 | if (!dev->msi_cap || dev->current_state != PCI_D0) |
835 | return -EINVAL; | 835 | return -EINVAL; |
836 | 836 | ||
837 | pci_read_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, &msgctl); | 837 | pci_read_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, &msgctl); |
@@ -862,7 +862,7 @@ int pci_enable_msi_block_auto(struct pci_dev *dev, unsigned int *maxvec) | |||
862 | int ret, nvec; | 862 | int ret, nvec; |
863 | u16 msgctl; | 863 | u16 msgctl; |
864 | 864 | ||
865 | if (!dev->msi_cap) | 865 | if (!dev->msi_cap || dev->current_state != PCI_D0) |
866 | return -EINVAL; | 866 | return -EINVAL; |
867 | 867 | ||
868 | pci_read_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, &msgctl); | 868 | pci_read_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, &msgctl); |
@@ -955,7 +955,7 @@ int pci_enable_msix(struct pci_dev *dev, struct msix_entry *entries, int nvec) | |||
955 | int status, nr_entries; | 955 | int status, nr_entries; |
956 | int i, j; | 956 | int i, j; |
957 | 957 | ||
958 | if (!entries || !dev->msix_cap) | 958 | if (!entries || !dev->msix_cap || dev->current_state != PCI_D0) |
959 | return -EINVAL; | 959 | return -EINVAL; |
960 | 960 | ||
961 | status = pci_msi_check_device(dev, nvec, PCI_CAP_ID_MSIX); | 961 | status = pci_msi_check_device(dev, nvec, PCI_CAP_ID_MSIX); |