On Thu, 2020-09-24 at 09:03 -0700, Jakub Kicinski wrote: > On Wed, 23 Sep 2020 22:49:37 -0700 Saeed Mahameed wrote: > > 2) Another problematic scenario which i see is repeated in many > > drivers: > > > > shutdown/suspend() > > rtnl_lock() > > netif_device_detach()//Mark !present; > > stop()->carrier_off()->linkwatch_event() > > // at this point device is still IFF_UP and !present > > // due to the early detach above.. > > rtnl_unlock(); > > Maybe we can solve this by providing drivers with a better helper for > the suspend use case? > > AFAIU netif_device_detach() is used by both IO errors and drivers > willingly detaching the device during normal operation (e.g. for > suspend). > > Since the suspend path can sleep if we have a separate helper perhaps > we could fire off the appropriate events synchronously, and > quiescence > the stack properly?
I was thinking something similar, a more heavy weight netif_device_detach(), which will be used in all drivers suspend flows. 1) clear IFF_UP 2) ndo_stop() 3) fire events 4) mark !present ... 5) suspend device but went and sampled some drivers and found there are many variations for using netif_device_detach it is not going to be a simple task.