Message ID | 158257056094.10327.890174763453610916.stgit@anambiarhost.jf.intel.com |
---|---|
State | Accepted |
Delegated to: | David Miller |
Headers | show |
Series | [net,v2] net: Fix Tx hash bound checking | expand |
From: Amritha Nambiar <amritha.nambiar@intel.com> Date: Mon, 24 Feb 2020 10:56:00 -0800 > Fixes the lower and upper bounds when there are multiple TCs and > traffic is on the the same TC on the same device. > > The lower bound is represented by 'qoffset' and the upper limit for > hash value is 'qcount + qoffset'. This gives a clean Rx to Tx queue > mapping when there are multiple TCs, as the queue indices for upper TCs > will be offset by 'qoffset'. > > v2: Fixed commit description based on comments. > > Fixes: 1b837d489e06 ("net: Revoke export for __skb_tx_hash, update it to just be static skb_tx_hash") > Fixes: eadec877ce9c ("net: Add support for subordinate traffic classes to netdev_pick_tx") > Signed-off-by: Amritha Nambiar <amritha.nambiar@intel.com> > Reviewed-by: Alexander Duyck <alexander.h.duyck@linux.intel.com> > Reviewed-by: Sridhar Samudrala <sridhar.samudrala@intel.com> Applied and queued up for -stable, thanks.
diff --git a/net/core/dev.c b/net/core/dev.c index e10bd680dc03..c6c985fe7b1b 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -3076,6 +3076,8 @@ static u16 skb_tx_hash(const struct net_device *dev, if (skb_rx_queue_recorded(skb)) { hash = skb_get_rx_queue(skb); + if (hash >= qoffset) + hash -= qoffset; while (unlikely(hash >= qcount)) hash -= qcount; return hash + qoffset;