Module Name: src Committed By: ozaki-r Date: Mon Dec 15 06:52:25 UTC 2014
Modified Files: src/sys/net: if.c if.h Log Message: Introduce if_initialize and if_register as an alternative to if_attach if_attach initializes an ifnet object and registers it to the system (e.g., ifnet_list), however, if_attach doesn't complete the initialization and the rest of it will be done by if_alloc_sadl that is normally directly called by device drivers or called via functions like ether_ifattach. So there is a race between if_attach and if_alloc_sadl (A half-baked ifnet object may be accessed, for example, via ioctl between them). The aim of this fix is to register an initializing ifnet object after completing its initializations. To this end, this fix separates if_attach into an initialization part (if_initialize) and a registration part (if_register) and call the latter after if_alloc_sadl (ether_ifattach). So a typical usage of the two new APIs is like this: if_initialize(ifp); // was if_attach ether_ifattach(ifp, enaddr); if_register(ifp); Nonetheless, changing every drivers to do so at once isn't feasible. So we keep if_attach working as it used to be and will change only some drivers that we need at this point. Once we know the fix really works well, we'll change all the others. Some more information of the fix can be found here: http://mail-index.netbsd.org/tech-kern/2014/12/10/msg018242.html No objection on tech-kern and tech-net. To generate a diff of this commit: cvs rdiff -u -r1.306 -r1.307 src/sys/net/if.c cvs rdiff -u -r1.183 -r1.184 src/sys/net/if.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.