From patchwork Mon Feb 17 23:35:16 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hauke Mehrtens X-Patchwork-Id: 1239686 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=hauke-m.de Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 48M0jQ0XMkz9sNg for ; Tue, 18 Feb 2020 10:35:54 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726097AbgBQXfx (ORCPT ); Mon, 17 Feb 2020 18:35:53 -0500 Received: from mout-p-202.mailbox.org ([80.241.56.172]:30528 "EHLO mout-p-202.mailbox.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726047AbgBQXfw (ORCPT ); Mon, 17 Feb 2020 18:35:52 -0500 Received: from smtp2.mailbox.org (smtp2.mailbox.org [IPv6:2001:67c:2050:105:465:1:2:0]) (using TLSv1.2 with cipher ECDHE-RSA-CHACHA20-POLY1305 (256/256 bits)) (No client certificate requested) by mout-p-202.mailbox.org (Postfix) with ESMTPS id 48M0jL5crqzQkK0; Tue, 18 Feb 2020 00:35:50 +0100 (CET) X-Virus-Scanned: amavisd-new at heinlein-support.de Received: from smtp2.mailbox.org ([80.241.60.241]) by spamfilter05.heinlein-hosting.de (spamfilter05.heinlein-hosting.de [80.241.56.123]) (amavisd-new, port 10030) with ESMTP id 646KXWI6X3yA; Tue, 18 Feb 2020 00:35:47 +0100 (CET) From: Hauke Mehrtens To: davem@davemloft.net, linux@rempel-privat.de Cc: netdev@vger.kernel.org, jcliburn@gmail.com, chris.snook@gmail.com, Hauke Mehrtens Subject: [PATCH 1/3] ag71xx: Handle allocation errors in ag71xx_rings_init() Date: Tue, 18 Feb 2020 00:35:16 +0100 Message-Id: <20200217233518.3159-1-hauke@hauke-m.de> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Free the allocated resources in ag71xx_rings_init() in case ag71xx_ring_rx_init() returns an error. This is only a potential problem, I did not ran into this one. Signed-off-by: Hauke Mehrtens Fixes: d51b6ce441d3 ("net: ethernet: add ag71xx driver") --- drivers/net/ethernet/atheros/ag71xx.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/atheros/ag71xx.c b/drivers/net/ethernet/atheros/ag71xx.c index e95687a780fb..6f7281f38d5a 100644 --- a/drivers/net/ethernet/atheros/ag71xx.c +++ b/drivers/net/ethernet/atheros/ag71xx.c @@ -1133,6 +1133,7 @@ static int ag71xx_rings_init(struct ag71xx *ag) struct ag71xx_ring *tx = &ag->tx_ring; struct ag71xx_ring *rx = &ag->rx_ring; int ring_size, tx_size; + int ret; ring_size = BIT(tx->order) + BIT(rx->order); tx_size = BIT(tx->order); @@ -1145,9 +1146,8 @@ static int ag71xx_rings_init(struct ag71xx *ag) ring_size * AG71XX_DESC_SIZE, &tx->descs_dma, GFP_KERNEL); if (!tx->descs_cpu) { - kfree(tx->buf); - tx->buf = NULL; - return -ENOMEM; + ret = -ENOMEM; + goto err_free_buf; } rx->buf = &tx->buf[tx_size]; @@ -1155,7 +1155,21 @@ static int ag71xx_rings_init(struct ag71xx *ag) rx->descs_dma = tx->descs_dma + tx_size * AG71XX_DESC_SIZE; ag71xx_ring_tx_init(ag); - return ag71xx_ring_rx_init(ag); + ret = ag71xx_ring_rx_init(ag); + if (ret) + goto err_free_dma; + + return 0; + +err_free_dma: + dma_free_coherent(&ag->pdev->dev, ring_size * AG71XX_DESC_SIZE, + tx->descs_cpu, tx->descs_dma); + rx->buf = NULL; +err_free_buf: + kfree(tx->buf); + tx->buf = NULL; + + return ret; } static void ag71xx_rings_free(struct ag71xx *ag) From patchwork Mon Feb 17 23:35:17 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hauke Mehrtens X-Patchwork-Id: 1239687 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=hauke-m.de Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 48M0jR1XSBz9sRY for ; Tue, 18 Feb 2020 10:35:55 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726231AbgBQXfy (ORCPT ); Mon, 17 Feb 2020 18:35:54 -0500 Received: from mout-p-101.mailbox.org ([80.241.56.151]:10152 "EHLO mout-p-101.mailbox.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726054AbgBQXfx (ORCPT ); Mon, 17 Feb 2020 18:35:53 -0500 Received: from smtp2.mailbox.org (smtp2.mailbox.org [80.241.60.241]) (using TLSv1.2 with cipher ECDHE-RSA-CHACHA20-POLY1305 (256/256 bits)) (No client certificate requested) by mout-p-101.mailbox.org (Postfix) with ESMTPS id 48M0jM1wXBzKmbD; Tue, 18 Feb 2020 00:35:51 +0100 (CET) X-Virus-Scanned: amavisd-new at heinlein-support.de Received: from smtp2.mailbox.org ([80.241.60.241]) by spamfilter05.heinlein-hosting.de (spamfilter05.heinlein-hosting.de [80.241.56.123]) (amavisd-new, port 10030) with ESMTP id q6VG5-iJ1cyA; Tue, 18 Feb 2020 00:35:48 +0100 (CET) From: Hauke Mehrtens To: davem@davemloft.net, linux@rempel-privat.de Cc: netdev@vger.kernel.org, jcliburn@gmail.com, chris.snook@gmail.com, Hauke Mehrtens Subject: [PATCH 2/3] ag71xx: Call ag71xx_hw_disable() in case phy_conenct fails Date: Tue, 18 Feb 2020 00:35:17 +0100 Message-Id: <20200217233518.3159-2-hauke@hauke-m.de> In-Reply-To: <20200217233518.3159-1-hauke@hauke-m.de> References: <20200217233518.3159-1-hauke@hauke-m.de> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org When the ag71xx_phy_connect() failed only parts of the actions done previously in this function were reverted, because only ag71xx_rings_cleanup() was called. My system crashed the next time open() was called because napi_disable() was not called again and this resulted in two calls to napi_enable(), which is not allowed. Fix this by disabling the device again. Signed-off-by: Hauke Mehrtens Fixes: d51b6ce441d3 ("net: ethernet: add ag71xx driver") --- drivers/net/ethernet/atheros/ag71xx.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/atheros/ag71xx.c b/drivers/net/ethernet/atheros/ag71xx.c index 6f7281f38d5a..7d3fec009030 100644 --- a/drivers/net/ethernet/atheros/ag71xx.c +++ b/drivers/net/ethernet/atheros/ag71xx.c @@ -1263,18 +1263,18 @@ static int ag71xx_open(struct net_device *ndev) ret = ag71xx_hw_enable(ag); if (ret) - goto err; + return ret; ret = ag71xx_phy_connect(ag); if (ret) - goto err; + goto err_hw_disable; phy_start(ndev->phydev); return 0; -err: - ag71xx_rings_cleanup(ag); +err_hw_disable: + ag71xx_hw_disable(ag); return ret; } From patchwork Mon Feb 17 23:35:18 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hauke Mehrtens X-Patchwork-Id: 1239688 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=hauke-m.de Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 48M0tj0lQ5z9sPK for ; Tue, 18 Feb 2020 10:43:55 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726081AbgBQXnn (ORCPT ); Mon, 17 Feb 2020 18:43:43 -0500 Received: from mout-p-201.mailbox.org ([80.241.56.171]:15784 "EHLO mout-p-201.mailbox.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726002AbgBQXnn (ORCPT ); Mon, 17 Feb 2020 18:43:43 -0500 X-Greylist: delayed 469 seconds by postgrey-1.27 at vger.kernel.org; Mon, 17 Feb 2020 18:43:42 EST Received: from smtp2.mailbox.org (smtp2.mailbox.org [80.241.60.241]) (using TLSv1.2 with cipher ECDHE-RSA-CHACHA20-POLY1305 (256/256 bits)) (No client certificate requested) by mout-p-201.mailbox.org (Postfix) with ESMTPS id 48M0jN0pm5zQj5W; Tue, 18 Feb 2020 00:35:52 +0100 (CET) X-Virus-Scanned: amavisd-new at heinlein-support.de Received: from smtp2.mailbox.org ([80.241.60.241]) by spamfilter03.heinlein-hosting.de (spamfilter03.heinlein-hosting.de [80.241.56.117]) (amavisd-new, port 10030) with ESMTP id EebsR1Q1XS90; Tue, 18 Feb 2020 00:35:49 +0100 (CET) From: Hauke Mehrtens To: davem@davemloft.net, linux@rempel-privat.de Cc: netdev@vger.kernel.org, jcliburn@gmail.com, chris.snook@gmail.com, Hauke Mehrtens Subject: [PATCH 3/3] ag71xx: Run ag71xx_link_adjust() only when needed Date: Tue, 18 Feb 2020 00:35:18 +0100 Message-Id: <20200217233518.3159-3-hauke@hauke-m.de> In-Reply-To: <20200217233518.3159-1-hauke@hauke-m.de> References: <20200217233518.3159-1-hauke@hauke-m.de> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org My system printed this line every second: ag71xx 19000000.eth eth0: Link is Up - 1Gbps/Full - flow control off The function ag71xx_phy_link_adjust() was called by the PHY layer every second even when nothing changed. With this patch the old status is stored and the real the ag71xx_link_adjust() function is only called when something really changed. This way the update and also this print is only done once any more. Signed-off-by: Hauke Mehrtens Fixes: d51b6ce441d3 ("net: ethernet: add ag71xx driver") --- drivers/net/ethernet/atheros/ag71xx.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/atheros/ag71xx.c b/drivers/net/ethernet/atheros/ag71xx.c index 7d3fec009030..12eaf6d2518d 100644 --- a/drivers/net/ethernet/atheros/ag71xx.c +++ b/drivers/net/ethernet/atheros/ag71xx.c @@ -307,6 +307,10 @@ struct ag71xx { u32 msg_enable; const struct ag71xx_dcfg *dcfg; + unsigned int link; + unsigned int speed; + int duplex; + /* From this point onwards we're not looking at per-packet fields. */ void __iomem *mac_base; @@ -854,6 +858,7 @@ static void ag71xx_link_adjust(struct ag71xx *ag, bool update) if (!phydev->link && update) { ag71xx_hw_stop(ag); + phy_print_status(phydev); return; } @@ -907,8 +912,25 @@ static void ag71xx_link_adjust(struct ag71xx *ag, bool update) static void ag71xx_phy_link_adjust(struct net_device *ndev) { struct ag71xx *ag = netdev_priv(ndev); + struct phy_device *phydev = ndev->phydev; + int status_change = 0; + + if (phydev->link) { + if (ag->duplex != phydev->duplex || + ag->speed != phydev->speed) { + status_change = 1; + } + } + + if (phydev->link != ag->link) + status_change = 1; + + ag->link = phydev->link; + ag->duplex = phydev->duplex; + ag->speed = phydev->speed; - ag71xx_link_adjust(ag, true); + if (status_change) + ag71xx_link_adjust(ag, true); } static int ag71xx_phy_connect(struct ag71xx *ag)