From: Haiyang Zhang <haiya...@exchange.microsoft.com> Date: Sat, 8 Apr 2017 17:53:59 -0700
> diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c > index f24c289..0a129cb 100644 > --- a/drivers/net/hyperv/netvsc_drv.c > +++ b/drivers/net/hyperv/netvsc_drv.c > @@ -211,9 +211,14 @@ static u16 netvsc_select_queue(struct net_device *ndev, > struct sk_buff *skb, > int q_idx = sk_tx_queue_get(sk); > > if (q_idx < 0 || skb->ooo_okay || q_idx >= num_tx_queues) { > - u16 hash = __skb_tx_hash(ndev, skb, VRSS_SEND_TAB_SIZE); > + u16 hash; > int new_idx; > > + if (sk) > + skb_set_hash_from_sk(skb, sk); > + > + hash = __skb_tx_hash(ndev, skb, VRSS_SEND_TAB_SIZE); Please do not do this. TCP performs this operation for you for every pack it emits. And also every socket family that uses skb_set_owner_w() either directly or indirectly gets this done as well. I do not want to see drivers start to get peppered with calls to this thing. Explain the case which is missing that matters, and we can address that instead. Thanks.