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]
Date:   Mon, 3 Sep 2018 10:49:20 -0700
From:   Florian Fainelli <f.fainelli@...il.com>
To:     Andrew Lunn <andrew@...n.ch>, David Miller <davem@...emloft.net>
Cc:     netdev <netdev@...r.kernel.org>, maxime.chevallier@...tlin.com
Subject: Re: [PATCH net-next 10/12] net: ethernet: Add helper for
 set_pauseparam for Asym Pause



On 9/2/2018 10:06 AM, Andrew Lunn wrote:
> ethtool can be used to enable/disable pause. Add a helper to configure
> the PHY when asym pause is supported.

Don't you want to go one step further and incorporate the logic that 
xgenet, tg3, gianfar and others have? That is: look at the currently 
advertised parameters, determine what changed, and re-start 
auto-negotiation as a result of it being enabled and something changed?

Could be done as a follow-up patch I suppose, although see below:

[snip]
> index 4f50f11718f4..dfe03afd00b0 100644
> --- a/drivers/net/ethernet/apm/xgene/xgene_enet_ethtool.c
> +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_ethtool.c
> @@ -306,7 +306,6 @@ static int xgene_set_pauseparam(struct net_device *ndev,
>   {
>   	struct xgene_enet_pdata *pdata = netdev_priv(ndev);
>   	struct phy_device *phydev = ndev->phydev;
> -	u32 oldadv, newadv;
>   
>   	if (phy_interface_mode_is_rgmii(pdata->phy_mode) ||
>   	    pdata->phy_mode == PHY_INTERFACE_MODE_SGMII) {
> @@ -322,29 +321,12 @@ static int xgene_set_pauseparam(struct net_device *ndev,
>   		pdata->tx_pause = pp->tx_pause;
>   		pdata->rx_pause = pp->rx_pause;
>   
> -		oldadv = phydev->advertising;
> -		newadv = oldadv & ~(ADVERTISED_Pause | ADVERTISED_Asym_Pause);
> +		phy_set_asym_pause(phydev, pp->rx_pause,  pp->tx_pause);
>   
> -		if (pp->rx_pause)
> -			newadv |= ADVERTISED_Pause | ADVERTISED_Asym_Pause;
> -
> -		if (pp->tx_pause)
> -			newadv ^= ADVERTISED_Asym_Pause;
> -
> -		if (oldadv ^ newadv) {
> -			phydev->advertising = newadv;
> -
> -			if (phydev->autoneg)
> -				return phy_start_aneg(phydev);
> -

You have remove the part that checks for phydev->autoneg here, was that 
intentional?

> -			if (!pp->autoneg) {
> -				pdata->mac_ops->flowctl_tx(pdata,
> -							   pdata->tx_pause);
> -				pdata->mac_ops->flowctl_rx(pdata,
> -							   pdata->rx_pause);
> -			}
> +		if (!pp->autoneg) {
> +			pdata->mac_ops->flowctl_tx(pdata, pdata->tx_pause);
> +			pdata->mac_ops->flowctl_rx(pdata, pdata->rx_pause);
>   		}


-- 
Florian

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