[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <6714315cab9b5eea79e6516caeb712362992bcc5.1380703263.git.agordeev@redhat.com>
Date: Wed, 2 Oct 2013 12:49:31 +0200
From: Alexander Gordeev <agordeev@...hat.com>
To: linux-kernel@...r.kernel.org
Cc: Alexander Gordeev <agordeev@...hat.com>,
Bjorn Helgaas <bhelgaas@...gle.com>,
Ralf Baechle <ralf@...ux-mips.org>,
Michael Ellerman <michael@...erman.id.au>,
Benjamin Herrenschmidt <benh@...nel.crashing.org>,
Martin Schwidefsky <schwidefsky@...ibm.com>,
Ingo Molnar <mingo@...hat.com>, Tejun Heo <tj@...nel.org>,
Dan Williams <dan.j.williams@...el.com>,
Andy King <acking@...are.com>, Jon Mason <jon.mason@...el.com>,
Matt Porter <mporter@...nel.crashing.org>,
linux-pci@...r.kernel.org, linux-mips@...ux-mips.org,
linuxppc-dev@...ts.ozlabs.org, linux390@...ibm.com,
linux-s390@...r.kernel.org, x86@...nel.org,
linux-ide@...r.kernel.org, iss_storagedev@...com,
linux-nvme@...ts.infradead.org, linux-rdma@...r.kernel.org,
netdev@...r.kernel.org, e1000-devel@...ts.sourceforge.net,
linux-driver@...gic.com,
Solarflare linux maintainers <linux-net-drivers@...arflare.com>,
"VMware, Inc." <pv-drivers@...are.com>, linux-scsi@...r.kernel.org
Subject: [PATCH RFC 75/77] vmxnet3: Update MSI/MSI-X interrupts enablement code
As result of recent re-design of the MSI/MSI-X interrupts enabling
pattern this driver has to be updated to use the new technique to
obtain a optimal number of MSI/MSI-X interrupts required.
Signed-off-by: Alexander Gordeev <agordeev@...hat.com>
---
drivers/net/vmxnet3/vmxnet3_drv.c | 68 ++++++++++++++++++-------------------
1 files changed, 33 insertions(+), 35 deletions(-)
diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c
index 00dc0d0..8d3321b 100644
--- a/drivers/net/vmxnet3/vmxnet3_drv.c
+++ b/drivers/net/vmxnet3/vmxnet3_drv.c
@@ -2724,49 +2724,47 @@ vmxnet3_read_mac_addr(struct vmxnet3_adapter *adapter, u8 *mac)
#ifdef CONFIG_PCI_MSI
-/*
- * Enable MSIx vectors.
- * Returns :
- * 0 on successful enabling of required vectors,
- * VMXNET3_LINUX_MIN_MSIX_VECT when only minimum number of vectors required
- * could be enabled.
- * number of vectors which can be enabled otherwise (this number is smaller
- * than VMXNET3_LINUX_MIN_MSIX_VECT)
- */
-
static int
vmxnet3_acquire_msix_vectors(struct vmxnet3_adapter *adapter,
int vectors)
{
- int err = -EINVAL, vector_threshold;
+ int err, vector_threshold;
+
vector_threshold = VMXNET3_LINUX_MIN_MSIX_VECT;
+ if (vectors < vector_threshold)
+ return -EINVAL;
- while (vectors >= vector_threshold) {
- err = pci_enable_msix(adapter->pdev, adapter->intr.msix_entries,
- vectors);
- if (!err) {
- adapter->intr.num_intrs = vectors;
- return 0;
- } else if (err < 0) {
- dev_err(&adapter->netdev->dev,
- "Failed to enable MSI-X, error: %d\n", err);
- return err;
- } else if (err < vector_threshold) {
- dev_info(&adapter->pdev->dev,
- "Number of MSI-Xs which can be allocated "
- "is lower than min threshold required.\n");
- return -ENOSPC;
- } else {
- /* If fails to enable required number of MSI-x vectors
- * try enabling minimum number of vectors required.
- */
- dev_err(&adapter->netdev->dev,
- "Failed to enable %d MSI-X, trying %d instead\n",
- vectors, vector_threshold);
- vectors = vector_threshold;
- }
+ err = pci_msix_table_size(adapter->pdev);
+ if (err < 0)
+ goto err_msix;
+ if (err < vector_threshold) {
+ dev_info(&adapter->pdev->dev,
+ "Number of MSI-X interrupts which can be allocated "
+ "is lower than min threshold required.\n");
+ return -ENOSPC;
+ }
+ if (err < vectors) {
+ /*
+ * If fails to enable required number of MSI-x vectors
+ * try enabling minimum number of vectors required.
+ */
+ dev_err(&adapter->netdev->dev,
+ "Failed to enable %d MSI-X, trying %d instead\n",
+ vectors, vector_threshold);
+ vectors = vector_threshold;
}
+ err = pci_enable_msix(adapter->pdev, adapter->intr.msix_entries,
+ vectors);
+ if (err)
+ goto err_msix;
+
+ adapter->intr.num_intrs = vectors;
+ return 0;
+
+err_msix:
+ dev_err(&adapter->netdev->dev,
+ "Failed to enable MSI-X, error: %d\n", err);
return err;
}
--
1.7.7.6
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists