On Tue, 2019-03-12 at 10:08 -0700, Greg Kroah-Hartman wrote: > 4.20-stable review patch. If anyone has any objections, please let me know. > > ------------------ > > [ Upstream commit c5acdbee22a1b200dde07effd26fd1f649e9ab8a ] > > The number of TSO enabled channels in HW can be different than the > number of total channels. There is no way to determined, at runtime, the > number of TSO capable channels and its safe to assume that if TSO is > enabled then at least channel 0 will be TSO capable. > > Lets always send TSO packets from Queue 0. > > Signed-off-by: Jose Abreu > Cc: Joao Pinto > Cc: David S. Miller > Cc: Giuseppe Cavallaro > Cc: Alexandre Torgue > Signed-off-by: David S. Miller > Signed-off-by: Sasha Levin > --- > drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 11 ++++++++++- > 1 file changed, 10 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c > index 5d83d6a7694b..f76f6ae3fa87 100644 > --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c > +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c > @@ -3033,8 +3033,17 @@ static netdev_tx_t stmmac_xmit(struct sk_buff *skb, struct net_device *dev) > > /* Manage oversized TCP frames for GMAC4 device */ > if (skb_is_gso(skb) && priv->tso) { > - if (skb_shinfo(skb)->gso_type & (SKB_GSO_TCPV4 | SKB_GSO_TCPV6)) > + if (skb_shinfo(skb)->gso_type & (SKB_GSO_TCPV4 | SKB_GSO_TCPV6)) { > + /* > + * There is no way to determine the number of TSO > + * capable Queues. Let's use always the Queue 0 > + * because if TSO is supported then at least this > + * one will be capable. > + */ > + skb_set_queue_mapping(skb, 0); This is the wrong place to change the queue mapping. stmmac_xmit() is called with a specific TX queue locked, and accessing a different TX queue results in a data race for all of that queue's state. I think this commit should be reverted upstream and in all stable branches. Instead, the driver should implement the ndo_select_queue operation and override the queue mapping there. Ben. > return stmmac_tso_xmit(skb, dev); > + } > } > > if (unlikely(stmmac_tx_avail(priv, queue) < nfrags + 1)) { -- Ben Hutchings If God had intended Man to program, we'd have been born with serial I/O ports.