mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* Re: [PATCH net-next v2 4/5] net: ravb: Do not apply RX checksum settings to hardware if the interface is down
@ 2024-02-11  8:56 Biju Das
  2024-02-11  9:40 ` Sergei Shtylyov
  0 siblings, 1 reply; 9+ messages in thread
From: Biju Das @ 2024-02-11  8:56 UTC (permalink / raw)
  To: Sergey Shtylyov
  Cc: Biju Das, Claudiu Beznea, claudiu.beznea, David S. Miller,
	Eric Dumazet, Jakub Kicinski, linux-kernel, linux-renesas-soc,
	netdev, Paolo Abeni

>>> From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
>>>
>>> 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@bp.renesas.com>
>>
>> Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>
>
> This will do the same job, without code duplication right?
>
>> static int ravb_set_features(struct net_device *ndev,
>>     netdev_features_t features)
>> {
>> struct ravb_private *priv = netdev_priv(ndev);
>> struct device *dev = &priv->pdev->dev;
>> const struct ravb_hw_info *info = priv->info;
>>
>> pm_runtime_get_noresume(dev);
>> if (!pm_runtime_active(dev)) {
>> pm_runtime_put_noidle(dev);
>> ndev->features = features;
>> return 0;
>> }
>>
>> return info->set_feature(ndev, features);

> We now leak the device reference by not calling pm_runtime_put_noidle()
>after this statement...

Oops. So this leak  can be fixed like [1]

>  The approach seems sane though -- Claudiu, please consider following it.

[1]
static int ravb_set_features(struct net_device *ndev,
    netdev_features_t features)
{
struct ravb_private *priv = netdev_priv(ndev);
const struct ravb_hw_info *info = priv->info;
struct device *dev = &priv->pdev->dev;
bool pm_active;

pm_runtime_get_noresume(dev);
pm_active = pm_runtime_active(dev);
pm_runtime_put_noidle(dev);
if (pm_active )
     return info->set_feature(ndev, features);

ndev->features = features;
return 0;
}

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH net-next v2 4/5] net: ravb: Do not apply RX checksum settings to hardware if the interface is down
  2024-02-11  8:56 [PATCH net-next v2 4/5] net: ravb: Do not apply RX checksum settings to hardware if the interface is down Biju Das
@ 2024-02-11  9:40 ` Sergei Shtylyov
  2024-02-11 12:13   ` Biju Das
  0 siblings, 1 reply; 9+ messages in thread
From: Sergei Shtylyov @ 2024-02-11  9:40 UTC (permalink / raw)
  To: Biju Das, Sergey Shtylyov
  Cc: Biju Das, Claudiu Beznea, claudiu.beznea, David S. Miller,
	Eric Dumazet, Jakub Kicinski, linux-kernel, linux-renesas-soc,
	netdev, Paolo Abeni

On 2/11/24 11:56 AM, Biju Das wrote:

>>>> From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
>>>>
>>>> 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@bp.renesas.com>
>>>
>>> Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>
>>
>> This will do the same job, without code duplication right?
>>
>>> static int ravb_set_features(struct net_device *ndev,
>>>     netdev_features_t features)
>>> {
>>> struct ravb_private *priv = netdev_priv(ndev);
>>> struct device *dev = &priv->pdev->dev;
>>> const struct ravb_hw_info *info = priv->info;
>>>
>>> pm_runtime_get_noresume(dev);
>>> if (!pm_runtime_active(dev)) {
>>> pm_runtime_put_noidle(dev);
>>> ndev->features = features;
>>> return 0;
>>> }
>>>
>>> return info->set_feature(ndev, features);
> 
>> We now leak the device reference by not calling pm_runtime_put_noidle()
>> after this statement...
> 
> Oops. So this leak  can be fixed like [1]
> 
>>  The approach seems sane though -- Claudiu, please consider following it.
> 
> [1]
> static int ravb_set_features(struct net_device *ndev,
>     netdev_features_t features)
> {
> struct ravb_private *priv = netdev_priv(ndev);
> const struct ravb_hw_info *info = priv->info;
> struct device *dev = &priv->pdev->dev;
> bool pm_active;
> 
> pm_runtime_get_noresume(dev);
> pm_active = pm_runtime_active(dev);
> pm_runtime_put_noidle(dev);

   There is no point dropping the RPM reference before we access
the regs...

> if (pm_active )
>      return info->set_feature(ndev, features);

   As I said, we should call pm_runtime_put_noidle() here...
 
> ndev->features = features;
> return 0;
> }

MBR, Sergey

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH net-next v2 4/5] net: ravb: Do not apply RX checksum settings to hardware if the interface is down
  2024-02-11  9:40 ` Sergei Shtylyov
