Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 06 Aug 2009 08:16:41 -0700
From:      Julian Elischer <julian@elischer.org>
To:        John Baldwin <jhb@freebsd.org>
Cc:        Julian Elischer <julian@FreeBSD.org>, Perforce Change Reviews <perforce@freebsd.org>, Marko Zec <zec@freebsd.org>
Subject:   Re: PERFORCE change 167065 for review
Message-ID:  <4A7AF3D9.6080601@elischer.org>
In-Reply-To: <200908061108.42372.jhb@freebsd.org>
References:  <200908061404.n76E4IIF048503@repoman.freebsd.org> <200908061108.42372.jhb@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
John Baldwin wrote:
> On Thursday 06 August 2009 10:04:18 am Marko Zec wrote:
>> http://perforce.freebsd.org/chv.cgi?CH=167065
>>
>> Change 167065 by zec@zec_tpx32 on 2009/08/06 14:03:58
>>
>> 	Merge Julian's updates to V_ instructions document.
>> 	Submitted by:	julian
>>
>> Affected files ...
>>
>> .. //depot/projects/vimage/porting_to_vimage.txt#10 edit
>>
>> Differences ...
>>
>> ==== //depot/projects/vimage/porting_to_vimage.txt#10 (text+ko) ====
>>
>> -#endif /* !_FOO_VFOO_H_ */
>> -=========================================================
>> +On BOOT, the order of evaluation will be:
>> +  In a NON-VIMAGE kernel where the module is compiled:
>> +     MODEVENT, SYSINIT and VNET_SYSINIT both runm with order defined by 
> their
>> +     order declarations. {good foot shooting aterial if you get it wrong!}
>>  
>> +  In a VIMAGE kernel where the module is compiled:
>> +     MODEVNET, SYSINIT and VNET_SYSINIT both runm with order defined by 
> their
>> +     order declarations.  AND in addition, the VNET_SYSINIT being
>> +     repeated once for every new jail/vnet.
>>  
>> +On loading a vnet enabled kernel module after boot:
>> +      MODEVENT("event = load");
>> +      SYSINIT()
>> +      VNET_SYSINIT() for every existing jail
>> +        AND in addition, VNET_SYSINIT being called for each new jail 
> created.
>>  
>> +On unloading of module:
>> +      MODEVENT("event = quiesce")
>> +      MODEVENT("event = unload")
>> +      VNET_SYSUNINIT called for every jail/vnet
>> +      SYSUNINIT
>>  
>> +On system shutdown:
>> +      effectively the same as unload
>> +	{with exception of modevent?}
> 
> On system shutdown MOD_SHUTDOWN is the only MODEVENT handler invoked.
> 
>> +NOTICE that while the order of the SYSINIT and VNET_SYSINIT is reversed 
> from
>> +that of SYSUNINIT and VNET_SYSUNINIT, MODEVENTS do not follow
>> +this rule and thus it is dangerous to initialise and uninitialise
>> +things which are order dependent using MODEVENTs.
> 
> This is no longer true.  MOD_QUIESCE and MOD_UNLOAD events now run in the 
> reverse of the order that MOD_LOAD is invoked for a given kld during 
> kldunload.  This is true in both 7 and 8 now for several months.

I meant the order within the entries for the same module.
Since MODEVENT is called first during load, it would, by the
assumption that everything is reversed easy to assume that MODEVENT
is called AFTER the SYSINITS during unload.  This is in fact not the 
case, and I have the scars to prove it.
It might be make some sense if the "QUIESCE" was called before the 
SYSINIT/SYSUNINIT and the UNLOAD called after.. with a millisecond 
sleep between them.


> 


thanks for the comments..
could you possibly change the doc to suite? I don't have a p4 tree 
right now.





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4A7AF3D9.6080601>