mirror of https://gitee.com/openkylin/linux.git
ixgbe: move TC_PRIO_CONTROL check into ixgbe_select_queue()
Move TC_PRIO_CONTROL check and queue remapping into ixgbe_select_queue(). Remapping queues after the qdisc can result in the wrong qdisc queue being stopped with netif_stop_subqueue(). Even if this is resolved and the correct queue is stopped it can result in a queue being blocked by TC_PRIO_CONTROL frames uneccesarily. Moving this into the select_queue routine maintains alignment between tx_rings and qdisc queues. Signed-off-by: John Fastabend <john.r.fastabend@intel.com> Acked-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
da3f5cf1f8
commit
2ea186ae53
|
@ -5639,8 +5639,14 @@ static u16 ixgbe_select_queue(struct net_device *dev, struct sk_buff *skb)
|
||||||
return txq;
|
return txq;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (adapter->flags & IXGBE_FLAG_DCB_ENABLED)
|
if (adapter->flags & IXGBE_FLAG_DCB_ENABLED) {
|
||||||
return (skb->vlan_tci & IXGBE_TX_FLAGS_VLAN_PRIO_MASK) >> 13;
|
if (skb->priority == TC_PRIO_CONTROL)
|
||||||
|
txq = adapter->ring_feature[RING_F_DCB].indices-1;
|
||||||
|
else
|
||||||
|
txq = (skb->vlan_tci & IXGBE_TX_FLAGS_VLAN_PRIO_MASK)
|
||||||
|
>> 13;
|
||||||
|
return txq;
|
||||||
|
}
|
||||||
|
|
||||||
return skb_tx_hash(dev, skb);
|
return skb_tx_hash(dev, skb);
|
||||||
}
|
}
|
||||||
|
@ -5667,14 +5673,9 @@ static netdev_tx_t ixgbe_xmit_frame(struct sk_buff *skb,
|
||||||
tx_flags <<= IXGBE_TX_FLAGS_VLAN_SHIFT;
|
tx_flags <<= IXGBE_TX_FLAGS_VLAN_SHIFT;
|
||||||
tx_flags |= IXGBE_TX_FLAGS_VLAN;
|
tx_flags |= IXGBE_TX_FLAGS_VLAN;
|
||||||
} else if (adapter->flags & IXGBE_FLAG_DCB_ENABLED) {
|
} else if (adapter->flags & IXGBE_FLAG_DCB_ENABLED) {
|
||||||
if (skb->priority != TC_PRIO_CONTROL) {
|
|
||||||
tx_flags |= ((skb->queue_mapping & 0x7) << 13);
|
tx_flags |= ((skb->queue_mapping & 0x7) << 13);
|
||||||
tx_flags <<= IXGBE_TX_FLAGS_VLAN_SHIFT;
|
tx_flags <<= IXGBE_TX_FLAGS_VLAN_SHIFT;
|
||||||
tx_flags |= IXGBE_TX_FLAGS_VLAN;
|
tx_flags |= IXGBE_TX_FLAGS_VLAN;
|
||||||
} else {
|
|
||||||
skb->queue_mapping =
|
|
||||||
adapter->ring_feature[RING_F_DCB].indices-1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tx_ring = adapter->tx_ring[skb->queue_mapping];
|
tx_ring = adapter->tx_ring[skb->queue_mapping];
|
||||||
|
|
Loading…
Reference in New Issue