Message ID | 20200522163931.29905-1-grygorii.strashko@ti.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | net: ethernet: ti: cpsw: fix ASSERT_RTNL() warning during suspend | expand |
On 5/22/20 11:39 AM, Grygorii Strashko wrote: > vlan_for_each() are required to be called with rtnl_lock taken, otherwise > ASSERT_RTNL() warning will be triggered - which happens now during System > resume from suspend: > cpsw_suspend() > |- cpsw_ndo_stop() > |- __hw_addr_ref_unsync_dev() > |- cpsw_purge_all_mc() > |- vlan_for_each() > |- ASSERT_RTNL(); > > Hence, fix it by surrounding cpsw_ndo_stop() by rtnl_lock/unlock() calls. > > Fixes: 15180eca569b net: ethernet: ti: cpsw: fix vlan mcast Format for this should be Fixes: 15180eca569b ("net: ethernet: ti: cpsw: fix vlan mcast") regards Suman > Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com> > --- > drivers/net/ethernet/ti/cpsw.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c > index c2c5bf87da01..ffeb8633e530 100644 > --- a/drivers/net/ethernet/ti/cpsw.c > +++ b/drivers/net/ethernet/ti/cpsw.c > @@ -1753,11 +1753,15 @@ static int cpsw_suspend(struct device *dev) > struct cpsw_common *cpsw = dev_get_drvdata(dev); > int i; > > + rtnl_lock(); > + > for (i = 0; i < cpsw->data.slaves; i++) > if (cpsw->slaves[i].ndev) > if (netif_running(cpsw->slaves[i].ndev)) > cpsw_ndo_stop(cpsw->slaves[i].ndev); > > + rtnl_unlock(); > + > /* Select sleep pin state */ > pinctrl_pm_select_sleep_state(dev); > >
On 22/05/2020 19:50, Suman Anna wrote: > On 5/22/20 11:39 AM, Grygorii Strashko wrote: >> vlan_for_each() are required to be called with rtnl_lock taken, otherwise >> ASSERT_RTNL() warning will be triggered - which happens now during System >> resume from suspend: >> cpsw_suspend() >> |- cpsw_ndo_stop() >> |- __hw_addr_ref_unsync_dev() >> |- cpsw_purge_all_mc() >> |- vlan_for_each() >> |- ASSERT_RTNL(); >> >> Hence, fix it by surrounding cpsw_ndo_stop() by rtnl_lock/unlock() calls. >> >> Fixes: 15180eca569b net: ethernet: ti: cpsw: fix vlan mcast > > Format for this should be > Fixes: 15180eca569b ("net: ethernet: ti: cpsw: fix vlan mcast") Right sorry > > regards > Suman > >> Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com> >> --- >> drivers/net/ethernet/ti/cpsw.c | 4 ++++ >> 1 file changed, 4 insertions(+) >> >> diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c >> index c2c5bf87da01..ffeb8633e530 100644 >> --- a/drivers/net/ethernet/ti/cpsw.c >> +++ b/drivers/net/ethernet/ti/cpsw.c >> @@ -1753,11 +1753,15 @@ static int cpsw_suspend(struct device *dev) >> struct cpsw_common *cpsw = dev_get_drvdata(dev); >> int i; >> + rtnl_lock(); >> + >> for (i = 0; i < cpsw->data.slaves; i++) >> if (cpsw->slaves[i].ndev) >> if (netif_running(cpsw->slaves[i].ndev)) >> cpsw_ndo_stop(cpsw->slaves[i].ndev); >> + rtnl_unlock(); >> + >> /* Select sleep pin state */ >> pinctrl_pm_select_sleep_state(dev); >> >
From: Grygorii Strashko <grygorii.strashko@ti.com> Date: Fri, 22 May 2020 19:39:31 +0300 > vlan_for_each() are required to be called with rtnl_lock taken, otherwise > ASSERT_RTNL() warning will be triggered - which happens now during System > resume from suspend: > cpsw_suspend() > |- cpsw_ndo_stop() > |- __hw_addr_ref_unsync_dev() > |- cpsw_purge_all_mc() > |- vlan_for_each() > |- ASSERT_RTNL(); > > Hence, fix it by surrounding cpsw_ndo_stop() by rtnl_lock/unlock() calls. > > Fixes: 15180eca569b net: ethernet: ti: cpsw: fix vlan mcast > Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com> Applied.
diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c index c2c5bf87da01..ffeb8633e530 100644 --- a/drivers/net/ethernet/ti/cpsw.c +++ b/drivers/net/ethernet/ti/cpsw.c @@ -1753,11 +1753,15 @@ static int cpsw_suspend(struct device *dev) struct cpsw_common *cpsw = dev_get_drvdata(dev); int i; + rtnl_lock(); + for (i = 0; i < cpsw->data.slaves; i++) if (cpsw->slaves[i].ndev) if (netif_running(cpsw->slaves[i].ndev)) cpsw_ndo_stop(cpsw->slaves[i].ndev); + rtnl_unlock(); + /* Select sleep pin state */ pinctrl_pm_select_sleep_state(dev);
vlan_for_each() are required to be called with rtnl_lock taken, otherwise ASSERT_RTNL() warning will be triggered - which happens now during System resume from suspend: cpsw_suspend() |- cpsw_ndo_stop() |- __hw_addr_ref_unsync_dev() |- cpsw_purge_all_mc() |- vlan_for_each() |- ASSERT_RTNL(); Hence, fix it by surrounding cpsw_ndo_stop() by rtnl_lock/unlock() calls. Fixes: 15180eca569b net: ethernet: ti: cpsw: fix vlan mcast Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com> --- drivers/net/ethernet/ti/cpsw.c | 4 ++++ 1 file changed, 4 insertions(+)