Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1607006 > unrolled thread

[PATCH] net: phy: handle state correctly in phy_stop_machine

Started byZach Brown <zach.brown@ni.com>
First post2017-03-22 21:40 +0100
Last post2017-03-24 20:30 +0100
Articles 5 — 3 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH] net: phy: handle state correctly in phy_stop_machine Zach Brown <zach.brown@ni.com> - 2017-03-22 21:40 +0100
    Re: [PATCH] net: phy: handle state correctly in phy_stop_machine David Miller <davem@davemloft.net> - 2017-03-23 22:30 +0100
    Re: [PATCH] net: phy: handle state correctly in phy_stop_machine Florian Fainelli <f.fainelli@gmail.com> - 2017-03-23 22:50 +0100
    Re: [PATCH] net: phy: handle state correctly in phy_stop_machine Florian Fainelli <f.fainelli@gmail.com> - 2017-03-23 22:50 +0100
    Re: [PATCH] net: phy: handle state correctly in phy_stop_machine David Miller <davem@davemloft.net> - 2017-03-24 20:30 +0100

#1607006 — [PATCH] net: phy: handle state correctly in phy_stop_machine

FromZach Brown <zach.brown@ni.com>
Date2017-03-22 21:40 +0100
Subject[PATCH] net: phy: handle state correctly in phy_stop_machine
Message-ID<tnVcZ-8hP-21@gated-at.bofh.it>
From: Nathan Sullivan <nathan.sullivan@ni.com>

If the PHY is halted on stop, then do not set the state to PHY_UP.  This
ensures the phy will be restarted later in phy_start when the machine is
started again.

Signed-off-by: Nathan Sullivan <nathan.sullivan@ni.com>
Signed-off-by: Brad Mouring <brad.mouring@ni.com>
Acked-by: Xander Huff <xander.huff@ni.com>
Acked-by: Kyle Roeschley <kyle.roeschley@ni.com>
---
 drivers/net/phy/phy.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
index 7cc1b7d..fe2d4c4 100644
--- a/drivers/net/phy/phy.c
+++ b/drivers/net/phy/phy.c
@@ -678,7 +678,7 @@ void phy_stop_machine(struct phy_device *phydev)
 	cancel_delayed_work_sync(&phydev->state_queue);
 
 	mutex_lock(&phydev->lock);
-	if (phydev->state > PHY_UP)
+	if (phydev->state > PHY_UP && phydev->state != PHY_HALTED)
 		phydev->state = PHY_UP;
 	mutex_unlock(&phydev->lock);
 }
-- 
2.7.4

[toc] | [next] | [standalone]


#1607937

FromDavid Miller <davem@davemloft.net>
Date2017-03-23 22:30 +0100
Message-ID<toisW-8cF-7@gated-at.bofh.it>
In reply to#1607006
From: Zach Brown <zach.brown@ni.com>
Date: Wed, 22 Mar 2017 15:27:01 -0500

> From: Nathan Sullivan <nathan.sullivan@ni.com>
> 
> If the PHY is halted on stop, then do not set the state to PHY_UP.  This
> ensures the phy will be restarted later in phy_start when the machine is
> started again.
> 
> Signed-off-by: Nathan Sullivan <nathan.sullivan@ni.com>
> Signed-off-by: Brad Mouring <brad.mouring@ni.com>
> Acked-by: Xander Huff <xander.huff@ni.com>
> Acked-by: Kyle Roeschley <kyle.roeschley@ni.com>

Florian, please review.

[toc] | [prev] | [next] | [standalone]


#1607956

