diff options
author | Ben Hutchings <bhutchings@solarflare.com> | 2011-12-15 08:56:49 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-12-16 13:53:18 -0500 |
commit | 278bc4296bd64ffd1d3913b487dc8a520e423a7a (patch) | |
tree | 87781870cf9b96398a90fae6ebe1dae6d43d9ea4 /drivers/net | |
parent | 7850f63f1620512631445b901ae11cd149e7375c (diff) |
ethtool: Define and apply a default policy for RX flow hash indirection
All drivers that support modification of the RX flow hash indirection
table initialise it in the same way: RX rings are assigned to table
entries in rotation. Make that default policy explicit by having them
call a ethtool_rxfh_indir_default() function.
In the ethtool core, add support for a zero size value for
ETHTOOL_SRXFHINDIR, which resets the table to this default.
Partly-suggested-by: Matt Carlson <mcarlson@broadcom.com>
Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
Acked-by: Shreyas N Bhatewara <sbhatewara@vmware.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 3 | ||||
-rw-r--r-- | drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/sfc/efx.c | 3 | ||||
-rw-r--r-- | drivers/net/vmxnet3/vmxnet3_drv.c | 3 |
4 files changed, 7 insertions, 4 deletions
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c index 64f5cf5c68d1..2b731b253598 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | |||
@@ -1545,7 +1545,8 @@ static inline int bnx2x_init_rss_pf(struct bnx2x *bp) | |||
1545 | if (bp->multi_mode != ETH_RSS_MODE_DISABLED) { | 1545 | if (bp->multi_mode != ETH_RSS_MODE_DISABLED) { |
1546 | for (i = 0; i < sizeof(ind_table); i++) | 1546 | for (i = 0; i < sizeof(ind_table); i++) |
1547 | ind_table[i] = | 1547 | ind_table[i] = |
1548 | bp->fp->cl_id + (i % num_eth_queues); | 1548 | bp->fp->cl_id + |
1549 | ethtool_rxfh_indir_default(i, num_eth_queues); | ||
1549 | } | 1550 | } |
1550 | 1551 | ||
1551 | /* | 1552 | /* |
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c index 8ffd55bdef3d..fccbe490c7f0 100644 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c | |||
@@ -3449,7 +3449,7 @@ static int __devinit init_rss(struct adapter *adap) | |||
3449 | if (!pi->rss) | 3449 | if (!pi->rss) |
3450 | return -ENOMEM; | 3450 | return -ENOMEM; |
3451 | for (j = 0; j < pi->rss_size; j++) | 3451 | for (j = 0; j < pi->rss_size; j++) |
3452 | pi->rss[j] = j % pi->nqsets; | 3452 | pi->rss[j] = ethtool_rxfh_indir_default(j, pi->nqsets); |
3453 | } | 3453 | } |
3454 | return 0; | 3454 | return 0; |
3455 | } | 3455 | } |
diff --git a/drivers/net/ethernet/sfc/efx.c b/drivers/net/ethernet/sfc/efx.c index 14e134d3b4d7..44a82c6c60a7 100644 --- a/drivers/net/ethernet/sfc/efx.c +++ b/drivers/net/ethernet/sfc/efx.c | |||
@@ -1336,7 +1336,8 @@ static int efx_probe_nic(struct efx_nic *efx) | |||
1336 | if (efx->n_channels > 1) | 1336 | if (efx->n_channels > 1) |
1337 | get_random_bytes(&efx->rx_hash_key, sizeof(efx->rx_hash_key)); | 1337 | get_random_bytes(&efx->rx_hash_key, sizeof(efx->rx_hash_key)); |
1338 | for (i = 0; i < ARRAY_SIZE(efx->rx_indir_table); i++) | 1338 | for (i = 0; i < ARRAY_SIZE(efx->rx_indir_table); i++) |
1339 | efx->rx_indir_table[i] = i % efx->n_rx_channels; | 1339 | efx->rx_indir_table[i] = |
1340 | ethtool_rxfh_indir_default(i, efx->n_rx_channels); | ||
1340 | 1341 | ||
1341 | efx_set_channels(efx); | 1342 | efx_set_channels(efx); |
1342 | netif_set_real_num_tx_queues(efx->net_dev, efx->n_tx_channels); | 1343 | netif_set_real_num_tx_queues(efx->net_dev, efx->n_tx_channels); |
diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c index 1c2ae11a9e35..de7fc345148a 100644 --- a/drivers/net/vmxnet3/vmxnet3_drv.c +++ b/drivers/net/vmxnet3/vmxnet3_drv.c | |||
@@ -2167,7 +2167,8 @@ vmxnet3_setup_driver_shared(struct vmxnet3_adapter *adapter) | |||
2167 | rssConf->indTableSize = VMXNET3_RSS_IND_TABLE_SIZE; | 2167 | rssConf->indTableSize = VMXNET3_RSS_IND_TABLE_SIZE; |
2168 | get_random_bytes(&rssConf->hashKey[0], rssConf->hashKeySize); | 2168 | get_random_bytes(&rssConf->hashKey[0], rssConf->hashKeySize); |
2169 | for (i = 0; i < rssConf->indTableSize; i++) | 2169 | for (i = 0; i < rssConf->indTableSize; i++) |
2170 | rssConf->indTable[i] = i % adapter->num_rx_queues; | 2170 | rssConf->indTable[i] = ethtool_rxfh_indir_default( |
2171 | i, adapter->num_rx_queues); | ||
2171 | 2172 | ||
2172 | devRead->rssConfDesc.confVer = 1; | 2173 | devRead->rssConfDesc.confVer = 1; |
2173 | devRead->rssConfDesc.confLen = sizeof(*rssConf); | 2174 | devRead->rssConfDesc.confLen = sizeof(*rssConf); |