Received: by 2002:a05:6a10:6744:0:0:0:0 with SMTP id w4csp4749385pxu; Wed, 21 Oct 2020 04:33:55 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzNQsfcK1QuFYNrsLddRqBIEJN1qDgizQeBG6nk37BwL706bu+bevCB2sNPVKCWH2g+BI+D X-Received: by 2002:aa7:c714:: with SMTP id i20mr2745318edq.136.1603280035240; Wed, 21 Oct 2020 04:33:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1603280035; cv=none; d=google.com; s=arc-20160816; b=ruQ/DeutaHErM2FW9LxGvbXikipfY1cXQFWhrIYcPuhSNg/EVnnzqERAq1q3FFX/EK zbLpy3Cwxf8GFGNITn4db/ETor5d6rbgPXakE4jdqtLEzBE224qw5qIyD3s0JcJqjHIk P8ZGmgyk8O7iHBj5IxL6+ohUGU/zDVI8ItEV4/tAGGSpPKCZpxJu7YAaOaT3mKQ25IBf V9iX+waweaZugVv+bSMMYMGG8zu1G8bxn1V47kBM4401DscaCwMpxuEiEa+f32wHbj24 JFpE58fe27IEw3yxklhi+KTSJL67GaUz870CHfgaPqzNqlnwtpLmdlI9sUcLfYRUobx4 kB6g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:date:cc:to:from:subject:message-id; bh=uMTkNvufyh1qJ7QFykThOJ/B4jHzEsV2VFZlvvKQlWc=; b=DhSTVil10cwfMf4QtCTRJP9vYza1b0puJDqO+moHZaB2lHxhb0vjIfV6sc4TKgqEc2 yXeDyFMHeQQi+OpcnTfLK9mt7amFM1tx2j2s2mmZT4XG/v1RU03JVFH9TI286KImZ9h0 lYmZB46Mf0zSC7UensrwkT23ey+Za5mWYzxfdmUj8gvszlmetcqndZBmJWtrwyHnV/Vz /f3o7KW7ciRe7gx5SGK5cA217x4jstJ3Ws8CUgqN3EYDYgYC+NwJWHPn0rKsDpCc7TlU ZWwp0WkTrqCE/ZOQCjcEmGFFY5kiNzYD+eThUNxo9q+UDzUTpIkIW9OsFBtp6Z262kRU L0GA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id ec18si603184ejb.679.2020.10.21.04.33.33; Wed, 21 Oct 2020 04:33:55 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2410772AbgJUAAh (ORCPT + 99 others); Tue, 20 Oct 2020 20:00:37 -0400 Received: from kernel.crashing.org ([76.164.61.194]:43638 "EHLO kernel.crashing.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2410765AbgJUAAh (ORCPT ); Tue, 20 Oct 2020 20:00:37 -0400 Received: from localhost (gate.crashing.org [63.228.1.57]) (authenticated bits=0) by kernel.crashing.org (8.14.7/8.14.7) with ESMTP id 09L008ZS007548 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Tue, 20 Oct 2020 19:00:12 -0500 Message-ID: <86480db3977cfbf6750209c34a28c8f042be55fb.camel@kernel.crashing.org> Subject: Re: [PATCH] net: ftgmac100: Ensure tx descriptor updates are visible From: Benjamin Herrenschmidt To: Joel Stanley , Jakub Kicinski , "David S . Miller" , Dylan Hung Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-aspeed@lists.ozlabs.org Date: Wed, 21 Oct 2020 11:00:08 +1100 In-Reply-To: <20201020220639.130696-1-joel@jms.id.au> References: <20201020220639.130696-1-joel@jms.id.au> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.28.5-0ubuntu0.18.04.2 Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, 2020-10-21 at 08:36 +1030, Joel Stanley wrote: > We must ensure the tx descriptor updates are visible before updating > the tx pointer. > > This resolves the tx hangs observed on the 2600 when running iperf: To clarify the comment here. This doesn't ensure they are visible to the hardware but to other CPUs. This is the ordering vs start_xmit and tx_complete. Cheers, Ben. > root@ast2600:~# iperf3 -c 192.168.86.146 -R > Connecting to host 192.168.86.146, port 5201 > Reverse mode, remote host 192.168.86.146 is sending > [ 5] local 192.168.86.173 port 43886 connected to 192.168.86.146 > port 5201 > [ ID] Interval Transfer Bitrate > [ 5] 0.00-1.00 sec 90.7 MBytes 760 Mbits/sec > [ 5] 1.00-2.00 sec 91.7 MBytes 769 Mbits/sec > [ 5] 2.00-3.00 sec 91.7 MBytes 770 Mbits/sec > [ 5] 3.00-4.00 sec 91.7 MBytes 769 Mbits/sec > [ 5] 4.00-5.00 sec 91.8 MBytes 771 Mbits/sec > [ 5] 5.00-6.00 sec 91.8 MBytes 771 Mbits/sec > [ 5] 6.00-7.00 sec 91.9 MBytes 771 Mbits/sec > [ 5] 7.00-8.00 sec 91.4 MBytes 767 Mbits/sec > [ 5] 8.00-9.00 sec 91.3 MBytes 766 Mbits/sec > [ 5] 9.00-10.00 sec 91.9 MBytes 771 Mbits/sec > [ 5] 10.00-11.00 sec 91.8 MBytes 770 Mbits/sec > [ 5] 11.00-12.00 sec 91.8 MBytes 770 Mbits/sec > [ 5] 12.00-13.00 sec 90.6 MBytes 761 Mbits/sec > [ 5] 13.00-14.00 sec 45.2 KBytes 370 Kbits/sec > [ 5] 14.00-15.00 sec 0.00 Bytes 0.00 bits/sec > [ 5] 15.00-16.00 sec 0.00 Bytes 0.00 bits/sec > [ 5] 16.00-17.00 sec 0.00 Bytes 0.00 bits/sec > [ 5] 17.00-18.00 sec 0.00 Bytes 0.00 bits/sec > [ 67.031671] ------------[ cut here ]------------ > [ 67.036870] WARNING: CPU: 1 PID: 0 at net/sched/sch_generic.c:442 > dev_watchdog+0x2dc/0x300 > [ 67.046123] NETDEV WATCHDOG: eth2 (ftgmac100): transmit queue 0 > timed out > > Fixes: 52c0cae87465 ("ftgmac100: Remove tx descriptor accessors") > Signed-off-by: Joel Stanley > --- > drivers/net/ethernet/faraday/ftgmac100.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/drivers/net/ethernet/faraday/ftgmac100.c > b/drivers/net/ethernet/faraday/ftgmac100.c > index 331d4bdd4a67..15cdfeb135b0 100644 > --- a/drivers/net/ethernet/faraday/ftgmac100.c > +++ b/drivers/net/ethernet/faraday/ftgmac100.c > @@ -653,6 +653,11 @@ static bool ftgmac100_tx_complete_packet(struct > ftgmac100 *priv) > ftgmac100_free_tx_packet(priv, pointer, skb, txdes, ctl_stat); > txdes->txdes0 = cpu_to_le32(ctl_stat & priv- > >txdes0_edotr_mask); > > + /* Ensure the descriptor config is visible before setting the > tx > + * pointer. > + */ > + smp_wmb(); > + > priv->tx_clean_pointer = ftgmac100_next_tx_pointer(priv, > pointer); > > return true; > @@ -806,6 +811,11 @@ static netdev_tx_t > ftgmac100_hard_start_xmit(struct sk_buff *skb, > dma_wmb(); > first->txdes0 = cpu_to_le32(f_ctl_stat); > > + /* Ensure the descriptor config is visible before setting the > tx > + * pointer. > + */ > + smp_wmb(); > + > /* Update next TX pointer */ > priv->tx_pointer = pointer; >