diff mbox series

[v2,net] net: phy: ensure that genphy_c45_an_config_eee_aneg() sees new value of phydev->eee_cfg.eee_enabled

Message ID a5efc274-ce58-49f3-ac8a-5384d9b41695@gmail.com (mailing list archive)
State New
Delegated to: Netdev Maintainers
Headers show
Series [v2,net] net: phy: ensure that genphy_c45_an_config_eee_aneg() sees new value of phydev->eee_cfg.eee_enabled | expand

Checks

Context Check Description
netdev/series_format success Single patches do not need cover letters
netdev/tree_selection success Clearly marked for net
netdev/ynl success Generated files up to date; no warnings/errors; no diff in generated;
netdev/fixes_present success Fixes tag present in non-next series
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit success Errors and warnings before: 3 this patch: 3
netdev/build_tools success No tools touched, skip
netdev/cc_maintainers success CCed 8 of 8 maintainers
netdev/build_clang success Errors and warnings before: 3 this patch: 3
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/deprecated_api success None detected
netdev/check_selftest success No net selftest shell script
netdev/verify_fixes success Fixes tag looks correct
netdev/build_allmodconfig_warn success Errors and warnings before: 4 this patch: 4
netdev/checkpatch success total: 0 errors, 0 warnings, 0 checks, 50 lines checked
netdev/build_clang_rust success No Rust files in patch. Skipping build
netdev/kdoc success Errors and warnings before: 34 this patch: 34
netdev/source_inline success Was 0 now: 0
netdev/contest success net-next-2024-11-17--12-00 (tests: 789)

Commit Message

