[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <AE90C24D6B3A694183C094C60CF0A2F6026B7398@saturn3.aculab.com>
Date: Mon, 21 Oct 2013 09:51:32 +0100
From: "David Laight" <David.Laight@...LAB.COM>
To: "Alexander Gordeev" <agordeev@...hat.com>,
<linux-kernel@...r.kernel.org>
Cc: "Bjorn Helgaas" <bhelgaas@...gle.com>,
"Michael Ellerman" <michael@...erman.id.au>,
"Benjamin Herrenschmidt" <benh@...nel.crashing.org>,
"Tejun Heo" <tj@...nel.org>,
"Ben Hutchings" <bhutchings@...arflare.com>,
"Mark Lord" <kernel@...rt.ca>, "H. Peter Anvin" <hpa@...or.com>,
<linux-pci@...r.kernel.org>
Subject: RE: [PATCH RFC v2 29/29] vmxnet3: Make use of pcim_enable_msix_range() interface
> Subject: [PATCH RFC v2 29/29] vmxnet3: Make use of pcim_enable_msix_range() interface
...
> diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c
> index d33802c..e552d2b 100644
> --- a/drivers/net/vmxnet3/vmxnet3_drv.c
> +++ b/drivers/net/vmxnet3/vmxnet3_drv.c
> @@ -2735,39 +2735,19 @@ vmxnet3_read_mac_addr(struct vmxnet3_adapter *adapter, u8 *mac)
> */
>
> static int
> -vmxnet3_acquire_msix_vectors(struct vmxnet3_adapter *adapter,
> - int vectors)
> +vmxnet3_acquire_msix_vectors(struct vmxnet3_adapter *adapter, int vectors)
> {
> - int err = -EINVAL, vector_threshold;
> - vector_threshold = VMXNET3_LINUX_MIN_MSIX_VECT;
> -
> - 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;
> - }
> + vectors = pcim_enable_msix_range(adapter->pdev,
> + adapter->intr.msix_entries, vectors,
> + VMXNET3_LINUX_MIN_MSIX_VECT);
> + if (vectors < 0) {
> + dev_err(&adapter->netdev->dev,
> + "Failed to enable MSI-X, error: %d\n", vectors);
> + return vectors;
> }
>
> - return err;
> + adapter->intr.num_intrs = vectors;
> + return 0;
> }
AFAICT the old code either used the requested number or the minimum number.
The new code seems to claim an intermediate number of interrupts - but probably
only uses the minimum number.
This wastes the last few MSI-X interrupts.
The code (especially the calling code) would be easier to read if the 'vectors'
value wasn't explicitly passed.
David
--
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