diff options
| author | Suresh Reddy <suresh.reddy@emulex.com> | 2014-01-06 02:32:25 -0500 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2014-01-06 13:09:21 -0500 |
| commit | e3dc867c1758fc4ae6fc6b63ea6bbcd454479f08 (patch) | |
| tree | 1bbc5ca4524c6025ef4a9c963caf3846dbd18eea | |
| parent | 5eeff6354faffb3f140d690eec1cede78de53b06 (diff) | |
be2net: fix max_evt_qs calculation for BE3 in SR-IOV config
The driver wrongly assumes 16 EQs/vectors are available for each BE3 PF.
When SR-IOV is enabled, a BE3 PF can support only a max of 8 EQs.
Signed-off-by: Suresh Reddy <suresh.reddy@emulex.com>
Signed-off-by: Sathya Perla <sathya.perla@emulex.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | drivers/net/ethernet/emulex/benet/be.h | 1 | ||||
| -rw-r--r-- | drivers/net/ethernet/emulex/benet/be_main.c | 12 |
2 files changed, 9 insertions, 4 deletions
diff --git a/drivers/net/ethernet/emulex/benet/be.h b/drivers/net/ethernet/emulex/benet/be.h index 2e031f24cd33..4ccaf9af6fc9 100644 --- a/drivers/net/ethernet/emulex/benet/be.h +++ b/drivers/net/ethernet/emulex/benet/be.h | |||
| @@ -104,6 +104,7 @@ static inline char *nic_name(struct pci_dev *pdev) | |||
| 104 | #define BE3_MAX_RSS_QS 16 | 104 | #define BE3_MAX_RSS_QS 16 |
| 105 | #define BE3_MAX_TX_QS 16 | 105 | #define BE3_MAX_TX_QS 16 |
| 106 | #define BE3_MAX_EVT_QS 16 | 106 | #define BE3_MAX_EVT_QS 16 |
| 107 | #define BE3_SRIOV_MAX_EVT_QS 8 | ||
| 107 | 108 | ||
| 108 | #define MAX_RX_QS 32 | 109 | #define MAX_RX_QS 32 |
| 109 | #define MAX_EVT_QS 32 | 110 | #define MAX_EVT_QS 32 |
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c index fa44bba4f93b..bf40fdaecfa3 100644 --- a/drivers/net/ethernet/emulex/benet/be_main.c +++ b/drivers/net/ethernet/emulex/benet/be_main.c | |||
| @@ -3127,11 +3127,11 @@ static void BEx_get_resources(struct be_adapter *adapter, | |||
| 3127 | { | 3127 | { |
| 3128 | struct pci_dev *pdev = adapter->pdev; | 3128 | struct pci_dev *pdev = adapter->pdev; |
| 3129 | bool use_sriov = false; | 3129 | bool use_sriov = false; |
| 3130 | int max_vfs; | ||
| 3130 | 3131 | ||
| 3131 | if (BE3_chip(adapter) && sriov_want(adapter)) { | 3132 | max_vfs = pci_sriov_get_totalvfs(pdev); |
| 3132 | int max_vfs; | ||
| 3133 | 3133 | ||
| 3134 | max_vfs = pci_sriov_get_totalvfs(pdev); | 3134 | if (BE3_chip(adapter) && sriov_want(adapter)) { |
| 3135 | res->max_vfs = max_vfs > 0 ? min(MAX_VFS, max_vfs) : 0; | 3135 | res->max_vfs = max_vfs > 0 ? min(MAX_VFS, max_vfs) : 0; |
| 3136 | use_sriov = res->max_vfs; | 3136 | use_sriov = res->max_vfs; |
| 3137 | } | 3137 | } |
| @@ -3162,7 +3162,11 @@ static void BEx_get_resources(struct be_adapter *adapter, | |||
| 3162 | BE3_MAX_RSS_QS : BE2_MAX_RSS_QS; | 3162 | BE3_MAX_RSS_QS : BE2_MAX_RSS_QS; |
| 3163 | res->max_rx_qs = res->max_rss_qs + 1; | 3163 | res->max_rx_qs = res->max_rss_qs + 1; |
| 3164 | 3164 | ||
| 3165 | res->max_evt_qs = be_physfn(adapter) ? BE3_MAX_EVT_QS : 1; | 3165 | if (be_physfn(adapter)) |
| 3166 | res->max_evt_qs = (max_vfs > 0) ? | ||
| 3167 | BE3_SRIOV_MAX_EVT_QS : BE3_MAX_EVT_QS; | ||
| 3168 | else | ||
| 3169 | res->max_evt_qs = 1; | ||
| 3166 | 3170 | ||
| 3167 | res->if_cap_flags = BE_IF_CAP_FLAGS_WANT; | 3171 | res->if_cap_flags = BE_IF_CAP_FLAGS_WANT; |
| 3168 | if (!(adapter->function_caps & BE_FUNCTION_CAPS_RSS)) | 3172 | if (!(adapter->function_caps & BE_FUNCTION_CAPS_RSS)) |
