aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci/msi.c
diff options
context:
space:
mode:
authorAlexander Gordeev <agordeev@redhat.com>2014-04-14 09:28:35 -0400
committerBjorn Helgaas <bhelgaas@google.com>2014-04-30 18:56:47 -0400
commit034cd97ebda4062eb4402a6cf963ccd262caa86a (patch)
treef9d9d74d58c21b68bd875d192d18d915196531d0 /drivers/pci/msi.c
parenta30d0108b09ae46d24594a2e699c4dad21bb4af4 (diff)
PCI/MSI: Remove pci_enable_msi_block()
There are no users of pci_enable_msi_block() function left. Obsolete it in favor of pci_enable_msi_range() and pci_enable_msi_exact() functions. Previously, we called arch_setup_msi_irqs() once, requesting the same vector count we passed to arch_msi_check_device(). Now we may call it several times: if it returns failure, we may retry and request fewer vectors. We don't keep track of the vector count we initially passed to arch_msi_check_device(). We only keep track of the number of vectors successfully set up by arch_setup_msi_irqs(), and this is what we use to clean things up when disabling MSI. Therefore, we assume that arch_msi_check_device() does nothing that will have to be cleaned up later. [bhelgaas: changelog] Signed-off-by: Alexander Gordeev <agordeev@redhat.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Diffstat (limited to 'drivers/pci/msi.c')
-rw-r--r--drivers/pci/msi.c79
1 files changed, 33 insertions, 46 deletions
diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c
index 04130c3f9cf6..36dd0caa1759 100644
--- a/drivers/pci/msi.c
+++ b/drivers/pci/msi.c
@@ -879,50 +879,6 @@ int pci_msi_vec_count(struct pci_dev *dev)
879} 879}
880EXPORT_SYMBOL(pci_msi_vec_count); 880EXPORT_SYMBOL(pci_msi_vec_count);
881 881
882/**
883 * pci_enable_msi_block - configure device's MSI capability structure
884 * @dev: device to configure
885 * @nvec: number of interrupts to configure
886 *
887 * Allocate IRQs for a device with the MSI capability.
888 * This function returns a negative errno if an error occurs. If it
889 * is unable to allocate the number of interrupts requested, it returns
890 * the number of interrupts it might be able to allocate. If it successfully
891 * allocates at least the number of interrupts requested, it returns 0 and
892 * updates the @dev's irq member to the lowest new interrupt number; the
893 * other interrupt numbers allocated to this device are consecutive.
894 */
895int pci_enable_msi_block(struct pci_dev *dev, int nvec)
896{
897 int status, maxvec;
898
899 if (dev->current_state != PCI_D0)
900 return -EINVAL;
901
902 maxvec = pci_msi_vec_count(dev);
903 if (maxvec < 0)
904 return maxvec;
905 if (nvec > maxvec)
906 return maxvec;
907
908 status = pci_msi_check_device(dev, nvec, PCI_CAP_ID_MSI);
909 if (status)
910 return status;
911
912 WARN_ON(!!dev->msi_enabled);
913
914 /* Check whether driver already requested MSI-X irqs */
915 if (dev->msix_enabled) {
916 dev_info(&dev->dev, "can't enable MSI "
917 "(MSI-X already enabled)\n");
918 return -EINVAL;
919 }
920
921 status = msi_capability_init(dev, nvec);
922 return status;
923}
924EXPORT_SYMBOL(pci_enable_msi_block);
925
926void pci_msi_shutdown(struct pci_dev *dev) 882void pci_msi_shutdown(struct pci_dev *dev)
927{ 883{
928 struct msi_desc *desc; 884 struct msi_desc *desc;
@@ -1128,14 +1084,45 @@ void pci_msi_init_pci_dev(struct pci_dev *dev)
1128 **/ 1084 **/
1129int pci_enable_msi_range(struct pci_dev *dev, int minvec, int maxvec) 1085int pci_enable_msi_range(struct pci_dev *dev, int minvec, int maxvec)
1130{ 1086{
1131 int nvec = maxvec; 1087 int nvec;
1132 int rc; 1088 int rc;
1133 1089
1090 if (dev->current_state != PCI_D0)
1091 return -EINVAL;
1092
1093 WARN_ON(!!dev->msi_enabled);
1094
1095 /* Check whether driver already requested MSI-X irqs */
1096 if (dev->msix_enabled) {
1097 dev_info(&dev->dev,
1098 "can't enable MSI (MSI-X already enabled)\n");
1099 return -EINVAL;
1100 }
1101
1134 if (maxvec < minvec) 1102 if (maxvec < minvec)
1135 return -ERANGE; 1103 return -ERANGE;
1136 1104
1105 nvec = pci_msi_vec_count(dev);
1106 if (nvec < 0)
1107 return nvec;
1108 else if (nvec < minvec)
1109 return -EINVAL;
1110 else if (nvec > maxvec)
1111 nvec = maxvec;
1112
1113 do {
1114 rc = pci_msi_check_device(dev, nvec, PCI_CAP_ID_MSI);
1115 if (rc < 0) {
1116 return rc;
1117 } else if (rc > 0) {
1118 if (rc < minvec)
1119 return -ENOSPC;
1120 nvec = rc;
1121 }
1122 } while (rc);
1123
1137 do { 1124 do {
1138 rc = pci_enable_msi_block(dev, nvec); 1125 rc = msi_capability_init(dev, nvec);
1139 if (rc < 0) { 1126 if (rc < 0) {
1140 return rc; 1127 return rc;
1141 } else if (rc > 0) { 1128 } else if (rc > 0) {