RE: [PATCH net-next v2 4/5] net: ravb: Do not apply RX checksum settings to hardware if the interface is down

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Claudiu Beznea,

> -----Original Message-----
> From: Claudiu <claudiu.beznea@xxxxxxxxx>
> Sent: Friday, February 9, 2024 5:05 PM
> Subject: [PATCH net-next v2 4/5] net: ravb: Do not apply RX checksum
> settings to hardware if the interface is down
> 
> From: Claudiu Beznea <claudiu.beznea.uj@xxxxxxxxxxxxxx>
> 
> Do not apply the RX checksum settings to hardware if the interface is
> down.
> In case runtime PM is enabled, and while the interface is down, the IP
> will be in reset mode (as for some platforms disabling the clocks will
> switch the IP to reset mode, which will lead to losing register contents)
> and applying settings in reset mode is not an option. Instead, cache the
> RX checksum settings and apply them in ravb_open() through
> ravb_emac_init().
> This has been solved by introducing pm_runtime_active() check. The device
> runtime PM usage counter has been incremented to avoid disabling the
> device clocks while the check is in progress (if any).
> 
> Commit prepares for the addition of runtime PM.
> 
> Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@xxxxxxxxxxxxxx>
> ---
> 
> Changes in v2:
> - fixed typo in patch description
> - adjusted ravb_set_features_gbeth(); didn't collect the Sergey's Rb
>   tag due to this
> 
> Changes since [2]:
> - use pm_runtime_get_noresume() and pm_runtime_active() and updated the
>   commit message to describe that
> - fixed typos
> - s/CSUM/checksum in patch title and description
> 
> Changes in v3 of [2]:
> - this was patch 20/21 in v2
> - fixed typos in patch description
> - removed code from ravb_open()
> - use ndev->flags & IFF_UP checks instead of netif_running()
> 
> Changes in v2 of [2]:
> - none; this patch is new
> 
> [2]
> 
>  drivers/net/ethernet/renesas/ravb_main.c | 20 +++++++++++++++++++-
>  1 file changed, 19 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/ethernet/renesas/ravb_main.c
> b/drivers/net/ethernet/renesas/ravb_main.c
> index 7a7f743a1fef..f4be08f0198d 100644
> --- a/drivers/net/ethernet/renesas/ravb_main.c
> +++ b/drivers/net/ethernet/renesas/ravb_main.c
> @@ -2478,8 +2478,14 @@ static int ravb_change_mtu(struct net_device *ndev,
> int new_mtu)  static void ravb_set_rx_csum(struct net_device *ndev, bool
> enable)  {
>  	struct ravb_private *priv = netdev_priv(ndev);
> +	struct device *dev = &priv->pdev->dev;
>  	unsigned long flags;
> 
> +	pm_runtime_get_noresume(dev);
> +
> +	if (!pm_runtime_active(dev))
> +		goto out_rpm_put;


Thanks for the patch,

Why can't this be handled in ravb_set_features() to avoid code
duplication??

Cheers,
Biju

> +
>  	spin_lock_irqsave(&priv->lock, flags);
> 
>  	/* Disable TX and RX */
> @@ -2492,6 +2498,9 @@ static void ravb_set_rx_csum(struct net_device
> *ndev, bool enable)
>  	ravb_rcv_snd_enable(ndev);
> 
>  	spin_unlock_irqrestore(&priv->lock, flags);
> +
> +out_rpm_put:
> +	pm_runtime_put_noidle(dev);
>  }
> 
>  static int ravb_endisable_csum_gbeth(struct net_device *ndev, enum
> ravb_reg reg, @@ -2515,10 +2524,16 @@ static int
> ravb_set_features_gbeth(struct net_device *ndev,  {
>  	netdev_features_t changed = ndev->features ^ features;
>  	struct ravb_private *priv = netdev_priv(ndev);
> +	struct device *dev = &priv->pdev->dev;
>  	unsigned long flags;
>  	int ret = 0;
>  	u32 val;
> 
> +	pm_runtime_get_noresume(dev);
> +
> +	if (!pm_runtime_active(dev))
> +		goto out_rpm_put;
> +
>  	spin_lock_irqsave(&priv->lock, flags);
>  	if (changed & NETIF_F_RXCSUM) {
>  		if (features & NETIF_F_RXCSUM)
> @@ -2542,9 +2557,12 @@ static int ravb_set_features_gbeth(struct
> net_device *ndev,
>  			goto done;
>  	}
> 
> -	ndev->features = features;
>  done:
>  	spin_unlock_irqrestore(&priv->lock, flags);
> +out_rpm_put:
> +	pm_runtime_put_noidle(dev);
> +	if (!ret)
> +		ndev->features = features;
> 
>  	return ret;
>  }
> --
> 2.39.2
> 






[Index of Archives]     [Linux Samsung SOC]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]

  Powered by Linux