Heiner Kallweit Nov. 16, 2024, 8:52 p.m. UTC
This is a follow-up to 41ffcd95015f ("net: phy: fix phylib's dual
eee_enabled") and resolves an issue with genphy_c45_an_config_eee_aneg()
(called from genphy_c45_ethtool_set_eee) not seeing the new value of
phydev->eee_cfg.eee_enabled.

Fixes: 49168d1980e2 ("net: phy: Add phy_support_eee() indicating MAC support EEE")
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
---
v2:
- change second arg of phy_ethtool_set_eee_noneg to pass the old settings
- reflect argument change in kdoc
---
 drivers/net/phy/phy.c | 24 ++++++++++++++----------
 1 file changed, 14 insertions(+), 10 deletions(-)

Comments

Choong Yong Liang Nov. 20, 2024, 3:11 a.m. UTC | #1
On 17/11/2024 4:52 am, Heiner Kallweit wrote:
> This is a follow-up to 41ffcd95015f ("net: phy: fix phylib's dual
> eee_enabled") and resolves an issue with genphy_c45_an_config_eee_aneg()
> (called from genphy_c45_ethtool_set_eee) not seeing the new value of
> phydev->eee_cfg.eee_enabled.
> 
> Fixes: 49168d1980e2 ("net: phy: Add phy_support_eee() indicating MAC support EEE")
> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
> ---
> v2:
> - change second arg of phy_ethtool_set_eee_noneg to pass the old settings
> - reflect argument change in kdoc
> ---
>   drivers/net/phy/phy.c | 24 ++++++++++++++----------
>   1 file changed, 14 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
> index 8876f3673..2ae0e3a67 100644
> --- a/drivers/net/phy/phy.c
> +++ b/drivers/net/phy/phy.c
> @@ -1671,7 +1671,7 @@ EXPORT_SYMBOL(phy_ethtool_get_eee);
>    * phy_ethtool_set_eee_noneg - Adjusts MAC LPI configuration without PHY
>    *			       renegotiation
>    * @phydev: pointer to the target PHY device structure
> - * @data: pointer to the ethtool_keee structure containing the new EEE settings
> + * @old_cfg: pointer to the eee_config structure containing the old EEE settings
>    *
>    * This function updates the Energy Efficient Ethernet (EEE) configuration
>    * for cases where only the MAC's Low Power Idle (LPI) configuration changes,
> @@ -1682,11 +1682,10 @@ EXPORT_SYMBOL(phy_ethtool_get_eee);
>    * configuration.
>    */
>   static void phy_ethtool_set_eee_noneg(struct phy_device *phydev,
> -				      struct ethtool_keee *data)
> +				      const struct eee_config *old_cfg)
>   {
> -	if (phydev->eee_cfg.tx_lpi_enabled != data->tx_lpi_enabled ||
> -	    phydev->eee_cfg.tx_lpi_timer != data->tx_lpi_timer) {
> -		eee_to_eeecfg(&phydev->eee_cfg, data);
> +	if (phydev->eee_cfg.tx_lpi_enabled != old_cfg->tx_lpi_enabled ||
> +	    phydev->eee_cfg.tx_lpi_timer != old_cfg->tx_lpi_timer) {
>   		phydev->enable_tx_lpi = eeecfg_mac_can_tx_lpi(&phydev->eee_cfg);
>   		if (phydev->link) {
>   			phydev->link = false;
> @@ -1706,18 +1705,23 @@ static void phy_ethtool_set_eee_noneg(struct phy_device *phydev,
>    */
>   int phy_ethtool_set_eee(struct phy_device *phydev, struct ethtool_keee *data)
>   {
> +	struct eee_config old_cfg;
>   	int ret;
>   
>   	if (!phydev->drv)
>   		return -EIO;
>   
>   	mutex_lock(&phydev->lock);
> +
> +	old_cfg = phydev->eee_cfg;
> +	eee_to_eeecfg(&phydev->eee_cfg, data);
> +
>   	ret = genphy_c45_ethtool_set_eee(phydev, data);
> -	if (ret >= 0) {
> -		if (ret == 0)
> -			phy_ethtool_set_eee_noneg(phydev, data);
> -		eee_to_eeecfg(&phydev->eee_cfg, data);
> -	}
> +	if (ret == 0)
> +		phy_ethtool_set_eee_noneg(phydev, &old_cfg);
> +	else if (ret < 0)
> +		phydev->eee_cfg = old_cfg;
> +
>   	mutex_unlock(&phydev->lock);
>   
>   	return ret < 0 ? ret : 0;

Hi Heiner,

I hope this message finds you well.

I noticed that the recent patch you submitted appears to be based on the 
previous work I did in this patch series: 
https://patchwork.kernel.org/project/netdevbpf/cover/20241115111151.183108-1-yong.liang.choong@linux.intel.com/.

Would you mind including my name as "Reported-by" in the commit message? I 
believe this would appropriately acknowledge my role in identifying and 
reporting the issue.

Thank you for your understanding and for the work you have done to improve 
the solution.
Heiner Kallweit Nov. 20, 2024, 9:56 a.m. UTC | #2
On Wed, Nov 20, 2024 at 4:11 AM Choong Yong Liang
<yong.liang.choong@linux.intel.com> wrote:
>
>
>
> On 17/11/2024 4:52 am, Heiner Kallweit wrote:
> > This is a follow-up to 41ffcd95015f ("net: phy: fix phylib's dual
> > eee_enabled") and resolves an issue with genphy_c45_an_config_eee_aneg()
> > (called from genphy_c45_ethtool_set_eee) not seeing the new value of
> > phydev->eee_cfg.eee_enabled.
> >
> > Fixes: 49168d1980e2 ("net: phy: Add phy_support_eee() indicating MAC support EEE")
> > Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
> > ---
> > v2:
> > - change second arg of phy_ethtool_set_eee_noneg to pass the old settings
> > - reflect argument change in kdoc
> > ---
> >   drivers/net/phy/phy.c | 24 ++++++++++++++----------
> >   1 file changed, 14 insertions(+), 10 deletions(-)
> >
> > diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
> > index 8876f3673..2ae0e3a67 100644
> > --- a/drivers/net/phy/phy.c
> > +++ b/drivers/net/phy/phy.c
> > @@ -1671,7 +1671,7 @@ EXPORT_SYMBOL(phy_ethtool_get_eee);
> >    * phy_ethtool_set_eee_noneg - Adjusts MAC LPI configuration without PHY
> >    *                         renegotiation
> >    * @phydev: pointer to the target PHY device structure
> > - * @data: pointer to the ethtool_keee structure containing the new EEE settings
> > + * @old_cfg: pointer to the eee_config structure containing the old EEE settings
> >    *
> >    * This function updates the Energy Efficient Ethernet (EEE) configuration
> >    * for cases where only the MAC's Low Power Idle (LPI) configuration changes,
> > @@ -1682,11 +1682,10 @@ EXPORT_SYMBOL(phy_ethtool_get_eee);
> >    * configuration.
> >    */
> >   static void phy_ethtool_set_eee_noneg(struct phy_device *phydev,
> > -                                   struct ethtool_keee *data)
> > +                                   const struct eee_config *old_cfg)
> >   {
> > -     if (phydev->eee_cfg.tx_lpi_enabled != data->tx_lpi_enabled ||
> > -         phydev->eee_cfg.tx_lpi_timer != data->tx_lpi_timer) {
> > -             eee_to_eeecfg(&phydev->eee_cfg, data);
> > +     if (phydev->eee_cfg.tx_lpi_enabled != old_cfg->tx_lpi_enabled ||
> > +         phydev->eee_cfg.tx_lpi_timer != old_cfg->tx_lpi_timer) {
> >               phydev->enable_tx_lpi = eeecfg_mac_can_tx_lpi(&phydev->eee_cfg);
> >               if (phydev->link) {
> >                       phydev->link = false;
> > @@ -1706,18 +1705,23 @@ static void phy_ethtool_set_eee_noneg(struct phy_device *phydev,
> >    */
> >   int phy_ethtool_set_eee(struct phy_device *phydev, struct ethtool_keee *data)
> >   {
> > +     struct eee_config old_cfg;
> >       int ret;
> >
> >       if (!phydev->drv)
> >               return -EIO;
> >
> >       mutex_lock(&phydev->lock);
> > +
> > +     old_cfg = phydev->eee_cfg;
> > +     eee_to_eeecfg(&phydev->eee_cfg, data);
> > +
> >       ret = genphy_c45_ethtool_set_eee(phydev, data);
> > -     if (ret >= 0) {
> > -             if (ret == 0)
> > -                     phy_ethtool_set_eee_noneg(phydev, data);
> > -             eee_to_eeecfg(&phydev->eee_cfg, data);
> > -     }
> > +     if (ret == 0)
> > +             phy_ethtool_set_eee_noneg(phydev, &old_cfg);
> > +     else if (ret < 0)
> > +             phydev->eee_cfg = old_cfg;
> > +
> >       mutex_unlock(&phydev->lock);
> >
> >       return ret < 0 ? ret : 0;
>
> Hi Heiner,
>
> I hope this message finds you well.
>
> I noticed that the recent patch you submitted appears to be based on the
> previous work I did in this patch series:
> https://patchwork.kernel.org/project/netdevbpf/cover/20241115111151.183108-1-yong.liang.choong@linux.intel.com/.
>
> Would you mind including my name as "Reported-by" in the commit message? I
> believe this would appropriately acknowledge my role in identifying and
> reporting the issue.
>

Reported-by: Choong Yong Liang <yong.liang.choong@linux.intel.com>

Hope this is enough for patchwork and/or the maintainers to pick up this tag,
w/o resubmitting the patch.
Russell King (Oracle) Nov. 20, 2024, 10:35 a.m. UTC | #3
On Sat, Nov 16, 2024 at 09:52:15PM +0100, Heiner Kallweit wrote:
> This is a follow-up to 41ffcd95015f ("net: phy: fix phylib's dual
> eee_enabled") and resolves an issue with genphy_c45_an_config_eee_aneg()
> (called from genphy_c45_ethtool_set_eee) not seeing the new value of
> phydev->eee_cfg.eee_enabled.
> 
> Fixes: 49168d1980e2 ("net: phy: Add phy_support_eee() indicating MAC support EEE")
> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>

Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>

Thanks!
diff mbox series

Patch

diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
index 8876f3673..2ae0e3a67 100644
--- a/drivers/net/phy/phy.c
+++ b/drivers/net/phy/phy.c
@@ -1671,7 +1671,7 @@  EXPORT_SYMBOL(phy_ethtool_get_eee);
  * phy_ethtool_set_eee_noneg - Adjusts MAC LPI configuration without PHY
  *			       renegotiation
  * @phydev: pointer to the target PHY device structure
- * @data: pointer to the ethtool_keee structure containing the new EEE settings
+ * @old_cfg: pointer to the eee_config structure containing the old EEE settings
  *
  * This function updates the Energy Efficient Ethernet (EEE) configuration
  * for cases where only the MAC's Low Power Idle (LPI) configuration changes,
@@ -1682,11 +1682,10 @@  EXPORT_SYMBOL(phy_ethtool_get_eee);
  * configuration.
  */
 static void phy_ethtool_set_eee_noneg(struct phy_device *phydev,
-				      struct ethtool_keee *data)
+				      const struct eee_config *old_cfg)
 {
-	if (phydev->eee_cfg.tx_lpi_enabled != data->tx_lpi_enabled ||
-	    phydev->eee_cfg.tx_lpi_timer != data->tx_lpi_timer) {
-		eee_to_eeecfg(&phydev->eee_cfg, data);
+	if (phydev->eee_cfg.tx_lpi_enabled != old_cfg->tx_lpi_enabled ||
+	    phydev->eee_cfg.tx_lpi_timer != old_cfg->tx_lpi_timer) {
 		phydev->enable_tx_lpi = eeecfg_mac_can_tx_lpi(&phydev->eee_cfg);
 		if (phydev->link) {
 			phydev->link = false;
@@ -1706,18 +1705,23 @@  static void phy_ethtool_set_eee_noneg(struct phy_device *phydev,
  */
 int phy_ethtool_set_eee(struct phy_device *phydev, struct ethtool_keee *data)
 {
+	struct eee_config old_cfg;
 	int ret;
 
 	if (!phydev->drv)
 		return -EIO;
 
 	mutex_lock(&phydev->lock);
+
+	old_cfg = phydev->eee_cfg;
+	eee_to_eeecfg(&phydev->eee_cfg, data);
+
 	ret = genphy_c45_ethtool_set_eee(phydev, data);
-	if (ret >= 0) {
-		if (ret == 0)
-			phy_ethtool_set_eee_noneg(phydev, data);
-		eee_to_eeecfg(&phydev->eee_cfg, data);
-	}
+	if (ret == 0)
+		phy_ethtool_set_eee_noneg(phydev, &old_cfg);
+	else if (ret < 0)
+		phydev->eee_cfg = old_cfg;
+
 	mutex_unlock(&phydev->lock);
 
 	return ret < 0 ? ret : 0;