module: create a request_module_nowait()
authorArjan van de Ven <arjan@linux.intel.com>
Sun, 8 Feb 2009 18:42:01 +0000 (10:42 -0800)
committerRusty Russell <rusty@rustcorp.com.au>
Tue, 31 Mar 2009 02:35:35 +0000 (13:05 +1030)
commitacae05156551fd7528fbb616271e672789388e3c
tree71cb528037776997aea4d5a3128bd9c2ea723ba1
parent8c8ef42aee8fcfb4128bb94c50d55c9f80ade525
module: create a request_module_nowait()

There seems to be a common pattern in the kernel where drivers want to
call request_module() from inside a module_init() function. Currently
this would deadlock.

As a result, several drivers go through hoops like scheduling things via
kevent, or creating custom work queues (because kevent can deadlock on them).

This patch changes this to use a request_module_nowait() function macro instead,
which just fires the modprobe off but doesn't wait for it, and thus avoids the
original deadlock entirely.

On my laptop this already results in one less kernel thread running..

(Includes Jiri's patch to use enum umh_wait)

Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (bool-ified)
Cc: Jiri Slaby <jirislaby@gmail.com>
include/linux/kmod.h
kernel/kmod.c