mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-03-07 14:36:28 +07:00
net: hns3: Add new RSS hash algorithm support for PF
This patch adds ETH_RSS_HASH_XOR hash algorithm supports, which is supported by hw revision 0x21. Signed-off-by: Jian Shen <shenjian15@huawei.com> Signed-off-by: Peng Li <lipeng321@huawei.com> Signed-off-by: Salil Mehta <salil.mehta@huawei.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
9047fa5d32
commit
775501a1aa
@ -678,12 +678,13 @@ static int hns3_set_rss(struct net_device *netdev, const u32 *indir,
|
||||
if (!h->ae_algo || !h->ae_algo->ops || !h->ae_algo->ops->set_rss)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
/* currently we only support Toeplitz hash */
|
||||
if ((hfunc != ETH_RSS_HASH_NO_CHANGE) && (hfunc != ETH_RSS_HASH_TOP)) {
|
||||
netdev_err(netdev,
|
||||
"hash func not supported (only Toeplitz hash)\n");
|
||||
if ((h->pdev->revision == 0x20 &&
|
||||
hfunc != ETH_RSS_HASH_TOP) || (hfunc != ETH_RSS_HASH_NO_CHANGE &&
|
||||
hfunc != ETH_RSS_HASH_TOP && hfunc != ETH_RSS_HASH_XOR)) {
|
||||
netdev_err(netdev, "hash func not supported\n");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
if (!indir) {
|
||||
netdev_err(netdev,
|
||||
"set rss failed for indir is empty\n");
|
||||
|
@ -2806,8 +2806,19 @@ static int hclge_get_rss(struct hnae3_handle *handle, u32 *indir,
|
||||
int i;
|
||||
|
||||
/* Get hash algorithm */
|
||||
if (hfunc)
|
||||
*hfunc = vport->rss_algo;
|
||||
if (hfunc) {
|
||||
switch (vport->rss_algo) {
|
||||
case HCLGE_RSS_HASH_ALGO_TOEPLITZ:
|
||||
*hfunc = ETH_RSS_HASH_TOP;
|
||||
break;
|
||||
case HCLGE_RSS_HASH_ALGO_SIMPLE:
|
||||
*hfunc = ETH_RSS_HASH_XOR;
|
||||
break;
|
||||
default:
|
||||
*hfunc = ETH_RSS_HASH_UNKNOWN;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Get the RSS Key required by the user */
|
||||
if (key)
|
||||
@ -2831,12 +2842,20 @@ static int hclge_set_rss(struct hnae3_handle *handle, const u32 *indir,
|
||||
|
||||
/* Set the RSS Hash Key if specififed by the user */
|
||||
if (key) {
|
||||
|
||||
if (hfunc == ETH_RSS_HASH_TOP ||
|
||||
hfunc == ETH_RSS_HASH_NO_CHANGE)
|
||||
switch (hfunc) {
|
||||
case ETH_RSS_HASH_TOP:
|
||||
hash_algo = HCLGE_RSS_HASH_ALGO_TOEPLITZ;
|
||||
else
|
||||
break;
|
||||
case ETH_RSS_HASH_XOR:
|
||||
hash_algo = HCLGE_RSS_HASH_ALGO_SIMPLE;
|
||||
break;
|
||||
case ETH_RSS_HASH_NO_CHANGE:
|
||||
hash_algo = vport->rss_algo;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ret = hclge_set_rss_algo_key(hdev, hash_algo, key);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
Loading…
Reference in New Issue
Block a user