On Tue, 14 Apr 2020 13:32:20 +0200 Vlastimil Babka <vbabka@xxxxxxx> wrote: > A recently proposed patch to add vm_swappiness command line parameter in > addition to existing sysctl [1] made me wonder why we don't have a general > support for passing sysctl parameters via command line. Googling found only > somebody else wondering the same [2], but I haven't found any prior discussion > with reasons why not to do this. > > Settings the vm_swappiness issue aside (the underlying issue might be solved in > a different way), quick search of kernel-parameters.txt shows there are already > some that exist as both sysctl and kernel parameter - hung_task_panic, > nmi_watchdog, numa_zonelist_order, traceoff_on_warning. A general mechanism > would remove the need to add more of those one-offs and might be handy in > situations where configuration by e.g. /etc/sysctl.d/ is impractical. > > Hence, this patch adds a new parse_args() pass that looks for parameters > prefixed by 'sysctl.' and tries to interpret them as writes to the > corresponding sys/ files using an temporary in-kernel procfs mount. This > mechanism was suggested by Eric W. Biederman [3], as it handles all dynamically > registered sysctl tables, even though we don't handle modular sysctls. Errors > due to e.g. invalid parameter name or value are reported in the kernel log. > > The processing is hooked right before the init process is loaded, as some > handlers might be more complicated than simple setters and might need some > subsystems to be initialized. At the moment the init process can be started and > eventually execute a process writing to /proc/sys/ then it should be also fine > to do that from the kernel. > > Sysctls registered later on module load time are not set by this mechanism - > it's expected that in such scenarios, setting sysctl values from userspace is > practical enough. > > [1] https://lore.kernel.org/r/BL0PR02MB560167492CA4094C91589930E9FC0@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/ > [2] https://unix.stackexchange.com/questions/558802/how-to-set-sysctl-using-kernel-command-line-parameter > [3] https://lore.kernel.org/r/87bloj2skm.fsf@xxxxxxxxxxxxxxxxxxxxx/ > > Signed-off-by: Vlastimil Babka <vbabka@xxxxxxx> > Reviewed-by: Luis Chamberlain <mcgrof@xxxxxxxxxx> [...] > diff --git a/init/main.c b/init/main.c > index a48617f2e5e5..7b43118215d6 100644 > --- a/init/main.c > +++ b/init/main.c > @@ -1372,6 +1372,8 @@ static int __ref kernel_init(void *unused) > > rcu_end_inkernel_boot(); > > + do_sysctl_args(); > + Ah, I see. Since the sysctl is designed to be called after all __init calls were done, it shouldn't use bootconfig directly because bootconfig is full of __init call. OK, anyway we can use "kernel.sysctl" prefixed bootconfig for these. Reviewed-by: Masami Hiramatsu <mhiramat@xxxxxxxxxx> Thank you, -- Masami Hiramatsu <mhiramat@xxxxxxxxxx>