wt., 5 maj 2020 o 21:25 Edwin Peer <edwin.peer@xxxxxxxxxxxx> napisał(a): > > + > > +static void devm_netdev_release(struct device *dev, void *this) > > +{ > > + struct netdevice_devres *res = this; > > + > > + unregister_netdev(res->ndev); > > +} > > + > > +/** > > + * devm_register_netdev - resource managed variant of register_netdev() > > + * @ndev: device to register > > + * > > + * This is a devres variant of register_netdev() for which the unregister > > + * function will be call automatically when the parent device of ndev > > + * is detached. > > + */ > > +int devm_register_netdev(struct net_device *ndev) > > +{ > > + struct netdevice_devres *dr; > > + int ret; > > + > > + /* struct net_device itself must be devres managed. */ > > + BUG_ON(!(ndev->priv_flags & IFF_IS_DEVRES)); > > + /* struct net_device must have a parent device - it will be the device > > + * managing this resource. > > + */ > > Catching static programming errors seems like an expensive use of the > last runtime flag in the enum. It would be weird to devres manage the > unregister and not also choose to manage the underlying memory in the > same fashion, so it wouldn't be an obvious mistake to make. If it must > be enforced, one could also iterate over the registered release > functions and check for the presence of devm_free_netdev without > burning the flag. > Hi Edwin, I've submitted this patch some time ago already and was told to check if the underlying memory is managed too. I guess I could try to use devres_find() here though. Re the last bit in priv_flags: is this really a problem though? It's not like struct net_device must remain stable - e.g. we can make priv_flags a bitmap. Bart