From patchwork Wed Jan 23 06:27:21 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heiner Kallweit X-Patchwork-Id: 1029687 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="jhNRpQpN"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43kwTC4CL6z9s4s for ; Wed, 23 Jan 2019 17:33:03 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726238AbfAWGdB (ORCPT ); Wed, 23 Jan 2019 01:33:01 -0500 Received: from mail-wm1-f66.google.com ([209.85.128.66]:52899 "EHLO mail-wm1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725945AbfAWGdB (ORCPT ); Wed, 23 Jan 2019 01:33:01 -0500 Received: by mail-wm1-f66.google.com with SMTP id m1so814525wml.2 for ; Tue, 22 Jan 2019 22:32:59 -0800 (PST) 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=n0jXgakLLs0Hww0stRuyZasnIPaIt2llUAZ2RuUri1g=; b=jhNRpQpNMZwthuTToAPk7EZwrurbbMRJ7DnyEIYhrX2t4o2N/EMzzqKg/ffuIxuJ3G sBuRiI8zQaSWTqMVcz7PcFPqcQjqm0cY9LK5rWNnI00cMUTIxnguRhBNng+10QMyPAKv ZWf+jJNeIFaCrc8FTIjriA0qEI0nyBO9pTtQYMXXiKehLfuanmdl9lBT5EvkXAAmhx8/ 3qlrqYRXDy9gsyTGXugWV+S9eOG7tFxMcuAZHZL12ZMk70Yp0qs403eS/L4V6d6vlwcb HQ/sTtVT5zSAQTBv1fdJ18kbdSBH0nLF0RudJtOewckQy5raG26HqdseSQS6tx6HvHqk zvcA== 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=n0jXgakLLs0Hww0stRuyZasnIPaIt2llUAZ2RuUri1g=; b=SSX7sjzADqSIRs78pjFX4toy7EnNs7VDDfDcP9nzQtIFV+149szBdjaC5wX0l/ucZg 8kOOqBNR7Z0Cjf5F1V3Xzj21u0jAa+V/iu4yV8Q9BSCdAp8VF9Q3wFn1XudmzqDgS+lZ 2dRxkMY4VFDB8Qgw3xePlk5Pl9PJqLTC8JISAUvmRti+uJrTpYfRy27gie1LtGLQuxib llYyXr9Ne4QHBsNBVbicoDjFsSOQjr/B8Brobc5ffqdSgC3qiMZdL7b89urMLnSsILo2 b4xAj33jiLiZQgagOAGENtsDrQfWUTL1sSdXEzFNG6XsUv2gyPzvK/g1mx2JFZuiZuvW Qxvg== X-Gm-Message-State: AJcUukfDmzN3yqKvBVyVxe/bMidbtGYrrippDZwRenorytzlBXdiUjeI IAuyfYsflpcnnyBjbP1Yxl4= X-Google-Smtp-Source: ALg8bN4aBNduXhubB9L0JbUKq03tmnAESXBYb8bI8OCkwd6cWTihKl6Z0lRnr4qohVe//3fYlhskyw== X-Received: by 2002:a1c:2457:: with SMTP id k84mr1336291wmk.139.1548225178979; Tue, 22 Jan 2019 22:32:58 -0800 (PST) Received: from ?IPv6:2003:ea:8bf1:e200:341c:e0b9:6ec:c590? (p200300EA8BF1E200341CE0B906ECC590.dip0.t-ipconnect.de. [2003:ea:8bf1:e200:341c:e0b9:6ec:c590]) by smtp.googlemail.com with ESMTPSA id q3sm107649518wrn.84.2019.01.22.22.32.57 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 22 Jan 2019 22:32:58 -0800 (PST) Subject: [PATCH net-next v3 1/4] net: phy: start state machine in phy_start only From: Heiner Kallweit To: Andrew Lunn , Florian Fainelli , David Miller Cc: "netdev@vger.kernel.org" , "S-k, Shyam-sundar" References: Message-ID: <69890887-673f-21b6-1652-db6a68ad2976@gmail.com> Date: Wed, 23 Jan 2019 07:27:21 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.4.0 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 The state machine is a no-op before phy_start() has been called. Therefore let's enable it in phy_start() only. In phy_start() let's call phy_start_machine() instead of phy_trigger_machine(). phy_start_machine is an alias for phy_trigger_machine but it makes clearer that we start the state machine here instead of just triggering a run. Signed-off-by: Heiner Kallweit --- drivers/net/phy/phy.c | 2 +- drivers/net/phy/phy_device.c | 1 - drivers/net/phy/phylink.c | 1 - 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c index 745a705a5..3df6aadc5 100644 --- a/drivers/net/phy/phy.c +++ b/drivers/net/phy/phy.c @@ -883,7 +883,7 @@ void phy_start(struct phy_device *phydev) } mutex_unlock(&phydev->lock); - phy_trigger_machine(phydev); + phy_start_machine(phydev); } EXPORT_SYMBOL(phy_start); diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index e0ceecbed..3e284d596 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c @@ -944,7 +944,6 @@ int phy_connect_direct(struct net_device *dev, struct phy_device *phydev, return rc; phy_prepare_link(phydev, handler); - phy_start_machine(phydev); if (phydev->irq > 0) phy_start_interrupts(phydev); diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c index e7becc737..e9b8f1037 100644 --- a/drivers/net/phy/phylink.c +++ b/drivers/net/phy/phylink.c @@ -679,7 +679,6 @@ static int phylink_bringup_phy(struct phylink *pl, struct phy_device *phy) __ETHTOOL_LINK_MODE_MASK_NBITS, pl->supported, __ETHTOOL_LINK_MODE_MASK_NBITS, phy->advertising); - phy_start_machine(phy); if (phy->irq > 0) phy_start_interrupts(phy); From patchwork Wed Jan 23 06:30:38 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heiner Kallweit X-Patchwork-Id: 1029688 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="Pq1UV4GI"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43kwTD6Gt7z9s7T for ; Wed, 23 Jan 2019 17:33:04 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726289AbfAWGdD (ORCPT ); Wed, 23 Jan 2019 01:33:03 -0500 Received: from mail-wr1-f65.google.com ([209.85.221.65]:33424 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725995AbfAWGdC (ORCPT ); Wed, 23 Jan 2019 01:33:02 -0500 Received: by mail-wr1-f65.google.com with SMTP id p7so1029347wru.0 for ; Tue, 22 Jan 2019 22:33:01 -0800 (PST) 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=9mrpcCK1SzDZd6EgSAJvEaXUcKpHzfrJuR6ThpBCTiE=; b=Pq1UV4GIJ8NgzEabE0SI1gPE+QEsD9axUuVIqDBb8ehp0FOlztic+kvPgubt7sNU+W lOWhvuYwK1c7PBhAypWQ6gxh5zt/hZWFubou1gCicMlEgw92Q2IxnbMuWblg3ccE+F0G VXq1LUfesDxHVQQvOBHAsmUBA+vibJXhXCrGi2Dj40Mei/P16sogTxCavZL2hX3eS7qr fN3YgbpYrtkpnliPFnm8/0t+JdvS5lXVUK8TSFzw1g2bbEO2ZInFb9HbeHPzGjVmO9i3 F6qJCL/W3iEi7JPkyZtEasO/rX5o8CeuP4MEO3Jd6Igrr4MN6G7gR6C4umfA2jEXUmCk dQrA== 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=9mrpcCK1SzDZd6EgSAJvEaXUcKpHzfrJuR6ThpBCTiE=; b=dkz1UJo68admwHEnOrx59q//lS7QImY+I9RdBQkx9CVvYdEklLMpu4DIDhg/SZG0dM 26fREEf+QvL7RxsYWuIQ2QWsRh9/DNUgG9OLmX2+VVAPizoV7alXVvVN3C+joj3/1h9M ZqB8YXOamcGk+aKcB39rk8RzbrDjAcoow8dgI2oyoIABRW1bP1Btd23oQAUQ+26NEBVL Zdg0mWd9TM8Ja/mLoCaZmaHNSFu+jc7Q2q/NriMxLgWXb3bkUaqV7WLtTSidtHViivfO cj2bxR1iVruyGz8f1zg9tZTXhyp6eSmqHhabA+8WqsQUyRe7+2JlHrW4UXn55+O+XzSQ L+Cg== X-Gm-Message-State: AJcUukdbt1TuI9SN2LIew/5fa1BPYv2rVM6MobCD1fCG+BsEXvuq4J8A pNKBUi6+X5YGqNXdH45lc7cJz66M X-Google-Smtp-Source: ALg8bN7i+NvJaivaIMiJ4hAMl6PuWHcYoOpIm4Sc3xA5nzOEp1NShRQyfvcqHMgdXB49Y/FzW26NNg== X-Received: by 2002:adf:dd06:: with SMTP id a6mr1150820wrm.2.1548225180655; Tue, 22 Jan 2019 22:33:00 -0800 (PST) Received: from ?IPv6:2003:ea:8bf1:e200:341c:e0b9:6ec:c590? (p200300EA8BF1E200341CE0B906ECC590.dip0.t-ipconnect.de. [2003:ea:8bf1:e200:341c:e0b9:6ec:c590]) by smtp.googlemail.com with ESMTPSA id j8sm146867474wmd.0.2019.01.22.22.32.59 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 22 Jan 2019 22:33:00 -0800 (PST) Subject: [PATCH net-next v3 2/4] net: phy: warn if phy_start is called from invalid state From: Heiner Kallweit To: Andrew Lunn , Florian Fainelli , David Miller Cc: "netdev@vger.kernel.org" , "S-k, Shyam-sundar" References: Message-ID: <8e610c04-f21a-a73a-12a9-02b361e26da8@gmail.com> Date: Wed, 23 Jan 2019 07:30:38 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.4.0 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 phy_start() should be called from states PHY_READY or PHY_HALTED only. Check for this to detect misbehaving drivers. Also the state machine should be started only when being called from one of the valid states. Some more background: For all invalid states phy_start() basically was a no-op. All it did was triggering a state machine run, but for all "running" states the poll loop was active anyway. And if called from PHY_DOWN, the state machine does nothing. v3: - extended commit message Signed-off-by: Heiner Kallweit --- drivers/net/phy/phy.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c index 3df6aadc5..fd928979b 100644 --- a/drivers/net/phy/phy.c +++ b/drivers/net/phy/phy.c @@ -861,9 +861,16 @@ void phy_start(struct phy_device *phydev) mutex_lock(&phydev->lock); + if (phydev->state != PHY_READY && phydev->state != PHY_HALTED) { + WARN(1, "called from state %s\n", + phy_state_to_str(phydev->state)); + goto out; + } + switch (phydev->state) { case PHY_READY: phydev->state = PHY_UP; + phy_start_machine(phydev); break; case PHY_HALTED: /* if phy was suspended, bring the physical link up again */ @@ -877,13 +884,13 @@ void phy_start(struct phy_device *phydev) } phydev->state = PHY_RESUMING; + phy_start_machine(phydev); break; default: break; } +out: mutex_unlock(&phydev->lock); - - phy_start_machine(phydev); } EXPORT_SYMBOL(phy_start); From patchwork Wed Jan 23 06:31:23 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heiner Kallweit X-Patchwork-Id: 1029689 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="cAA2yujD"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43kwTH3dt0z9s4s for ; Wed, 23 Jan 2019 17:33:07 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726300AbfAWGdG (ORCPT ); Wed, 23 Jan 2019 01:33:06 -0500 Received: from mail-wr1-f67.google.com ([209.85.221.67]:40722 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726243AbfAWGdE (ORCPT ); Wed, 23 Jan 2019 01:33:04 -0500 Received: by mail-wr1-f67.google.com with SMTP id p4so982968wrt.7 for ; Tue, 22 Jan 2019 22:33:02 -0800 (PST) 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=h9tXBUJ0oblCnCfWj7eu7bva63EDqjmqU/CYVRREZYo=; b=cAA2yujDy3doVqGkq1D2RjpIFh/EGgEE/a+ByWt5LEjO+0DzdILye8eOYL05fZANap 2WnEmwKm0jmxzF/ZtSNNXQyiXP87SsJrnrcn3RrWwCIbpLxiEnsKMHL+0w29w5CydKkG s5mNv+PNVZgSql5mzy+FzEphw7AjlVWZn77xx7HS5h9jXDDIEJZCCejDq3ap43p24bdl egznt5BmscoaRbJ31eRd/MM9M+nDUo20A353e7WTOTM8TOahFIfPjJMme5x3NByLwXNh jJ4dZzkIKRs7cE55pgHy469cYp+iesX5K2l4pvTnT9y49X799HidEqoNi4X9YWkdmy1c Rq0w== 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=h9tXBUJ0oblCnCfWj7eu7bva63EDqjmqU/CYVRREZYo=; b=c0tK/JaKcIIP4fKBgKQ6ZkXNQFh3XBiDqDLIRztA/NUJXe/8uryXyRL0AOrDjavKmH BG/o6DSUMR3Gueks9bSkJaRUUAWnp4pWyI+pIjAGbZV/RtHYOMyBtvONeTcQSJIETgr9 uIbAvN4iWfu3g37KpuhWVd+mnTR8MDk+cy2oa7aktwIHsN0OZiDABlIKkshysjck59/W aFyDifd6VPXCcovQ8BkMEDdEJA3+nW4HNPcfu24UUXuF7nY1i60AJLjim2k/l8Txa0Yq YSXOEUACNreqgERufbB4QmJD7yINsBZ3N/2w/SCY46hG1GhXHfnVviG44Gk3zY7/u+Kx ttCg== X-Gm-Message-State: AJcUukf77Bf9kqOph1Cj7aOe/9wuo719tW84Snj09Kh9dt92ZBaCik3T 06SS9I1LEi64k+5V8dnLMibDl4wA X-Google-Smtp-Source: ALg8bN4S7eUyNvcrF0F+21iJIBsspsBkc+doeIKDToxqfPQbhp8v36uMruSYlZ4CE12GrVFr+t9JHA== X-Received: by 2002:adf:fac6:: with SMTP id a6mr1159501wrs.53.1548225182229; Tue, 22 Jan 2019 22:33:02 -0800 (PST) Received: from ?IPv6:2003:ea:8bf1:e200:341c:e0b9:6ec:c590? (p200300EA8BF1E200341CE0B906ECC590.dip0.t-ipconnect.de. [2003:ea:8bf1:e200:341c:e0b9:6ec:c590]) by smtp.googlemail.com with ESMTPSA id w18sm35758790wmi.12.2019.01.22.22.33.01 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 22 Jan 2019 22:33:01 -0800 (PST) Subject: [PATCH net-next v3 3/4] net: phy: start interrupts in phy_start From: Heiner Kallweit To: Andrew Lunn , Florian Fainelli , David Miller Cc: "netdev@vger.kernel.org" , "S-k, Shyam-sundar" References: Message-ID: <79ccd85e-e568-2d1b-dbc0-dbafac9405d7@gmail.com> Date: Wed, 23 Jan 2019 07:31:23 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.4.0 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 Interrupts don't have to be enabled before calling phy_start(). Therefore let's enable them in phy_start(). In a subsequent step we'll remove enabling interrupts from phy_connect_direct(). Signed-off-by: Heiner Kallweit --- drivers/net/phy/phy.c | 34 ++++++++++++++-------------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c index fd928979b..30ba650bb 100644 --- a/drivers/net/phy/phy.c +++ b/drivers/net/phy/phy.c @@ -857,7 +857,7 @@ EXPORT_SYMBOL(phy_stop); */ void phy_start(struct phy_device *phydev) { - int err = 0; + int err; mutex_lock(&phydev->lock); @@ -867,28 +867,22 @@ void phy_start(struct phy_device *phydev) goto out; } - switch (phydev->state) { - case PHY_READY: - phydev->state = PHY_UP; - phy_start_machine(phydev); - break; - case PHY_HALTED: - /* if phy was suspended, bring the physical link up again */ - __phy_resume(phydev); + /* if phy was suspended, bring the physical link up again */ + __phy_resume(phydev); - /* make sure interrupts are re-enabled for the PHY */ - if (phy_interrupt_is_valid(phydev)) { - err = phy_enable_interrupts(phydev); - if (err < 0) - break; - } + /* make sure interrupts are enabled for the PHY */ + if (phy_interrupt_is_valid(phydev)) { + err = phy_enable_interrupts(phydev); + if (err < 0) + goto out; + } + if (phydev->state == PHY_READY) + phydev->state = PHY_UP; + else phydev->state = PHY_RESUMING; - phy_start_machine(phydev); - break; - default: - break; - } + + phy_start_machine(phydev); out: mutex_unlock(&phydev->lock); } From patchwork Wed Jan 23 06:31:58 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heiner Kallweit X-Patchwork-Id: 1029690 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="YUlUWm1J"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43kwTJ1xQ6z9s7T for ; Wed, 23 Jan 2019 17:33:08 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726304AbfAWGdH (ORCPT ); Wed, 23 Jan 2019 01:33:07 -0500 Received: from mail-wr1-f68.google.com ([209.85.221.68]:35439 "EHLO mail-wr1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726291AbfAWGdG (ORCPT ); Wed, 23 Jan 2019 01:33:06 -0500 Received: by mail-wr1-f68.google.com with SMTP id 96so1016774wrb.2 for ; Tue, 22 Jan 2019 22:33:04 -0800 (PST) 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=FXr9/+MpfXkyN1PkHuGam2I51hIqcIZpQijpkYxKNFs=; b=YUlUWm1JebDhuWUFpPDe2XMFSYm3eKWHRxv43a7iWABgMV0pAgb+aF43X1gxAddpae QSEe2ACUnhwfw8TPBRR9e7KQZcXZVRD33B+hpVwUKAQRvsSh+oUW49x+3M69apfrf4LI jtT4rPuDaF4ISMAshOquhlC6r3gF9rqlhneaOvO3fiCkTXl2nSzDM8EH0rkf7RdnBzMb XpQbKTfxCS5e03R5l5UT7cLIjSTSS3FbALyJXBsG8dO4L9TcBrW3v1sLOeieu7jSM+jJ Spqt6sHsSRV48VTDY5dvsen1YeiBiR5jtTwnLVNp0hqvBpYfTGZ4oqk6OvNB7BVtXWOI zUDQ== 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=FXr9/+MpfXkyN1PkHuGam2I51hIqcIZpQijpkYxKNFs=; b=hrEy3WQIF6B2Y9uFfUZ8BFJmYw7qamt/7VzefHigEKeOyLSkwD/uNwWCySv/Qq+eiQ AWcD9NUDw5vop/hSP9xDEN/hI5oTa1NzKR3FcmVZgLetO4LODd9EmlsbL263T5bjCRUc 1PB+6gjoD9eFTIpiQurYDUpxBwPatJfKrbdWY0EasWYH9NHxWfV6Ul3oL6XF36wsbuDO JEP1Sl9zosdsuAEi93+G4rSahBdEePtX0aWk+Hrtxiq5ber9ngMonRrjRoqkMkSo711D 39mqdZXfO6vBHvnVxL1u8t1EQdFGkA0plBlXwHoQbsI0kBE/mi8dl0mLbpuSOpM+PyMk r/uQ== X-Gm-Message-State: AJcUukdzbLBLl5h5yDd9mFOcXyLoP8bxlMgIbe/8V8bB9imjUkXWy/iD JDVDRltYSo0ngaxMiqc9SHY= X-Google-Smtp-Source: ALg8bN74XjqgqI/dWwHSawI2ApWm7LiczrXKl0Hc4P+nPQgVjYTzOxywsh1YS30BqvkofgPTiC/98Q== X-Received: by 2002:adf:80a9:: with SMTP id 38mr1008988wrl.137.1548225183876; Tue, 22 Jan 2019 22:33:03 -0800 (PST) Received: from ?IPv6:2003:ea:8bf1:e200:341c:e0b9:6ec:c590? (p200300EA8BF1E200341CE0B906ECC590.dip0.t-ipconnect.de. [2003:ea:8bf1:e200:341c:e0b9:6ec:c590]) by smtp.googlemail.com with ESMTPSA id n6sm53976011wmk.9.2019.01.22.22.33.02 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 22 Jan 2019 22:33:03 -0800 (PST) Subject: [PATCH net-next v3 4/4] net: phy: change phy_start_interrupts to phy_request_interrupt From: Heiner Kallweit To: Andrew Lunn , Florian Fainelli , David Miller Cc: "netdev@vger.kernel.org" , "S-k, Shyam-sundar" References: Message-ID: Date: Wed, 23 Jan 2019 07:31:58 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.4.0 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 Now that we enable the interrupts in phy_start() we don't have to do it before. Therefore remove enabling interrupts from phy_start_interrupts() and rename this function to reflect the changed functionality. v2: - improve warning to clearly state that we fall back to polling Signed-off-by: Heiner Kallweit --- drivers/net/phy/phy.c | 23 +++++++++++------------ drivers/net/phy/phy_device.c | 4 ++-- drivers/net/phy/phylink.c | 4 ++-- include/linux/phy.h | 2 +- 4 files changed, 16 insertions(+), 17 deletions(-) diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c index 30ba650bb..58ce3dac2 100644 --- a/drivers/net/phy/phy.c +++ b/drivers/net/phy/phy.c @@ -790,28 +790,27 @@ static int phy_enable_interrupts(struct phy_device *phydev) } /** - * phy_start_interrupts - request and enable interrupts for a PHY device + * phy_request_interrupt - request interrupt for a PHY device * @phydev: target phy_device struct * * Description: Request the interrupt for the given PHY. * If this fails, then we set irq to PHY_POLL. - * Otherwise, we enable the interrupts in the PHY. * This should only be called with a valid IRQ number. - * Returns 0 on success or < 0 on error. */ -int phy_start_interrupts(struct phy_device *phydev) +void phy_request_interrupt(struct phy_device *phydev) { - if (request_threaded_irq(phydev->irq, NULL, phy_interrupt, - IRQF_ONESHOT | IRQF_SHARED, - phydev_name(phydev), phydev) < 0) { - phydev_warn(phydev, "Can't get IRQ %d\n", phydev->irq); + int err; + + err = request_threaded_irq(phydev->irq, NULL, phy_interrupt, + IRQF_ONESHOT | IRQF_SHARED, + phydev_name(phydev), phydev); + if (err) { + phydev_warn(phydev, "Error %d requesting IRQ %d, falling back to polling\n", + err, phydev->irq); phydev->irq = PHY_POLL; - return 0; } - - return phy_enable_interrupts(phydev); } -EXPORT_SYMBOL(phy_start_interrupts); +EXPORT_SYMBOL(phy_request_interrupt); /** * phy_stop - Bring down the PHY link, and stop checking the status diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index 3e284d596..dd3a2302f 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c @@ -944,8 +944,8 @@ int phy_connect_direct(struct net_device *dev, struct phy_device *phydev, return rc; phy_prepare_link(phydev, handler); - if (phydev->irq > 0) - phy_start_interrupts(phydev); + if (phy_interrupt_is_valid(phydev)) + phy_request_interrupt(phydev); return 0; } diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c index e9b8f1037..1ac832ba0 100644 --- a/drivers/net/phy/phylink.c +++ b/drivers/net/phy/phylink.c @@ -679,8 +679,8 @@ static int phylink_bringup_phy(struct phylink *pl, struct phy_device *phy) __ETHTOOL_LINK_MODE_MASK_NBITS, pl->supported, __ETHTOOL_LINK_MODE_MASK_NBITS, phy->advertising); - if (phy->irq > 0) - phy_start_interrupts(phy); + if (phy_interrupt_is_valid(phy)) + phy_request_interrupt(phy); return 0; } diff --git a/include/linux/phy.h b/include/linux/phy.h index 1fa7c367b..d0055adbc 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h @@ -1045,7 +1045,7 @@ void phy_ethtool_ksettings_get(struct phy_device *phydev, int phy_ethtool_ksettings_set(struct phy_device *phydev, const struct ethtool_link_ksettings *cmd); int phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int cmd); -int phy_start_interrupts(struct phy_device *phydev); +void phy_request_interrupt(struct phy_device *phydev); void phy_print_status(struct phy_device *phydev); int phy_set_max_speed(struct phy_device *phydev, u32 max_speed); void phy_remove_link_mode(struct phy_device *phydev, u32 link_mode);