Re: order of executing MOD_LOAD and registering module sysctl-s

From: John Baldwin <jhb_at_freebsd.org>
Date: Thu, 03 Aug 2017 08:47:48 -0700
On Thursday, August 03, 2017 09:57:15 AM Andriy Gapon wrote:
> On 02/08/2017 18:49, John Baldwin wrote:
> > sysctl nodes are created explicitly via linker_file_register_sysctls, not via
> > SYSINITs, so you can't order them with respect to other init functions.
> > 
> > I think Andriy's suggestion of doing sysctls "inside" sysinits (so they are
> > registered last and unregistered first) is probably better than the current
> > state and is a simpler fix than changing all sysctls to use SYSINITs.
> 
> Kostik (kib) suggested a possible valid use-case that depends on the current
> order: adding dynamic sysctl-s under static sysctl-s via the module load handler.
> He also offered an idea for a possible solution: holding the modules lock in the
> shared mode (MOD_SLOCK) around calls to sysctl-s registered from modules.

Yes, that could work.  You'd need a way to "tag" sysctls as being module sysctls
vs non-module sysctls.  Another possiblity would be to make two passes over
sysctls when loading/unloading modules where you have a "disabled" flag or some
such.  During load you would set this flag when doing sysctl_register_oid for the
static nodes and then do a second pass after the SYSINITs to clear all the disabled
flags.  During unload you would do this in reverse with an early pass before
SYSUNINITs to set "disabled" on all the static nodes for the kld.

-- 
John Baldwin
Received on Thu Aug 03 2017 - 14:34:19 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:41:12 UTC