On Thu, 23 Jan 2025 13:33:30 +0200 Claudiu Beznea <claudiu.beznea@xxxxxxxxx> wrote: > Hi, Kory, > > On 22.01.2025 18:19, Kory Maincent wrote: > > Fix the suspend path by ensuring the rtnl lock is held where required. > > Calls to ravb_open, ravb_close and wol operations must be performed under > > the rtnl lock to prevent conflicts with ongoing ndo operations. > > I've test it. Looks good. > > Thank you for your patch. However, I think this could be simplified. The > locking scheme looks complicated to me. E.g., this one works too: > > diff --git a/drivers/net/ethernet/renesas/ravb_main.c > b/drivers/net/ethernet/renesas/ravb_main.c > index bc395294a32d..cfe4f0f364f3 100644 > --- a/drivers/net/ethernet/renesas/ravb_main.c > +++ b/drivers/net/ethernet/renesas/ravb_main.c > @@ -3217,10 +3217,16 @@ static int ravb_suspend(struct device *dev) > > netif_device_detach(ndev); > > - if (priv->wol_enabled) > - return ravb_wol_setup(ndev); > + if (priv->wol_enabled) { > + rtnl_lock(); > + ret = ravb_wol_setup(ndev); > + rtnl_unlock(); > + return ret; > + } What happen if wol_enabled flag changes it state between the rtnl_lock and the if condition? We will be in the wrong path. Regards, -- Köry Maincent, Bootlin Embedded Linux and kernel engineering https://bootlin.com