Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:philipsb:newer-kernels-on-sle10
module-init-tools
module-options-from-kernel-cmdline.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File module-options-from-kernel-cmdline.patch of Package module-init-tools
commit 83a882728ee10282682e38c7f42007f465dd3361 Author: Jon Masters <jcm@jcmlaptop.bos.redhat.com> Date: Tue Sep 9 11:40:15 2008 -0400 It is often advantageous to pass parameters to built-in kernel modules at boot time using the convention <module>.<option>. However, this does not work with loadable modules where modprobe reads its options from the config files. This patch adds support for modprobe to read /proc/cmdline and add any options it finds when inserting the modules. Signed-off-by: Dan Nicholson <dbn.lists@gmail.com> Signed-off-by: Jon Masters <jcm@jonmasters.org> diff --git a/doc/modprobe.sgml b/doc/modprobe.sgml index 767582a..3c63004 100644 --- a/doc/modprobe.sgml +++ b/doc/modprobe.sgml @@ -77,7 +77,9 @@ <filename>/etc/modprobe.d</filename> directory (see <citerefentry> <refentrytitle>modprobe.conf</refentrytitle><manvolnum>5</manvolnum> - </citerefentry>). + </citerefentry>). <command>modprobe</command> will also use module + options specified on the kernel command line in the form of + <module>.option>. </para> <para> Note that this version of <command>modprobe</command> does not diff --git a/modprobe.c b/modprobe.c index 9b171cc..51b9d64 100644 --- a/modprobe.c +++ b/modprobe.c @@ -1257,6 +1257,46 @@ static void read_toplevel_config(const char *filename, } } +/* Read possible module arguments from the kernel command line. */ +static int read_kcmdline(int dump_only, struct module_options **options) +{ + char *line; + unsigned int linenum = 0; + FILE *kcmdline; + + kcmdline = fopen("/proc/cmdline", "r"); + if (!kcmdline) + return 0; + + while ((line = getline_wrapped(kcmdline, &linenum)) != NULL) { + char *ptr = line; + char *arg; + + while ((arg = strsep_skipspace(&ptr, "\t ")) != NULL) { + char *sep, *modname, *opt; + + sep = strchr(arg, '.'); + if (sep) { + if (!strchr(sep, '=')) + continue; + modname = arg; + *sep = '\0'; + opt = ++sep; + + if (dump_only) + printf("options %s %s\n", modname, opt); + + *options = add_options(underscores(modname), + opt, *options); + } + } + + free(line); + } + fclose(kcmdline); + return 1; +} + static void add_to_env_var(const char *option) { const char *oldenv; @@ -1586,6 +1626,7 @@ int main(int argc, char *argv[]) read_toplevel_config(config, "", 1, 0, &modoptions, &commands, &aliases, &blacklist); + read_kcmdline(1, &modoptions); read_config(aliasfilename, "", 1, 0,&modoptions, &commands, &aliases, &blacklist); read_config(symfilename, "", 1, 0, &modoptions, &commands, @@ -1617,6 +1658,9 @@ int main(int argc, char *argv[]) read_toplevel_config(config, modulearg, 0, remove, &modoptions, &commands, &aliases, &blacklist); + /* Read module options from kernel command line */ + read_kcmdline(0, &modoptions); + /* No luck? Try symbol names, if starts with symbol:. */ if (!aliases && strncmp(modulearg, "symbol:", strlen("symbol:")) == 0)
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor