aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorBen Hutchings <bhutchings@solarflare.com>2011-12-15 08:56:49 -0500
committerDavid S. Miller <davem@davemloft.net>2011-12-16 13:53:18 -0500
commit278bc4296bd64ffd1d3913b487dc8a520e423a7a (patch)
tree87781870cf9b96398a90fae6ebe1dae6d43d9ea4 /drivers/net
parent7850f63f1620512631445b901ae11cd149e7375c (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.c3
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c2
-rw-r--r--drivers/net/ethernet/sfc/efx.c3
-rw-r--r--drivers/net/vmxnet3/vmxnet3_drv.c3
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);