Lines Matching refs:rxfh
153 struct ethtool_rxfh_param rxfh = {}; in rss_prepare_get() local
165 rxfh.indir_size = data->indir_size; in rss_prepare_get()
166 rxfh.indir = data->indir_table; in rss_prepare_get()
167 rxfh.key_size = data->hkey_size; in rss_prepare_get()
168 rxfh.key = data->hkey; in rss_prepare_get()
170 ret = ops->get_rxfh(dev, &rxfh); in rss_prepare_get()
174 data->hfunc = rxfh.hfunc; in rss_prepare_get()
175 data->input_xfrm = rxfh.input_xfrm; in rss_prepare_get()
620 struct rss_reply_data *data, struct ethtool_rxfh_param *rxfh, in rss_set_prep_indir() argument
646 if (rxfh->rss_context) { in rss_set_prep_indir()
659 rxfh->indir_size = data->indir_size; in rss_set_prep_indir()
660 alloc_size = array_size(data->indir_size, sizeof(rxfh->indir[0])); in rss_set_prep_indir()
661 rxfh->indir = kzalloc(alloc_size, GFP_KERNEL); in rss_set_prep_indir()
662 if (!rxfh->indir) in rss_set_prep_indir()
665 nla_memcpy(rxfh->indir, tb[ETHTOOL_A_RSS_INDIR], alloc_size); in rss_set_prep_indir()
667 if (rxfh->indir[i] < num_rx_rings) in rss_set_prep_indir()
672 i, rxfh->indir[i]); in rss_set_prep_indir()
680 rxfh->indir[i] = rxfh->indir[i % user_size]; in rss_set_prep_indir()
683 rxfh->indir[i] = in rss_set_prep_indir()
687 *mod |= memcmp(rxfh->indir, data->indir_table, data->indir_size); in rss_set_prep_indir()
692 kfree(rxfh->indir); in rss_set_prep_indir()
693 rxfh->indir = NULL; in rss_set_prep_indir()
699 struct rss_reply_data *data, struct ethtool_rxfh_param *rxfh, in rss_set_prep_hkey() argument
712 rxfh->key_size = data->hkey_size; in rss_set_prep_hkey()
713 rxfh->key = kmemdup(data->hkey, data->hkey_size, GFP_KERNEL); in rss_set_prep_hkey()
714 if (!rxfh->key) in rss_set_prep_hkey()
717 ethnl_update_binary(rxfh->key, rxfh->key_size, tb[ETHTOOL_A_RSS_HKEY], in rss_set_prep_hkey()
804 struct rss_reply_data *data, struct ethtool_rxfh_param *rxfh) in rss_set_ctx_update() argument
808 if (rxfh->indir) { in rss_set_ctx_update()
810 ethtool_rxfh_context_indir(ctx)[i] = rxfh->indir[i]; in rss_set_ctx_update()
813 if (rxfh->key) { in rss_set_ctx_update()
814 memcpy(ethtool_rxfh_context_key(ctx), rxfh->key, in rss_set_ctx_update()
816 ctx->key_configured = !!rxfh->key_size; in rss_set_ctx_update()
818 if (rxfh->hfunc != ETH_RSS_HASH_NO_CHANGE) in rss_set_ctx_update()
819 ctx->hfunc = rxfh->hfunc; in rss_set_ctx_update()
820 if (rxfh->input_xfrm != RXH_XFRM_NO_CHANGE) in rss_set_ctx_update()
821 ctx->input_xfrm = rxfh->input_xfrm; in rss_set_ctx_update()
832 struct ethtool_rxfh_param rxfh = {}; in ethnl_rss_set() local
845 rxfh.rss_context = request->rss_context; in ethnl_rss_set()
847 ret = rss_set_prep_indir(dev, info, &data, &rxfh, &indir_reset, &mod); in ethnl_rss_set()
852 rxfh.hfunc = data.hfunc; in ethnl_rss_set()
853 ethnl_update_u8(&rxfh.hfunc, tb[ETHTOOL_A_RSS_HFUNC], &mod); in ethnl_rss_set()
854 if (rxfh.hfunc == data.hfunc) in ethnl_rss_set()
855 rxfh.hfunc = ETH_RSS_HASH_NO_CHANGE; in ethnl_rss_set()
857 ret = rss_set_prep_hkey(dev, info, &data, &rxfh, &mod); in ethnl_rss_set()
861 rxfh.input_xfrm = data.input_xfrm; in ethnl_rss_set()
862 ethnl_update_u8(&rxfh.input_xfrm, tb[ETHTOOL_A_RSS_INPUT_XFRM], &mod); in ethnl_rss_set()
863 xfrm_sym = rxfh.input_xfrm || data.input_xfrm; in ethnl_rss_set()
864 if (rxfh.input_xfrm == data.input_xfrm) in ethnl_rss_set()
865 rxfh.input_xfrm = RXH_XFRM_NO_CHANGE; in ethnl_rss_set()
885 else if (!rxfh.rss_context) in ethnl_rss_set()
886 ret = ops->set_rxfh(dev, &rxfh, info->extack); in ethnl_rss_set()
888 ret = ops->modify_rxfh_context(dev, ctx, &rxfh, info->extack); in ethnl_rss_set()
893 rss_set_ctx_update(ctx, tb, &data, &rxfh); in ethnl_rss_set()
901 kfree(rxfh.key); in ethnl_rss_set()
903 kfree(rxfh.indir); in ethnl_rss_set()
995 struct ethtool_rxfh_param rxfh = {}; in ethnl_rss_create_doit() local
1037 ret = rss_set_prep_indir(dev, info, &data, &rxfh, &indir_dflt, &mod); in ethnl_rss_create_doit()
1041 ethnl_update_u8(&rxfh.hfunc, tb[ETHTOOL_A_RSS_HFUNC], &mod); in ethnl_rss_create_doit()
1043 ret = rss_set_prep_hkey(dev, info, &data, &rxfh, &mod); in ethnl_rss_create_doit()
1047 rxfh.input_xfrm = RXH_XFRM_NO_CHANGE; in ethnl_rss_create_doit()
1048 ethnl_update_u8(&rxfh.input_xfrm, tb[ETHTOOL_A_RSS_INPUT_XFRM], &mod); in ethnl_rss_create_doit()
1070 rxfh.rss_context = req.rss_context; in ethnl_rss_create_doit()
1072 ret = ops->create_rxfh_context(dev, ctx, &rxfh, info->extack); in ethnl_rss_create_doit()
1077 WARN_ON_ONCE(!rxfh.key && ops->rxfh_per_ctx_key && in ethnl_rss_create_doit()
1082 rss_set_ctx_update(ctx, tb, &data, &rxfh); in ethnl_rss_create_doit()
1108 kfree(rxfh.key); in ethnl_rss_create_doit()
1110 kfree(rxfh.indir); in ethnl_rss_create_doit()