lkml.org 
[lkml]   [2019]   [Apr]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH 4.20 105/171] net: stmmac: Send TSO packets always from Queue 0
    From
    Date
    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 <joabreu@synopsys.com>
    > Cc: Joao Pinto <jpinto@synopsys.com>
    > Cc: David S. Miller <davem@davemloft.net>
    > Cc: Giuseppe Cavallaro <peppe.cavallaro@st.com>
    > Cc: Alexandre Torgue <alexandre.torgue@st.com>
    > Signed-off-by: David S. Miller <davem@davemloft.net>
    > Signed-off-by: Sasha Levin <sashal@kernel.org>
    > ---
    > 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.


    [unhandled content-type:application/pgp-signature]
    \
     
     \ /
      Last update: 2019-04-08 22:24    [W:4.229 / U:0.184 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site