Skip to content

Commit

Permalink
net: systemport: Simplify queue mapping logic
Browse files Browse the repository at this point in the history
The use of a bitmap speeds up the finding of the first available queue
to which we could start establishing the mapping for, but we still have
to loop over all slave network devices to set them up. Simplify the
logic to have a single loop, and use the fact that a correctly
configured ring has inspect set to true. This will make things simpler
to unwind during device unregistration.

Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
ffainelli authored and davem330 committed Nov 6, 2018
1 parent c04a17d commit 25c4407
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 9 deletions.
17 changes: 9 additions & 8 deletions drivers/net/ethernet/broadcom/bcmsysport.c
Original file line number Diff line number Diff line change
Expand Up @@ -2324,7 +2324,7 @@ static int bcm_sysport_map_queues(struct notifier_block *nb,
struct bcm_sysport_priv *priv;
struct net_device *slave_dev;
unsigned int num_tx_queues;
unsigned int q, start, port;
unsigned int q, qp, port;
struct net_device *dev;

priv = container_of(nb, struct bcm_sysport_priv, dsa_notifier);
Expand Down Expand Up @@ -2363,20 +2363,21 @@ static int bcm_sysport_map_queues(struct notifier_block *nb,

priv->per_port_num_tx_queues = num_tx_queues;

start = find_first_zero_bit(&priv->queue_bitmap, dev->num_tx_queues);
for (q = 0; q < num_tx_queues; q++) {
ring = &priv->tx_rings[q + start];
for (q = 0, qp = 0; q < dev->num_tx_queues && qp < num_tx_queues;
q++) {
ring = &priv->tx_rings[q];

if (ring->inspect)
continue;

/* Just remember the mapping actual programming done
* during bcm_sysport_init_tx_ring
*/
ring->switch_queue = q;
ring->switch_queue = qp;
ring->switch_port = port;
ring->inspect = true;
priv->ring_map[q + port * num_tx_queues] = ring;

/* Set all queues as being used now */
set_bit(q + start, &priv->queue_bitmap);
qp++;
}

return 0;
Expand Down
1 change: 0 additions & 1 deletion drivers/net/ethernet/broadcom/bcmsysport.h
Original file line number Diff line number Diff line change
Expand Up @@ -796,7 +796,6 @@ struct bcm_sysport_priv {
/* map information between switch port queues and local queues */
struct notifier_block dsa_notifier;
unsigned int per_port_num_tx_queues;
unsigned long queue_bitmap;
struct bcm_sysport_tx_ring *ring_map[DSA_MAX_PORTS * 8];

};
Expand Down

0 comments on commit 25c4407

Please sign in to comment.