@ 2024-02-11 12:13   ` Biju Das
  2024-02-11 12:29     ` Biju Das
  0 siblings, 1 reply; 9+ messages in thread
From: Biju Das @ 2024-02-11 12:13 UTC (permalink / raw)
  To: Sergei Shtylyov
  Cc: Sergey Shtylyov, Biju Das, Claudiu Beznea, claudiu.beznea,
	David S. Miller, Eric Dumazet, Jakub Kicinski, linux-kernel,
	linux-renesas-soc, netdev, Paolo Abeni

Hi Sergey,

On Sun, Feb 11, 2024 at 9:40 AM Sergei Shtylyov
<sergei.shtylyov@gmail.com> wrote:
>
> On 2/11/24 11:56 AM, Biju Das wrote:
>
> >>>> From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
> >>>>
> >>>> 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@bp.renesas.com>
> >>>
> >>> Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>
> >>
> >> This will do the same job, without code duplication right?
> >>
> >>> static int ravb_set_features(struct net_device *ndev,
> >>>     netdev_features_t features)
> >>> {
> >>> struct ravb_private *priv = netdev_priv(ndev);
> >>> struct device *dev = &priv->pdev->dev;
> >>> const struct ravb_hw_info *info = priv->info;
> >>>
> >>> pm_runtime_get_noresume(dev);
> >>> if (!pm_runtime_active(dev)) {
> >>> pm_runtime_put_noidle(dev);
> >>> ndev->features = features;
> >>> return 0;
> >>> }
> >>>
> >>> return info->set_feature(ndev, features);
> >
> >> We now leak the device reference by not calling pm_runtime_put_noidle()
> >> after this statement...
> >
> > Oops. So this leak  can be fixed like [1]
> >
> >>  The approach seems sane though -- Claudiu, please consider following it.
> >
> > [1]
> > static int ravb_set_features(struct net_device *ndev,
> >     netdev_features_t features)
> > {
> > struct ravb_private *priv = netdev_priv(ndev);
> > const struct ravb_hw_info *info = priv->info;
> > struct device *dev = &priv->pdev->dev;
> > bool pm_active;
> >
> > pm_runtime_get_noresume(dev);
> > pm_active = pm_runtime_active(dev);
> > pm_runtime_put_noidle(dev);
>
>    There is no point dropping the RPM reference before we access
> the regs...

I don't think there is an issue in accessing register by the usage of
below API's

pm_runtime_get_noresume:--- Bump up runtime PM usage counter of a device.
pm_runtime_active:--- Check whether or not a device is runtime-active.
pm_runtime_put_noidle:--Drop runtime PM usage counter of a device.

Cheers,
Biju

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH net-next v2 4/5] net: ravb: Do not apply RX checksum settings to hardware if the interface is down
  2024-02-11 12:13   ` Biju Das
@ 2024-02-11 12:29     ` Biju Das
  0 siblings, 0 replies; 9+ messages in thread
From: Biju Das @ 2024-02-11 12:29 UTC (permalink / raw)
  To: Sergei Shtylyov
  Cc: Sergey Shtylyov, Biju Das, Claudiu Beznea, claudiu.beznea,
	David S. Miller, Eric Dumazet, Jakub Kicinski, linux-kernel,
	linux-renesas-soc, netdev, Paolo Abeni

Hi Claudiu,

On Sun, Feb 11, 2024 at 12:13 PM Biju Das <biju.das.au@gmail.com> wrote:
>
> Hi Sergey,
>
> On Sun, Feb 11, 2024 at 9:40 AM Sergei Shtylyov
> <sergei.shtylyov@gmail.com> wrote:
> >
> > On 2/11/24 11:56 AM, Biju Das wrote:
> >
> > >>>> From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
> > >>>>
> > >>>> Do not apply the RX checksum settings to hardware if the interface is
> > >>>> down.

Gb eth supports both Rx/Tx Checksum

The intention is not to apply any hardware feature while the interface is done.
So please add a generic commit header and description.

Cheers,
Biju

> > >>>> 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@bp.renesas.com>
> > >>>
> > >>> Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>
> > >>
> > >> This will do the same job, without code duplication right?
> > >>
> > >>> static int ravb_set_features(struct net_device *ndev,
> > >>>     netdev_features_t features)
> > >>> {
> > >>> struct ravb_private *priv = netdev_priv(ndev);
> > >>> struct device *dev = &priv->pdev->dev;
> > >>> const struct ravb_hw_info *info = priv->info;
> > >>>
> > >>> pm_runtime_get_noresume(dev);
> > >>> if (!pm_runtime_active(dev)) {
> > >>> pm_runtime_put_noidle(dev);
> > >>> ndev->features = features;
> > >>> return 0;
> > >>> }
> > >>>
> > >>> return info->set_feature(ndev, features);
> > >
> > >> We now leak the device reference by not calling pm_runtime_put_noidle()
> > >> after this statement...
> > >
> > > Oops. So this leak  can be fixed like [1]
> > >
> > >>  The approach seems sane though -- Claudiu, please consider following it.
> > >
> > > [1]
> > > static int ravb_set_features(struct net_device *ndev,
> > >     netdev_features_t features)
> > > {
> > > struct ravb_private *priv = netdev_priv(ndev);
> > > const struct ravb_hw_info *info = priv->info;
> > > struct device *dev = &priv->pdev->dev;
> > > bool pm_active;
> > >
> > > pm_runtime_get_noresume(dev);
> > > pm_active = pm_runtime_active(dev);
> > > pm_runtime_put_noidle(dev);
> >
> >    There is no point dropping the RPM reference before we access
> > the regs...
>
> I don't think there is an issue in accessing register by the usage of
> below API's
>
> pm_runtime_get_noresume:--- Bump up runtime PM usage counter of a device.
> pm_runtime_active:--- Check whether or not a device is runtime-active.
> pm_runtime_put_noidle:--Drop runtime PM usage counter of a device.
>
> Cheers,
> Biju

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH net-next v2 4/5] net: ravb: Do not apply RX checksum settings to hardware if the interface is down
  2024-02-09 20:41     ` Biju Das
@ 2024-02-10 20:37       ` Sergey Shtylyov
  0 siblings, 0 replies; 9+ messages in thread
From: Sergey Shtylyov @ 2024-02-10 20:37 UTC (permalink / raw)
  To: Biju Das, Claudiu.Beznea, davem, edumazet, kuba, pabeni
  Cc: netdev, linux-renesas-soc, linux-kernel, Claudiu Beznea

On 2/9/24 11:41 PM, Biju Das wrote:
[...]

>>> From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
>>>
>>> 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@bp.renesas.com>
>>
>> Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>
> 
> This will do the same job, without code duplication right?
> 
> static int ravb_set_features(struct net_device *ndev,
> 			     netdev_features_t features)
> {
> 	struct ravb_private *priv = netdev_priv(ndev);
> 	struct device *dev = &priv->pdev->dev;
> 	const struct ravb_hw_info *info = priv->info;
> 
> 	pm_runtime_get_noresume(dev);
> 	if (!pm_runtime_active(dev)) {
> 		pm_runtime_put_noidle(dev);
> 		ndev->features = features;
> 		return 0;
> 	}
> 		
> 	return info->set_feature(ndev, features);

   We now leak the device reference by not calling pm_runtime_put_noidle()
after this statement...
   The approach seems sane though -- Claudiu, please consider following it.

[...]

> Cheers,
> Biju

MBR, Sergey

^ permalink raw reply	[flat|nested] 9+ messages in thread

* RE: [PATCH net-next v2 4/5] net: ravb: Do not apply RX checksum settings to hardware if the interface is down
  2024-02-09 20:27   ` Sergey Shtylyov
@ 2024-02-09 20:41     ` Biju Das
  2024-02-10 20:37       ` Sergey Shtylyov
  0 siblings, 1 reply; 9+ messages in thread
From: Biju Das @ 2024-02-09 20:41 UTC (permalink / raw)
  To: Sergey Shtylyov, Claudiu.Beznea, davem, edumazet, kuba, pabeni
  Cc: netdev, linux-renesas-soc, linux-kernel, Claudiu Beznea

Hi Sergey,

> -----Original Message-----
> From: Sergey Shtylyov <s.shtylyov@omp.ru>
> Sent: Friday, February 9, 2024 8:27 PM
> Subject: Re: [PATCH net-next v2 4/5] net: ravb: Do not apply RX checksum
> settings to hardware if the interface is down
> 
> On 2/9/24 8:04 PM, Claudiu wrote:
> 
> > From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
> >
> > 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@bp.renesas.com>
> 
> Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>

This will do the same job, without code duplication right?

static int ravb_set_features(struct net_device *ndev,
			     netdev_features_t features)
{
	struct ravb_private *priv = netdev_priv(ndev);
	struct device *dev = &priv->pdev->dev;
	const struct ravb_hw_info *info = priv->info;

	pm_runtime_get_noresume(dev);
	if (!pm_runtime_active(dev)) {
		pm_runtime_put_noidle(dev);
		ndev->features = features;
		return 0;
	}
		
	return info->set_feature(ndev, features);
}

Cheers,
Biju

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH net-next v2 4/5] net: ravb: Do not apply RX checksum settings to hardware if the interface is down
  2024-02-09 17:04 ` [PATCH net-next v2 4/5] net: ravb: Do not apply RX checksum settings to hardware if the interface is down Claudiu
  2024-02-09 17:11   ` Biju Das
@ 2024-02-09 20:27   ` Sergey Shtylyov
  2024-02-09 20:41     ` Biju Das
  1 sibling, 1 reply; 9+ messages in thread
From: Sergey Shtylyov @ 2024-02-09 20:27 UTC (permalink / raw)
  To: Claudiu, davem, edumazet, kuba, pabeni
  Cc: netdev, linux-renesas-soc, linux-kernel, Claudiu Beznea

On 2/9/24 8:04 PM, Claudiu wrote:

> From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
> 
> 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@bp.renesas.com>

Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>

[...]

MBR, Sergey

^ permalink raw reply	[flat|nested] 9+ messages in thread

* RE: [PATCH net-next v2 4/5] net: ravb: Do not apply RX checksum settings to hardware if the interface is down
  2024-02-09 17:04 ` [PATCH net-next v2 4/5] net: ravb: Do not apply RX checksum settings to hardware if the interface is down Claudiu
@ 2024-02-09 17:11   ` Biju Das
  2024-02-09 20:27   ` Sergey Shtylyov
  1 sibling, 0 replies; 9+ messages in thread
From: Biju Das @ 2024-02-09 17:11 UTC (permalink / raw)
  To: Claudiu.Beznea, s.shtylyov, davem, edumazet, kuba, pabeni
  Cc: netdev, linux-renesas-soc, linux-kernel, Claudiu.Beznea, Claudiu Beznea

Hi Claudiu Beznea,

> -----Original Message-----
> From: Claudiu <claudiu.beznea@tuxon.dev>
> 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@bp.renesas.com>
> 
> 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@bp.renesas.com>
> ---
> 
> 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
> 


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH net-next v2 4/5] net: ravb: Do not apply RX checksum settings to hardware if the interface is down
  2024-02-09 17:04 [PATCH net-next v2 0/5] net: ravb: Add runtime PM support (part 2) Claudiu
@ 2024-02-09 17:04 ` Claudiu
  2024-02-09 17:11   ` Biju Das
  2024-02-09 20:27   ` Sergey Shtylyov
  0 siblings, 2 replies; 9+ messages in thread
From: Claudiu @ 2024-02-09 17:04 UTC (permalink / raw)
  To: s.shtylyov, davem, edumazet, kuba, pabeni
  Cc: netdev, linux-renesas-soc, linux-kernel, claudiu.beznea, Claudiu Beznea

From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>

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@bp.renesas.com>
---

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] https://lore.kernel.org/all/20240105082339.1468817-1-claudiu.beznea.uj@bp.renesas.com/

 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;
+
 	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


^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2024-02-11 12:29 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-02-11  8:56 [PATCH net-next v2 4/5] net: ravb: Do not apply RX checksum settings to hardware if the interface is down Biju Das
2024-02-11  9:40 ` Sergei Shtylyov
2024-02-11 12:13   ` Biju Das
2024-02-11 12:29     ` Biju Das
  -- strict thread matches above, loose matches on Subject: below --
2024-02-09 17:04 [PATCH net-next v2 0/5] net: ravb: Add runtime PM support (part 2) Claudiu
2024-02-09 17:04 ` [PATCH net-next v2 4/5] net: ravb: Do not apply RX checksum settings to hardware if the interface is down Claudiu
2024-02-09 17:11   ` Biju Das
2024-02-09 20:27   ` Sergey Shtylyov
2024-02-09 20:41     ` Biju Das
2024-02-10 20:37       ` Sergey Shtylyov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®