All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net] net: systemport: Fixed queue mapping in internal ring map
@ 2020-01-16 21:08 Florian Fainelli
  2020-01-17 12:32 ` David Miller
  0 siblings, 1 reply; 3+ messages in thread
From: Florian Fainelli @ 2020-01-16 21:08 UTC (permalink / raw)
  To: netdev
  Cc: Florian Fainelli, David S. Miller,
	open list:BROADCOM SYSTEMPORT ETHERNET DRIVER, open list

We would not be transmitting using the correct SYSTEMPORT transmit queue
during ndo_select_queue() which looks up the internal TX ring map
because while establishing the mapping we would be off by 4, so for
instance, when we populate switch port mappings we would be doing:

switch port 0, queue 0 -> ring index #0
switch port 0, queue 1 -> ring index #1
...
switch port 0, queue 3 -> ring index #3
switch port 1, queue 0 -> ring index #8 (4 + 4 * 1)
...

instead of using ring index #4. This would cause our ndo_select_queue()
to use the fallback queue mechanism which would pick up an incorrect
ring for that switch port. Fix this by using the correct switch queue
number instead of SYSTEMPORT queue number.

Fixes: 3ed67ca243b3 ("net: systemport: Simplify queue mapping logic")
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
---
 drivers/net/ethernet/broadcom/bcmsysport.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/bcmsysport.c b/drivers/net/ethernet/broadcom/bcmsysport.c
index 825af709708e..d6b1a153f9df 100644
--- a/drivers/net/ethernet/broadcom/bcmsysport.c
+++ b/drivers/net/ethernet/broadcom/bcmsysport.c
@@ -2323,7 +2323,7 @@ static int bcm_sysport_map_queues(struct notifier_block *nb,
 		ring->switch_queue = qp;
 		ring->switch_port = port;
 		ring->inspect = true;
-		priv->ring_map[q + port * num_tx_queues] = ring;
+		priv->ring_map[qp + port * num_tx_queues] = ring;
 		qp++;
 	}
 
@@ -2338,7 +2338,7 @@ static int bcm_sysport_unmap_queues(struct notifier_block *nb,
 	struct net_device *slave_dev;
 	unsigned int num_tx_queues;
 	struct net_device *dev;
-	unsigned int q, port;
+	unsigned int q, qp, port;
 
 	priv = container_of(nb, struct bcm_sysport_priv, dsa_notifier);
 	if (priv->netdev != info->master)
@@ -2364,7 +2364,8 @@ static int bcm_sysport_unmap_queues(struct notifier_block *nb,
 			continue;
 
 		ring->inspect = false;
-		priv->ring_map[q + port * num_tx_queues] = NULL;
+		qp = ring->switch_queue;
+		priv->ring_map[qp + port * num_tx_queues] = NULL;
 	}
 
 	return 0;
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH net] net: systemport: Fixed queue mapping in internal ring map
  2020-01-16 21:08 [PATCH net] net: systemport: Fixed queue mapping in internal ring map Florian Fainelli
@ 2020-01-17 12:32 ` David Miller
  2020-01-19 17:48   ` Florian Fainelli
  0 siblings, 1 reply; 3+ messages in thread
From: David Miller @ 2020-01-17 12:32 UTC (permalink / raw)
  To: f.fainelli; +Cc: netdev, bcm-kernel-feedback-list, linux-kernel

From: Florian Fainelli <f.fainelli@gmail.com>
Date: Thu, 16 Jan 2020 13:08:58 -0800

> We would not be transmitting using the correct SYSTEMPORT transmit queue
> during ndo_select_queue() which looks up the internal TX ring map
> because while establishing the mapping we would be off by 4, so for
> instance, when we populate switch port mappings we would be doing:
> 
> switch port 0, queue 0 -> ring index #0
> switch port 0, queue 1 -> ring index #1
> ...
> switch port 0, queue 3 -> ring index #3
> switch port 1, queue 0 -> ring index #8 (4 + 4 * 1)
> ...
> 
> instead of using ring index #4. This would cause our ndo_select_queue()
> to use the fallback queue mechanism which would pick up an incorrect
> ring for that switch port. Fix this by using the correct switch queue
> number instead of SYSTEMPORT queue number.
> 
> Fixes: 3ed67ca243b3 ("net: systemport: Simplify queue mapping logic")
> Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>

Applied, but I had to fix the SHA1-ID of the Fixes tag to be:

    Fixes: 25c440704661 ("net: systemport: Simplify queue mapping logic")

Thanks.

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH net] net: systemport: Fixed queue mapping in internal ring map
  2020-01-17 12:32 ` David Miller
@ 2020-01-19 17:48   ` Florian Fainelli
  0 siblings, 0 replies; 3+ messages in thread
From: Florian Fainelli @ 2020-01-19 17:48 UTC (permalink / raw)
  To: David Miller; +Cc: netdev, bcm-kernel-feedback-list, linux-kernel



On 1/17/2020 4:32 AM, David Miller wrote:
> From: Florian Fainelli <f.fainelli@gmail.com>
> Date: Thu, 16 Jan 2020 13:08:58 -0800
> 
>> We would not be transmitting using the correct SYSTEMPORT transmit queue
>> during ndo_select_queue() which looks up the internal TX ring map
>> because while establishing the mapping we would be off by 4, so for
>> instance, when we populate switch port mappings we would be doing:
>>
>> switch port 0, queue 0 -> ring index #0
>> switch port 0, queue 1 -> ring index #1
>> ...
>> switch port 0, queue 3 -> ring index #3
>> switch port 1, queue 0 -> ring index #8 (4 + 4 * 1)
>> ...
>>
>> instead of using ring index #4. This would cause our ndo_select_queue()
>> to use the fallback queue mechanism which would pick up an incorrect
>> ring for that switch port. Fix this by using the correct switch queue
>> number instead of SYSTEMPORT queue number.
>>
>> Fixes: 3ed67ca243b3 ("net: systemport: Simplify queue mapping logic")
>> Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
> 
> Applied, but I had to fix the SHA1-ID of the Fixes tag to be:
> 
>     Fixes: 25c440704661 ("net: systemport: Simplify queue mapping logic")

Just like the other patch what happened is that the check_fixes script
from Stephen was able to resolve this incorrect SHA1 because I have both
the Broadcom STB downstream remote configured as well as upstream and
the script was not yet updated to make sure this was an object that can
be reached in the upstream remotes (yours, Linus...). This should be
corrected now, sorry about that.
-- 
Florian

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2020-01-19 17:48 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-16 21:08 [PATCH net] net: systemport: Fixed queue mapping in internal ring map Florian Fainelli
2020-01-17 12:32 ` David Miller
2020-01-19 17:48   ` Florian Fainelli

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.