From patchwork Thu Oct 11 20:36:56 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heiner Kallweit X-Patchwork-Id: 982708 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 (mailfrom) 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=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="GpNlMG8G"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 42WN7x64Grz9s8J for ; Fri, 12 Oct 2018 07:37:49 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725932AbeJLEGm (ORCPT ); Fri, 12 Oct 2018 00:06:42 -0400 Received: from mail-wr1-f65.google.com ([209.85.221.65]:39194 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725819AbeJLEGm (ORCPT ); Fri, 12 Oct 2018 00:06:42 -0400 Received: by mail-wr1-f65.google.com with SMTP id 61-v6so11121415wrb.6 for ; Thu, 11 Oct 2018 13:37:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:from:to:cc:references:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=GIM8xIIBoLabpibDsFPkSeqd7DxdEVU6JREZSXVpa4w=; b=GpNlMG8GJb7kZzZdFgn4EIucvUKP2RfWFLdjI4Pu6rfDX8CrVZSpLqgj1FflQb1smD gjk9sKtYvoI6FLBOBmUxQMoGz72NrWAq4JX0KA+4+pmXWxYLRZkPgFjsd1b8J+lCrEZM nlV/AB7tetH46Vbz61NnpPCMSzhu3M1AYF2vjRIyurfajFNV5c66I4r3PAYY06mVOqJD ZGd3Fjbzps+PPgLvBtuI77iZL7h2v63iFqVUeujH4Un9o8NMEpjvCP+5ZNyLD7+WQAcr lQ6wJAqMenOSt47wBd9iEvz/yoBESUHdMiXiSxWoHRpsPXOF03oV8ur01nqAJ0khD9pG gSMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:references:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=GIM8xIIBoLabpibDsFPkSeqd7DxdEVU6JREZSXVpa4w=; b=J9EMdaXdrKLpRBnm8IT8XihnuUl7QigDtyC2je2w+9kmP0YbweEmuQ061MF4/DHInS TlkY2cD/E40GnsaAdL+IPp8kRc1XCruPzKq5UC+Ez+MMC2CqtTnU6Poq1atpDX1DFlD6 j9TgoQWoZcLOeb5avYikZPwwANM+2got6zDEVd+7gYYKjiJiXzgfKdHkymgUr8vxesNc uER3qtJ1H00/dH8Rlp1+/LWlKbEg3rWzZ1tXbC597ypZ/gw0td5s9QIs0dLaCSJnlqAE BbVv3Gf2uUirBXnq41q87dRzl9dDjfxHEq8SuWTQ0m2KDjwJ92uh94JILrB4bD32XQw6 124w== X-Gm-Message-State: ABuFfogrG4jdBeETN3Y10AUvrGAGPsLZRtPewUlLnt+IgWl6H9j3W9J2 1lGa+9uedYmm+no5N90kwcIZ3SV86Mc= X-Google-Smtp-Source: ACcGV62WvDmreVKNBH6aYA+3GdrbZjO2FgexX6nC6STzxPQ2DnQxLbOD4GcAyfVlM4/cpEK6r5OAcA== X-Received: by 2002:a5d:4b50:: with SMTP id w16-v6mr1142689wrs.173.1539290265918; Thu, 11 Oct 2018 13:37:45 -0700 (PDT) Received: from ?IPv6:2003:ea:8bd4:3f00:6c58:f76b:a44f:4c5e? (p200300EA8BD43F006C58F76BA44F4C5E.dip0.t-ipconnect.de. [2003:ea:8bd4:3f00:6c58:f76b:a44f:4c5e]) by smtp.googlemail.com with ESMTPSA id y3sm18071788wrw.11.2018.10.11.13.37.45 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 11 Oct 2018 13:37:45 -0700 (PDT) Subject: [PATCH net-next 1/2] net: phy: improve handling of PHY_RUNNING in state machine From: Heiner Kallweit To: Andrew Lunn , Florian Fainelli , David Miller Cc: "netdev@vger.kernel.org" References: Message-ID: <4bd37a90-675b-7c62-ba4e-a239b812862a@gmail.com> Date: Thu, 11 Oct 2018 22:36:56 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Handling of state PHY_RUNNING seems to be more complex than it needs to be. If not polling, then we don't have to do anything, we'll receive an interrupt and go to state PHY_CHANGELINK once the link goes down. If polling and link is down, we don't have to go the extra mile over PHY_CHANGELINK and call phy_read_status() again but can set status PHY_NOLINK directly. Signed-off-by: Heiner Kallweit --- drivers/net/phy/phy.c | 29 +++++++++-------------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c index 704428211..696955d38 100644 --- a/drivers/net/phy/phy.c +++ b/drivers/net/phy/phy.c @@ -941,7 +941,6 @@ void phy_state_machine(struct work_struct *work) bool needs_aneg = false, do_suspend = false; enum phy_state old_state; int err = 0; - int old_link; mutex_lock(&phydev->lock); @@ -1025,26 +1024,16 @@ void phy_state_machine(struct work_struct *work) } break; case PHY_RUNNING: - /* Only register a CHANGE if we are polling and link changed - * since latest checking. - */ - if (phy_polling_mode(phydev)) { - old_link = phydev->link; - err = phy_read_status(phydev); - if (err) - break; + if (!phy_polling_mode(phydev)) + break; - if (old_link != phydev->link) - phydev->state = PHY_CHANGELINK; - } - /* - * Failsafe: check that nobody set phydev->link=0 between two - * poll cycles, otherwise we won't leave RUNNING state as long - * as link remains down. - */ - if (!phydev->link && phydev->state == PHY_RUNNING) { - phydev->state = PHY_CHANGELINK; - phydev_err(phydev, "no link in PHY_RUNNING\n"); + err = phy_read_status(phydev); + if (err) + break; + + if (!phydev->link) { + phydev->state = PHY_NOLINK; + phy_link_down(phydev, true); } break; case PHY_CHANGELINK: From patchwork Thu Oct 11 20:37:38 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heiner Kallweit X-Patchwork-Id: 982709 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 (mailfrom) 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=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="vXsYR2Eg"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 42WN7y6fKGz9sBZ for ; Fri, 12 Oct 2018 07:37:50 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726290AbeJLEGo (ORCPT ); Fri, 12 Oct 2018 00:06:44 -0400 Received: from mail-wm1-f65.google.com ([209.85.128.65]:33460 "EHLO mail-wm1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725819AbeJLEGo (ORCPT ); Fri, 12 Oct 2018 00:06:44 -0400 Received: by mail-wm1-f65.google.com with SMTP id y140-v6so16568196wmd.0 for ; Thu, 11 Oct 2018 13:37:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:from:to:cc:references:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=Xn8e/UPvwc1LgLmaMrL8mZxt2cfDnqtE/P6R8bOxovc=; b=vXsYR2Eg6SJPg8yWPaC8tobUPW7+hpHmXdqdyVMy77NeOTHRboz73hTmoXGOig2MKa ytAFSVt/4Ty6nLwqK8MZ2O1uvQFosZboQ/+s5670BfOw51jbKwGyFLTTsfJPzNVnQuoA 1FyiB41uxmllQPZtB6/0gavJuPn8oT6NUpeenM6AKfwFbKa6MJYbU2iE3g67mcVKEMb/ WXnZbdgzygULGZlWFdxjO954U3Kaney+zvagxuIn3DIBHXzR3xgchBUVqSD76MiktGWb +s80l/cjKX7Vfod99rlH6/Jjcqsh5+cFsgL6dlqInFBQpGzwKdqwgDmU3zS/s5fdLrwj mThQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:references:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=Xn8e/UPvwc1LgLmaMrL8mZxt2cfDnqtE/P6R8bOxovc=; b=ZnWz9kEL5pMS7gZp9And7iYhi/C+kSxwep6y0MqDy+HFUDmrDNEo/Bh7LxhSTtUkeh aYTc4ioAnNAW9hzkWm8JjzR9CaLXaP4+ei/SaRpRfNk4x2A9RUc7wRC2E2TvVeFCEY1j rG5o8JDWi6kV7zTCdwWL5Wz7+Yr9EpAWc8XIwNU1CVo/d2bP3PHDCRMKq1r4+u4ehYkI y+sK0PTzpa6w3bjWETGhAboz1Mnubp4nkSHeM6dV+hU7wT2wn121q4laS/E8JNE6ANXs kKmwli/0saxBS+QsZGjmPC5qZohYAGwR/UUgfwfv/h1RkGhAOxIHfGPG/xhisRordQcl CAXw== X-Gm-Message-State: ABuFfogaEuZhQQ+PX/I/z608eQ0UEzn2rXhmQXIPswPDSLA47zGR8wWu TlHarwVcSDr/Il2KF4lcDv2KkeTwLEI= X-Google-Smtp-Source: ACcGV60Yw7GAP7OJ4wkNkzSuX4zhwNH/GZgzJdkyvywIO4nHUlvxU3V4LykIo5fcWxcpDVHI1lCTng== X-Received: by 2002:a1c:84cd:: with SMTP id g196-v6mr2959738wmd.38.1539290267267; Thu, 11 Oct 2018 13:37:47 -0700 (PDT) Received: from ?IPv6:2003:ea:8bd4:3f00:6c58:f76b:a44f:4c5e? (p200300EA8BD43F006C58F76BA44F4C5E.dip0.t-ipconnect.de. [2003:ea:8bd4:3f00:6c58:f76b:a44f:4c5e]) by smtp.googlemail.com with ESMTPSA id i6-v6sm12571592wrq.4.2018.10.11.13.37.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 11 Oct 2018 13:37:46 -0700 (PDT) Subject: [PATCH net-next 2/2] net: phy: simplify handling of PHY_RESUMING in state machine From: Heiner Kallweit To: Andrew Lunn , Florian Fainelli , David Miller Cc: "netdev@vger.kernel.org" References: Message-ID: <9a973b3c-6cca-a755-bf78-b06b65788cd4@gmail.com> Date: Thu, 11 Oct 2018 22:37:38 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Simplify code for handling state PHY_RESUMING, no functional change intended. Signed-off-by: Heiner Kallweit --- drivers/net/phy/phy.c | 43 ++++++++++++++----------------------------- 1 file changed, 14 insertions(+), 29 deletions(-) diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c index 696955d38..d03bdbbd1 100644 --- a/drivers/net/phy/phy.c +++ b/drivers/net/phy/phy.c @@ -1059,41 +1059,26 @@ void phy_state_machine(struct work_struct *work) case PHY_RESUMING: if (AUTONEG_ENABLE == phydev->autoneg) { err = phy_aneg_done(phydev); - if (err < 0) + if (err < 0) { break; - - /* err > 0 if AN is done. - * Otherwise, it's 0, and we're still waiting for AN - */ - if (err > 0) { - err = phy_read_status(phydev); - if (err) - break; - - if (phydev->link) { - phydev->state = PHY_RUNNING; - phy_link_up(phydev); - } else { - phydev->state = PHY_NOLINK; - phy_link_down(phydev, false); - } - } else { + } else if (!err) { phydev->state = PHY_AN; phydev->link_timeout = PHY_AN_TIMEOUT; - } - } else { - err = phy_read_status(phydev); - if (err) break; - - if (phydev->link) { - phydev->state = PHY_RUNNING; - phy_link_up(phydev); - } else { - phydev->state = PHY_NOLINK; - phy_link_down(phydev, false); } } + + err = phy_read_status(phydev); + if (err) + break; + + if (phydev->link) { + phydev->state = PHY_RUNNING; + phy_link_up(phydev); + } else { + phydev->state = PHY_NOLINK; + phy_link_down(phydev, false); + } break; }