| From 7a3f98b7e50910176de18b5017c445d82e62fc60 Mon Sep 17 00:00:00 2001 |
| From: Amritha Nambiar <amritha.nambiar@intel.com> |
| Date: Mon, 24 Feb 2020 10:56:00 -0800 |
| Subject: [PATCH] net: Fix Tx hash bound checking |
| |
| commit 6e11d1578fba8d09d03a286740ffcf336d53928c upstream. |
| |
| 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> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/net/core/dev.c b/net/core/dev.c |
| index b4634968a7f8..f9212f3b0aee 100644 |
| --- a/net/core/dev.c |
| +++ b/net/core/dev.c |
| @@ -2877,6 +2877,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; |
| -- |
| 2.7.4 |
| |