lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAGm1_kufFr0SsVwVcABXkL0ABJahiwz4EZ70=ywrtC9Bffbfng@mail.gmail.com>
Date:	Wed, 16 Mar 2016 16:59:23 +0100
From:	Yegor Yefremov <yegorslists@...glemail.com>
To:	shh.xie@...il.com
Cc:	netdev <netdev@...r.kernel.org>,
	David Miller <davem@...emloft.net>,
	Shaohui Xie <Shaohui.Xie@...escale.com>,
	Florian Fainelli <f.fainelli@...il.com>,
	"N, Mugunthan V" <mugunthanvnm@...com>, drivshin@...worx.com
Subject: Re: [PATCH] net: phy: fix PHY_RUNNING in phy_state_machine

On Fri, Aug 14, 2015 at 6:23 AM,  <shh.xie@...il.com> wrote:
> From: Shaohui Xie <Shaohui.Xie@...escale.com>
>
> Currently, if phy state is PHY_RUNNING, we always register a CHANGE
> when phy works in polling or interrupt ignored, this will make the
> adjust_link being called even the phy link did Not changed.
>
> checking the phy link to make sure the link did changed before we
> register a CHANGE, if link did not changed, we do nothing.
>
> Signed-off-by: Shaohui Xie <Shaohui.Xie@...escale.com>
> ---
>  drivers/net/phy/phy.c | 16 ++++++++++++----
>  1 file changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
> index 84b1fba..d972851 100644
> --- a/drivers/net/phy/phy.c
> +++ b/drivers/net/phy/phy.c
> @@ -814,6 +814,7 @@ 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);
>
> @@ -899,11 +900,18 @@ void phy_state_machine(struct work_struct *work)
>                 phydev->adjust_link(phydev->attached_dev);
>                 break;
>         case PHY_RUNNING:
> -               /* Only register a CHANGE if we are
> -                * polling or ignoring interrupts
> +               /* Only register a CHANGE if we are polling or ignoring
> +                * interrupts and link changed since latest checking.
>                  */
> -               if (!phy_interrupt_is_valid(phydev))
> -                       phydev->state = PHY_CHANGELINK;
> +               if (!phy_interrupt_is_valid(phydev)) {
> +                       old_link = phydev->link;
> +                       err = phy_read_status(phydev);
> +                       if (err)
> +                               break;
> +
> +                       if (old_link != phydev->link)
> +                               phydev->state = PHY_CHANGELINK;
> +               }
>                 break;
>         case PHY_CHANGELINK:
>                 err = phy_read_status(phydev);

This patch breaks my am335x based board, where one of the CPSW slaves
is connected to IP175D switch chip via RMII interface. Since this
patch packet reception is not working.

Yegor

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