Lines Matching defs:rxfh

153 	struct ethtool_rxfh_param rxfh = {};
165 rxfh.indir_size = data->indir_size;
166 rxfh.indir = data->indir_table;
167 rxfh.key_size = data->hkey_size;
168 rxfh.key = data->hkey;
170 ret = ops->get_rxfh(dev, &rxfh);
174 data->hfunc = rxfh.hfunc;
175 data->input_xfrm = rxfh.input_xfrm;
620 struct rss_reply_data *data, struct ethtool_rxfh_param *rxfh,
646 if (rxfh->rss_context) {
659 rxfh->indir_size = data->indir_size;
660 alloc_size = array_size(data->indir_size, sizeof(rxfh->indir[0]));
661 rxfh->indir = kzalloc(alloc_size, GFP_KERNEL);
662 if (!rxfh->indir)
665 nla_memcpy(rxfh->indir, tb[ETHTOOL_A_RSS_INDIR], alloc_size);
667 if (rxfh->indir[i] < num_rx_rings)
672 i, rxfh->indir[i]);
680 rxfh->indir[i] = rxfh->indir[i % user_size];
683 rxfh->indir[i] =
687 *mod |= memcmp(rxfh->indir, data->indir_table, data->indir_size);
692 kfree(rxfh->indir);
693 rxfh->indir = NULL;
699 struct rss_reply_data *data, struct ethtool_rxfh_param *rxfh,
712 rxfh->key_size = data->hkey_size;
713 rxfh->key = kmemdup(data->hkey, data->hkey_size, GFP_KERNEL);
714 if (!rxfh->key)
717 ethnl_update_binary(rxfh->key, rxfh->key_size, tb[ETHTOOL_A_RSS_HKEY],
804 struct rss_reply_data *data, struct ethtool_rxfh_param *rxfh)
808 if (rxfh->indir) {
810 ethtool_rxfh_context_indir(ctx)[i] = rxfh->indir[i];
813 if (rxfh->key) {
814 memcpy(ethtool_rxfh_context_key(ctx), rxfh->key,
816 ctx->key_configured = !!rxfh->key_size;
818 if (rxfh->hfunc != ETH_RSS_HASH_NO_CHANGE)
819 ctx->hfunc = rxfh->hfunc;
820 if (rxfh->input_xfrm != RXH_XFRM_NO_CHANGE)
821 ctx->input_xfrm = rxfh->input_xfrm;
832 struct ethtool_rxfh_param rxfh = {};
845 rxfh.rss_context = request->rss_context;
847 ret = rss_set_prep_indir(dev, info, &data, &rxfh, &indir_reset, &mod);
852 rxfh.hfunc = data.hfunc;
853 ethnl_update_u8(&rxfh.hfunc, tb[ETHTOOL_A_RSS_HFUNC], &mod);
854 if (rxfh.hfunc == data.hfunc)
855 rxfh.hfunc = ETH_RSS_HASH_NO_CHANGE;
857 ret = rss_set_prep_hkey(dev, info, &data, &rxfh, &mod);
861 rxfh.input_xfrm = data.input_xfrm;
862 ethnl_update_u8(&rxfh.input_xfrm, tb[ETHTOOL_A_RSS_INPUT_XFRM], &mod);
868 xfrm_sym = rxfh.input_xfrm || data.input_xfrm;
869 if (rxfh.input_xfrm == data.input_xfrm)
870 rxfh.input_xfrm = RXH_XFRM_NO_CHANGE;
890 else if (!rxfh.rss_context)
891 ret = ops->set_rxfh(dev, &rxfh, info->extack);
893 ret = ops->modify_rxfh_context(dev, ctx, &rxfh, info->extack);
898 rss_set_ctx_update(ctx, tb, &data, &rxfh);
906 kfree(rxfh.key);
908 kfree(rxfh.indir);
1000 struct ethtool_rxfh_param rxfh = {};
1042 ret = rss_set_prep_indir(dev, info, &data, &rxfh, &indir_dflt, &mod);
1046 ethnl_update_u8(&rxfh.hfunc, tb[ETHTOOL_A_RSS_HFUNC], &mod);
1048 ret = rss_set_prep_hkey(dev, info, &data, &rxfh, &mod);
1052 rxfh.input_xfrm = RXH_XFRM_NO_CHANGE;
1053 ethnl_update_u8(&rxfh.input_xfrm, tb[ETHTOOL_A_RSS_INPUT_XFRM], &mod);
1075 rxfh.rss_context = req.rss_context;
1077 ret = ops->create_rxfh_context(dev, ctx, &rxfh, info->extack);
1082 WARN_ON_ONCE(!rxfh.key && ops->rxfh_per_ctx_key &&
1086 /* Store the config from rxfh to Xarray.. */
1087 rss_set_ctx_update(ctx, tb, &data, &rxfh);
1113 kfree(rxfh.key);
1115 kfree(rxfh.indir);