FromFlorian Fainelli <f.fainelli@gmail.com>
Date2017-03-23 22:50 +0100
Message-ID<toiMi-8kl-9@gated-at.bofh.it>
In reply to#1607006
On 03/23/2017 02:41 PM, Florian Fainelli wrote:
> On 03/22/2017 01:27 PM, Zach Brown wrote:
>> From: Nathan Sullivan <nathan.sullivan@ni.com>
>>
>> If the PHY is halted on stop, then do not set the state to PHY_UP.  This
>> ensures the phy will be restarted later in phy_start when the machine is
>> started again.
> 
> So essentially what you want to "defeat" here is entering phy_start()
> with PHY_UP therefore not run this part:
> 
>         case PHY_HALTED:
>                 /* make sure interrupts are re-enabled for the PHY */
>                 if (phydev->irq != PHY_POLL) {
>                         err = phy_enable_interrupts(phydev);
>                         if (err < 0)
>                                 break;
>                 }
> 
>                 phydev->state = PHY_RESUMING;
>                 do_resume = true;
>                 break;
> 
> which is what re-enables interrupts and makes sure the PHY is resumed,
> right?
> 
> If that's the scenario, I guess:
> 
> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>

And almost forgot:

Fixes: 00db8189d984 ("This patch adds a PHY Abstraction Layer to the
Linux Kernel, enabling ethernet drivers to remain as ignorant as is
reasonable of the connected PHY's design and operation details.")
-- 
Florian

[toc] | [prev] | [next] | [standalone]


#1607960

FromFlorian Fainelli <f.fainelli@gmail.com>
Date2017-03-23 22:50 +0100
Message-ID<toiMi-8kl-11@gated-at.bofh.it>
In reply to#1607006
On 03/22/2017 01:27 PM, Zach Brown wrote:
> From: Nathan Sullivan <nathan.sullivan@ni.com>
> 
> If the PHY is halted on stop, then do not set the state to PHY_UP.  This
> ensures the phy will be restarted later in phy_start when the machine is
> started again.

So essentially what you want to "defeat" here is entering phy_start()
with PHY_UP therefore not run this part:

        case PHY_HALTED:
                /* make sure interrupts are re-enabled for the PHY */
                if (phydev->irq != PHY_POLL) {
                        err = phy_enable_interrupts(phydev);
                        if (err < 0)
                                break;
                }

                phydev->state = PHY_RESUMING;
                do_resume = true;
                break;

which is what re-enables interrupts and makes sure the PHY is resumed,
right?

If that's the scenario, I guess:

Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>

> 
> Signed-off-by: Nathan Sullivan <nathan.sullivan@ni.com>
> Signed-off-by: Brad Mouring <brad.mouring@ni.com>
> Acked-by: Xander Huff <xander.huff@ni.com>
> Acked-by: Kyle Roeschley <kyle.roeschley@ni.com>
> ---
>  drivers/net/phy/phy.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
> index 7cc1b7d..fe2d4c4 100644
> --- a/drivers/net/phy/phy.c
> +++ b/drivers/net/phy/phy.c
> @@ -678,7 +678,7 @@ void phy_stop_machine(struct phy_device *phydev)
>  	cancel_delayed_work_sync(&phydev->state_queue);
>  
>  	mutex_lock(&phydev->lock);
> -	if (phydev->state > PHY_UP)
> +	if (phydev->state > PHY_UP && phydev->state != PHY_HALTED)
>  		phydev->state = PHY_UP;
>  	mutex_unlock(&phydev->lock);
>  }
> 


-- 
Florian

[toc] | [prev] | [next] | [standalone]


#1608915

FromDavid Miller <davem@davemloft.net>
Date2017-03-24 20:30 +0100
Message-ID<toD4n-679-41@gated-at.bofh.it>
In reply to#1607006
From: Zach Brown <zach.brown@ni.com>
Date: Wed, 22 Mar 2017 15:27:01 -0500

> From: Nathan Sullivan <nathan.sullivan@ni.com>
> 
> If the PHY is halted on stop, then do not set the state to PHY_UP.  This
> ensures the phy will be restarted later in phy_start when the machine is
> started again.
> 
> Signed-off-by: Nathan Sullivan <nathan.sullivan@ni.com>
> Signed-off-by: Brad Mouring <brad.mouring@ni.com>
> Acked-by: Xander Huff <xander.huff@ni.com>
> Acked-by: Kyle Roeschley <kyle.roeschley@ni.com>

Applied and queued up for -stable, thanks.

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web