On Wed, 11 Dec 2019 14:26:27 -0800, Haiyang Zhang wrote: > Host can provide send indirection table messages anytime after RSS is > enabled by calling rndis_filter_set_rss_param(). So the host provided > table values may be overwritten by the initialization in > rndis_set_subchannel(). > > To prevent this problem, move the tx_table initialization before calling > rndis_filter_set_rss_param(). > > Fixes: a6fb6aa3cfa9 ("hv_netvsc: Set tx_table to equal weight after subchannels open") > Signed-off-by: Haiyang Zhang <haiyangz@xxxxxxxxxxxxx> Applied, but there are two more problems with this code: - you should not reset the indirection table if it was configured by the user to something other than the default (use the netif_is_rxfh_configured() helper to check for that) - you should use the ethtool_rxfh_indir_default() wrapper Please fix the former problem in the net tree, and after net is merged into linux/master and net-next in a week or two please follow up with the fix for the latter for net-next. > diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c > index 206b4e7..05bc5ec8 100644 > --- a/drivers/net/hyperv/rndis_filter.c > +++ b/drivers/net/hyperv/rndis_filter.c > @@ -1171,6 +1171,9 @@ int rndis_set_subchannel(struct net_device *ndev, > wait_event(nvdev->subchan_open, > atomic_read(&nvdev->open_chn) == nvdev->num_chn); > > + for (i = 0; i < VRSS_SEND_TAB_SIZE; i++) > + ndev_ctx->tx_table[i] = i % nvdev->num_chn; > + > /* ignore failures from setting rss parameters, still have channels */ > if (dev_info) > rndis_filter_set_rss_param(rdev, dev_info->rss_key); > @@ -1180,9 +1183,6 @@ int rndis_set_subchannel(struct net_device *ndev, > netif_set_real_num_tx_queues(ndev, nvdev->num_chn); > netif_set_real_num_rx_queues(ndev, nvdev->num_chn); > > - for (i = 0; i < VRSS_SEND_TAB_SIZE; i++) > - ndev_ctx->tx_table[i] = i % nvdev->num_chn; > - > return 0; > } >