From mboxrd@z Thu Jan 1 00:00:00 1970 From: Per Svennerbrandt Date: Wed, 18 May 2005 23:01:20 +0000 Subject: [PATCH][RFC] request_modalias: MODALIAS based module loading Message-Id: <20050518230120.GC3011@tsiryulnik> List-Id: References: <20050506212227.GA24066@kroah.com> <20050509211323.GB5297@tsiryulnik> In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: Per Liden , Greg KH Cc: linux-hotplug-devel@lists.sourceforge.net, linux-kernel@vger.kernel.org Ok, so here finally goes: The following adds a new function called request_modalias to lib/kobject_uevent.c and makes the kobject hotplug function call it whenever it gets called in response of an addition. Warning: The following also contains perhaps the worst abuse of strcmp ever to be recorded in the history of public mailinglists, so beware!!! This is the kind of stuff that has the potential for making pretty much anyone with only even the slightest hint of technical good taste, myself included, quickly rush for their b-p-b with a horrid expression on their faces and a thought on their minds about what's becomming of the world. On the other hand it also made the patch so nonintrusive that, for a proof-of-consept kind of thing, I just couldn't resist it. It also has the added benefit of making the various subsystems virtually "plug and play": As soon as they start exporting MODALIAS to the hotplug enviroment request_module will also, if activated, start requesting modules for them. Let's hope I'm not prematurely ending the lives of too many brave brown paper bags out there. Signed-off-by: Per Svennerbrandt --- linux-2.6.12-rc2/lib/kobject_uevent.c.orig 2005-03-02 08:38:09.000000000 +0100 +++ linux-2.6.12-rc2/lib/kobject_uevent.c 2005-05-13 00:13:39.000000000 +0200 @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -175,6 +176,26 @@ #endif /* CONFIG_KOBJECT_UEVENT */ +#ifdef CONFIG_REQUEST_MODALIAS +/** + * request_modalias - try to load any modules specified + * by MODALIAS in the enviroment + * @envp: pointer to an enviroment possibly containing a MODALIAS + */ +static void request_modalias(char **envp) +{ + int i, len = strlen("MODALIAS="); + + if (envp = NULL) return; + + for (i = 0; envp[i]; i++) + if (!strncmp(envp[i], "MODALIAS=", len)) + __request_module(envp[i] + len, 0); +} + +#else +static void request_modalias(char **envp) { } +#endif /* CONFIG_REQUEST_MODALIAS */ #ifdef CONFIG_HOTPLUG char hotplug_path[HOTPLUG_PATH_LEN] = "/sbin/hotplug"; @@ -297,6 +318,10 @@ void kobject_hotplug(struct kobject *kob __FUNCTION__, argv[0], argv[1], (unsigned long long)seq, envp[0], envp[1], envp[2], envp[3], envp[4]); + if (action = KOBJ_ADD) + /* since we didn't specify MODALIAS here, it must be beyond i */ + request_modalias(envp + i); + send_uevent(action_string, kobj_path, envp, GFP_KERNEL); if (!hotplug_path[0]) Here's also a patch to the relevant Kconfig to enable it: --- linux-2.6.12-rc2/init/Kconfig.orig 2005-05-06 23:42:20.000000000 +0200 +++ linux-2.6.12-rc2/init/Kconfig 2005-05-07 12:16:28.000000000 +0200 @@ -454,6 +454,15 @@ runs modprobe with the appropriate arguments, thereby loading the module if it is available. If unsure, say Y. +config REQUEST_MODALIAS + bool "MODALIAS based module loading" + depends on KMOD && HOTPLUG + help + If you say Y here, the resulting kernel will also be able to + load the modules for most types of hardware attached to buses + such as PCI, USB and PCMCIA automatically, based on + information contained in their "module aliases". + config STOP_MACHINE bool default y ------------------------------------------------------- This SF.Net email is sponsored by Oracle Space Sweepstakes Want to be the first software developer in space? Enter now for the Oracle Space Sweepstakes! http://ads.osdn.com/?ad_idt12&alloc_id344&op=click _______________________________________________ Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net Linux-hotplug-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel