mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-04 21:31:51 +00:00
bnx2x: Fixed MSI-X enabling flow
Try to enable less MSI-X vectors if initial request has failed. Author: Dmitry Kravkov <dmitry@broadcom.com> Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com> Signed-off-by: Vladislav Zolotarov <vladz@broadcom.com> Signed-off-by: Eilon Greenstein <eilong@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
dea7aab192
commit
1ac218c83f
2 changed files with 39 additions and 9 deletions
|
@ -24,17 +24,26 @@
|
||||||
#define BCM_VLAN 1
|
#define BCM_VLAN 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_CNIC) || defined(CONFIG_CNIC_MODULE)
|
|
||||||
#define BCM_CNIC 1
|
|
||||||
#include "cnic_if.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define BNX2X_MULTI_QUEUE
|
#define BNX2X_MULTI_QUEUE
|
||||||
|
|
||||||
#define BNX2X_NEW_NAPI
|
#define BNX2X_NEW_NAPI
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(CONFIG_CNIC) || defined(CONFIG_CNIC_MODULE)
|
||||||
|
#define BCM_CNIC 1
|
||||||
|
#include "cnic_if.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef BCM_CNIC
|
||||||
|
#define BNX2X_MIN_MSIX_VEC_CNT 3
|
||||||
|
#define BNX2X_MSIX_VEC_FP_START 2
|
||||||
|
#else
|
||||||
|
#define BNX2X_MIN_MSIX_VEC_CNT 2
|
||||||
|
#define BNX2X_MSIX_VEC_FP_START 1
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <linux/mdio.h>
|
#include <linux/mdio.h>
|
||||||
#include "bnx2x_reg.h"
|
#include "bnx2x_reg.h"
|
||||||
#include "bnx2x_fw_defs.h"
|
#include "bnx2x_fw_defs.h"
|
||||||
|
@ -862,7 +871,6 @@ struct bnx2x {
|
||||||
#endif
|
#endif
|
||||||
#define INT_MODE_INTx 1
|
#define INT_MODE_INTx 1
|
||||||
#define INT_MODE_MSI 2
|
#define INT_MODE_MSI 2
|
||||||
#define INT_MODE_MSIX 3
|
|
||||||
|
|
||||||
int tx_ring_size;
|
int tx_ring_size;
|
||||||
|
|
||||||
|
|
|
@ -7418,7 +7418,31 @@ static int bnx2x_enable_msix(struct bnx2x *bp)
|
||||||
|
|
||||||
rc = pci_enable_msix(bp->pdev, &bp->msix_table[0],
|
rc = pci_enable_msix(bp->pdev, &bp->msix_table[0],
|
||||||
BNX2X_NUM_QUEUES(bp) + offset);
|
BNX2X_NUM_QUEUES(bp) + offset);
|
||||||
if (rc) {
|
|
||||||
|
/*
|
||||||
|
* reconfigure number of tx/rx queues according to available
|
||||||
|
* MSI-X vectors
|
||||||
|
*/
|
||||||
|
if (rc >= BNX2X_MIN_MSIX_VEC_CNT) {
|
||||||
|
/* vectors available for FP */
|
||||||
|
int fp_vec = rc - BNX2X_MSIX_VEC_FP_START;
|
||||||
|
|
||||||
|
DP(NETIF_MSG_IFUP,
|
||||||
|
"Trying to use less MSI-X vectors: %d\n", rc);
|
||||||
|
|
||||||
|
rc = pci_enable_msix(bp->pdev, &bp->msix_table[0], rc);
|
||||||
|
|
||||||
|
if (rc) {
|
||||||
|
DP(NETIF_MSG_IFUP,
|
||||||
|
"MSI-X is not attainable rc %d\n", rc);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
bp->num_queues = min(bp->num_queues, fp_vec);
|
||||||
|
|
||||||
|
DP(NETIF_MSG_IFUP, "New queue configuration set: %d\n",
|
||||||
|
bp->num_queues);
|
||||||
|
} else if (rc) {
|
||||||
DP(NETIF_MSG_IFUP, "MSI-X is not attainable rc %d\n", rc);
|
DP(NETIF_MSG_IFUP, "MSI-X is not attainable rc %d\n", rc);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
@ -7841,8 +7865,6 @@ static int bnx2x_set_num_queues(struct bnx2x *bp)
|
||||||
bp->num_queues = 1;
|
bp->num_queues = 1;
|
||||||
DP(NETIF_MSG_IFUP, "set number of queues to 1\n");
|
DP(NETIF_MSG_IFUP, "set number of queues to 1\n");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case INT_MODE_MSIX:
|
|
||||||
default:
|
default:
|
||||||
/* Set number of queues according to bp->multi_mode value */
|
/* Set number of queues according to bp->multi_mode value */
|
||||||
bnx2x_set_num_queues_msix(bp);
|
bnx2x_set_num_queues_msix(bp);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue