diff options
author | Alexander Gordeev <agordeev@redhat.com> | 2013-12-30 02:28:14 -0500 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2014-01-03 19:17:55 -0500 |
commit | 7b92b4f61ec49cb1a5813298f35258bd7ecd3667 (patch) | |
tree | 3ca281ebb26a2885ff9ff5fd4e1b15393b6f7c20 /drivers/ata/ahci.c | |
parent | d1ac1d2622e8f0fd2a25127a8649d135b54db8a9 (diff) |
PCI/MSI: Remove pci_enable_msi_block_auto()
The new pci_msi_vec_count() interface makes pci_enable_msi_block_auto()
superfluous.
Drivers can use pci_msi_vec_count() to learn the maximum number of MSIs
supported by the device, and then call pci_enable_msi_block().
pci_enable_msi_block_auto() was introduced recently, and its only user is
the AHCI driver, which is also updated by this change.
Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'drivers/ata/ahci.c')
-rw-r--r-- | drivers/ata/ahci.c | 56 |
1 files changed, 35 insertions, 21 deletions
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c index e2903d03180e..8516f4d47893 100644 --- a/drivers/ata/ahci.c +++ b/drivers/ata/ahci.c | |||
@@ -1095,26 +1095,40 @@ static inline void ahci_gtf_filter_workaround(struct ata_host *host) | |||
1095 | {} | 1095 | {} |
1096 | #endif | 1096 | #endif |
1097 | 1097 | ||
1098 | int ahci_init_interrupts(struct pci_dev *pdev, struct ahci_host_priv *hpriv) | 1098 | int ahci_init_interrupts(struct pci_dev *pdev, unsigned int n_ports, |
1099 | struct ahci_host_priv *hpriv) | ||
1099 | { | 1100 | { |
1100 | int rc; | 1101 | int rc, nvec; |
1101 | unsigned int maxvec; | ||
1102 | 1102 | ||
1103 | if (!(hpriv->flags & AHCI_HFLAG_NO_MSI)) { | 1103 | if (hpriv->flags & AHCI_HFLAG_NO_MSI) |
1104 | rc = pci_enable_msi_block_auto(pdev, &maxvec); | 1104 | goto intx; |
1105 | if (rc > 0) { | 1105 | |
1106 | if ((rc == maxvec) || (rc == 1)) | 1106 | rc = pci_msi_vec_count(pdev); |
1107 | return rc; | 1107 | if (rc < 0) |
1108 | /* | 1108 | goto intx; |
1109 | * Assume that advantage of multipe MSIs is negated, | 1109 | |
1110 | * so fallback to single MSI mode to save resources | 1110 | /* |
1111 | */ | 1111 | * If number of MSIs is less than number of ports then Sharing Last |
1112 | pci_disable_msi(pdev); | 1112 | * Message mode could be enforced. In this case assume that advantage |
1113 | if (!pci_enable_msi(pdev)) | 1113 | * of multipe MSIs is negated and use single MSI mode instead. |
1114 | return 1; | 1114 | */ |
1115 | } | 1115 | if (rc < n_ports) |
1116 | } | 1116 | goto single_msi; |
1117 | |||
1118 | nvec = rc; | ||
1119 | rc = pci_enable_msi_block(pdev, nvec); | ||
1120 | if (rc) | ||
1121 | goto intx; | ||
1117 | 1122 | ||
1123 | return nvec; | ||
1124 | |||
1125 | single_msi: | ||
1126 | rc = pci_enable_msi(pdev); | ||
1127 | if (rc) | ||
1128 | goto intx; | ||
1129 | return 1; | ||
1130 | |||
1131 | intx: | ||
1118 | pci_intx(pdev, 1); | 1132 | pci_intx(pdev, 1); |
1119 | return 0; | 1133 | return 0; |
1120 | } | 1134 | } |
@@ -1281,10 +1295,6 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
1281 | 1295 | ||
1282 | hpriv->mmio = pcim_iomap_table(pdev)[ahci_pci_bar]; | 1296 | hpriv->mmio = pcim_iomap_table(pdev)[ahci_pci_bar]; |
1283 | 1297 | ||
1284 | n_msis = ahci_init_interrupts(pdev, hpriv); | ||
1285 | if (n_msis > 1) | ||
1286 | hpriv->flags |= AHCI_HFLAG_MULTI_MSI; | ||
1287 | |||
1288 | /* save initial config */ | 1298 | /* save initial config */ |
1289 | ahci_pci_save_initial_config(pdev, hpriv); | 1299 | ahci_pci_save_initial_config(pdev, hpriv); |
1290 | 1300 | ||
@@ -1339,6 +1349,10 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
1339 | */ | 1349 | */ |
1340 | n_ports = max(ahci_nr_ports(hpriv->cap), fls(hpriv->port_map)); | 1350 | n_ports = max(ahci_nr_ports(hpriv->cap), fls(hpriv->port_map)); |
1341 | 1351 | ||
1352 | n_msis = ahci_init_interrupts(pdev, n_ports, hpriv); | ||
1353 | if (n_msis > 1) | ||
1354 | hpriv->flags |= AHCI_HFLAG_MULTI_MSI; | ||
1355 | |||
1342 | host = ata_host_alloc_pinfo(&pdev->dev, ppi, n_ports); | 1356 | host = ata_host_alloc_pinfo(&pdev->dev, ppi, n_ports); |
1343 | if (!host) | 1357 | if (!host) |
1344 | return -ENOMEM; | 1358 | return -ENOMEM; |