static int nicvf_set_rxfh(struct net_device *dev, const u32 *indir, const u8 *hkey, u8 hfunc) { struct nicvf *nic = netdev_priv(dev); struct nicvf_rss_info *rss = &nic->rss_info; int idx; if ((nic->qs->rq_cnt <= 1) || (nic->cpi_alg != CPI_ALG_NONE)) { rss->enable = false; rss->hash_bits = 0; return -EIO; } /* We do not allow change in unsupported parameters */ if (hfunc != ETH_RSS_HASH_NO_CHANGE && hfunc != ETH_RSS_HASH_TOP) return -EOPNOTSUPP; rss->enable = true; if (indir) { for (idx = 0; idx < rss->rss_size; idx++) rss->ind_tbl[idx] = indir[idx]; } if (hkey) { memcpy(rss->key, hkey, RSS_HASH_KEY_SIZE * sizeof(u64)); nicvf_set_rss_key(nic); } nicvf_config_rss(nic); return 0; }
static int nicvf_set_rxfh(struct net_device *dev, const u32 *indir, const u8 *hkey, const u8 hfunc) { struct nicvf *nic = netdev_priv(dev); struct nicvf_rss_info *rss = &nic->rss_info; int idx; if (hfunc != ETH_RSS_HASH_NO_CHANGE && hfunc != ETH_RSS_HASH_TOP) return -EOPNOTSUPP; if (!rss->enable) { netdev_err(nic->netdev, "RSS is disabled, cannot change settings\n"); return -EIO; } if (indir) { for (idx = 0; idx < rss->rss_size; idx++) rss->ind_tbl[idx] = indir[idx]; } if (hkey) { memcpy(rss->key, hkey, RSS_HASH_KEY_SIZE * sizeof(u64)); nicvf_set_rss_key(nic); } nicvf_config_rss(nic); return 0; }