diff options
Diffstat (limited to 'kernel/kmod.c')
-rw-r--r-- | kernel/kmod.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/kernel/kmod.c b/kernel/kmod.c index a27a5f64443d..b750675251e5 100644 --- a/kernel/kmod.c +++ b/kernel/kmod.c | |||
@@ -50,7 +50,8 @@ static struct workqueue_struct *khelper_wq; | |||
50 | char modprobe_path[KMOD_PATH_LEN] = "/sbin/modprobe"; | 50 | char modprobe_path[KMOD_PATH_LEN] = "/sbin/modprobe"; |
51 | 51 | ||
52 | /** | 52 | /** |
53 | * request_module - try to load a kernel module | 53 | * __request_module - try to load a kernel module |
54 | * @wait: wait (or not) for the operation to complete | ||
54 | * @fmt: printf style format string for the name of the module | 55 | * @fmt: printf style format string for the name of the module |
55 | * @...: arguments as specified in the format string | 56 | * @...: arguments as specified in the format string |
56 | * | 57 | * |
@@ -63,7 +64,7 @@ char modprobe_path[KMOD_PATH_LEN] = "/sbin/modprobe"; | |||
63 | * If module auto-loading support is disabled then this function | 64 | * If module auto-loading support is disabled then this function |
64 | * becomes a no-operation. | 65 | * becomes a no-operation. |
65 | */ | 66 | */ |
66 | int request_module(const char *fmt, ...) | 67 | int __request_module(bool wait, const char *fmt, ...) |
67 | { | 68 | { |
68 | va_list args; | 69 | va_list args; |
69 | char module_name[MODULE_NAME_LEN]; | 70 | char module_name[MODULE_NAME_LEN]; |
@@ -108,11 +109,12 @@ int request_module(const char *fmt, ...) | |||
108 | return -ENOMEM; | 109 | return -ENOMEM; |
109 | } | 110 | } |
110 | 111 | ||
111 | ret = call_usermodehelper(modprobe_path, argv, envp, 1); | 112 | ret = call_usermodehelper(modprobe_path, argv, envp, |
113 | wait ? UMH_WAIT_PROC : UMH_WAIT_EXEC); | ||
112 | atomic_dec(&kmod_concurrent); | 114 | atomic_dec(&kmod_concurrent); |
113 | return ret; | 115 | return ret; |
114 | } | 116 | } |
115 | EXPORT_SYMBOL(request_module); | 117 | EXPORT_SYMBOL(__request_module); |
116 | #endif /* CONFIG_MODULES */ | 118 | #endif /* CONFIG_MODULES */ |
117 | 119 | ||
118 | struct subprocess_info { | 120 | struct subprocess_info { |
@@ -167,7 +169,7 @@ static int ____call_usermodehelper(void *data) | |||
167 | } | 169 | } |
168 | 170 | ||
169 | /* We can run anywhere, unlike our parent keventd(). */ | 171 | /* We can run anywhere, unlike our parent keventd(). */ |
170 | set_cpus_allowed_ptr(current, CPU_MASK_ALL_PTR); | 172 | set_cpus_allowed_ptr(current, cpu_all_mask); |
171 | 173 | ||
172 | /* | 174 | /* |
173 | * Our parent is keventd, which runs with elevated scheduling priority. | 175 | * Our parent is keventd, which runs with elevated scheduling priority. |