be2net: SRIOV Queue distribution should factor in EQ-count of VFs
The SRIOV resource distribution logic for RX/TX queue counts is not optimal when a small number of VFs are enabled. It does not take into account the VF's EQ count while computing the queue counts. Because of this, the VF gets a large number of queues, though it doesn't have sufficient EQs, resulting in wasted queue resources. And the PF gets a smaller share of queues though it has more EQs. Fix this by capping the VF queue count at its EQ count. Signed-off-by: Sriharsha Basavapatna <sriharsha.basavapatna@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
41dcdfbd09
commit
ee9ad28024
|
@ -89,6 +89,10 @@
|
|||
#define BE3_MAX_TX_QS 16
|
||||
#define BE3_MAX_EVT_QS 16
|
||||
#define BE3_SRIOV_MAX_EVT_QS 8
|
||||
#define SH_VF_MAX_NIC_EQS 3 /* Skyhawk VFs can have a max of 4 EQs
|
||||
* and at least 1 is granted to either
|
||||
* SURF/DPDK
|
||||
*/
|
||||
|
||||
#define MAX_RSS_IFACES 15
|
||||
#define MAX_RX_QS 32
|
||||
|
|
|
@ -3792,18 +3792,15 @@ static u16 be_calculate_vf_qs(struct be_adapter *adapter, u16 num_vfs)
|
|||
struct be_resources res = adapter->pool_res;
|
||||
u16 num_vf_qs = 1;
|
||||
|
||||
/* Distribute the queue resources equally among the PF and it's VFs
|
||||
/* Distribute the queue resources among the PF and it's VFs
|
||||
* Do not distribute queue resources in multi-channel configuration.
|
||||
*/
|
||||
if (num_vfs && !be_is_mc(adapter)) {
|
||||
/* If number of VFs requested is 8 less than max supported,
|
||||
* assign 8 queue pairs to the PF and divide the remaining
|
||||
* resources evenly among the VFs
|
||||
*/
|
||||
if (num_vfs < (be_max_vfs(adapter) - 8))
|
||||
num_vf_qs = (res.max_rss_qs - 8) / num_vfs;
|
||||
else
|
||||
num_vf_qs = res.max_rss_qs / num_vfs;
|
||||
/* Divide the qpairs evenly among the VFs and the PF, capped
|
||||
* at VF-EQ-count. Any remainder qpairs belong to the PF.
|
||||
*/
|
||||
num_vf_qs = min(SH_VF_MAX_NIC_EQS,
|
||||
res.max_rss_qs / (num_vfs + 1));
|
||||
|
||||
/* Skyhawk-R chip supports only MAX_RSS_IFACES RSS capable
|
||||
* interfaces per port. Provide RSS on VFs, only if number
|
||||
|
|
Loading…
Reference in New Issue