]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
module: Add support for default value for module async_probe
authorSaravana Kannan <saravanak@google.com>
Sat, 4 Jun 2022 01:01:00 +0000 (18:01 -0700)
committerSasha Levin <sashal@kernel.org>
Tue, 26 Mar 2024 22:21:31 +0000 (18:21 -0400)
[ Upstream commit ae39e9ed964f8e450d0de410b5a757e19581dfc5 ]

Add a module.async_probe kernel command line option that allows enabling
async probing for all modules. When this command line option is used,
there might still be some modules for which we want to explicitly force
synchronous probing, so extend <modulename>.async_probe to take an
optional bool input so that async probing can be disabled for a specific
module.

Signed-off-by: Saravana Kannan <saravanak@google.com>
Reviewed-by: Aaron Tomlin <atomlin@redhat.com>
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
Stable-dep-of: 8f8cd6c0a43e ("modules: wait do_free_init correctly")
Signed-off-by: Sasha Levin <sashal@kernel.org>
Documentation/admin-guide/kernel-parameters.txt
kernel/module.c

index 34b093e7f8910ecd8cf523a5d09f1d8cee182e3a..c4c7273419bdace838aa72ada15a6f3fa87aa9f2 100644 (file)
        nopku           [X86] Disable Memory Protection Keys CPU feature found
                        in some Intel CPUs.
 
-       <module>.async_probe [KNL]
-                       Enable asynchronous probe on this module.
+       <module>.async_probe[=<bool>] [KNL]
+                       If no <bool> value is specified or if the value
+                       specified is not a valid <bool>, enable asynchronous
+                       probe on this module.  Otherwise, enable/disable
+                       asynchronous probe on this module as indicated by the
+                       <bool> value. See also: module.async_probe
 
        early_ioremap_debug [KNL]
                        Enable debug messages in early_ioremap support. This
                        For details see:
                        Documentation/admin-guide/hw-vuln/processor_mmio_stale_data.rst
 
+       module.async_probe=<bool>
+                       [KNL] When set to true, modules will use async probing
+                       by default. To enable/disable async probing for a
+                       specific module, use the module specific control that
+                       is documented under <module>.async_probe. When both
+                       module.async_probe and <module>.async_probe are
+                       specified, <module>.async_probe takes precedence for
+                       the specific module.
+
        module.sig_enforce
                        [KNL] When CONFIG_MODULE_SIG is set, this means that
                        modules without (valid) signatures will fail to load.
index ba9f2bb57889cbc70e9b08eb05e913f18dde3343..d8d677f01adb55644eef140f272d15077683a748 100644 (file)
@@ -3713,6 +3713,12 @@ static void do_free_init(struct work_struct *w)
        }
 }
 
+#undef MODULE_PARAM_PREFIX
+#define MODULE_PARAM_PREFIX "module."
+/* Default value for module->async_probe_requested */
+static bool async_probe;
+module_param(async_probe, bool, 0644);
+
 /*
  * This is where the real work happens.
  *
@@ -3943,7 +3949,8 @@ static int unknown_module_param_cb(char *param, char *val, const char *modname,
        int ret;
 
        if (strcmp(param, "async_probe") == 0) {
-               mod->async_probe_requested = true;
+               if (strtobool(val, &mod->async_probe_requested))
+                       mod->async_probe_requested = true;
                return 0;
        }
 
@@ -4110,6 +4117,8 @@ static int load_module(struct load_info *info, const char __user *uargs,
        if (err)
                goto bug_cleanup;
 
+       mod->async_probe_requested = async_probe;
+
        /* Module is ready to execute: parsing args may do that. */
        after_dashes = parse_args(mod->name, mod->args, mod->kp, mod->num_kp,
                                  -32768, 32767, mod,