aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/base
diff options
context:
space:
mode:
authorLuis R. Rodriguez <mcgrof@kernel.org>2018-03-10 09:14:52 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2018-03-20 04:28:47 -0400
commit2cd7a1c6dcd33e7c1a82b254871230f29866d4e9 (patch)
treea9d2464f9e707e108e0267ed8ff7afcf53aa8ace /drivers/base
parentceb18132248d95b2c68e30c3df78e69175c4452f (diff)
firmware: enable to force disable the fallback mechanism at run time
You currently need four different kernel builds to test the firmware API fully. By adding a proc knob to force disable the fallback mechanism completely we are able to reduce the amount of kernels you need built to test the firmware API down to two. Acked-by: Kees Cook <keescook@chromium.org> Signed-off-by: Luis R. Rodriguez <mcgrof@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/base')
-rw-r--r--drivers/base/firmware_loader/fallback.c5
-rw-r--r--drivers/base/firmware_loader/fallback.h4
-rw-r--r--drivers/base/firmware_loader/fallback_table.c9
3 files changed, 18 insertions, 0 deletions
diff --git a/drivers/base/firmware_loader/fallback.c b/drivers/base/firmware_loader/fallback.c
index 45cc40933a47..d6838e7ec00c 100644
--- a/drivers/base/firmware_loader/fallback.c
+++ b/drivers/base/firmware_loader/fallback.c
@@ -643,6 +643,11 @@ static bool fw_force_sysfs_fallback(unsigned int opt_flags)
643 643
644static bool fw_run_sysfs_fallback(unsigned int opt_flags) 644static bool fw_run_sysfs_fallback(unsigned int opt_flags)
645{ 645{
646 if (fw_fallback_config.ignore_sysfs_fallback) {
647 pr_info_once("Ignoring firmware sysfs fallback due to debugfs knob\n");
648 return false;
649 }
650
646 if ((opt_flags & FW_OPT_NOFALLBACK)) 651 if ((opt_flags & FW_OPT_NOFALLBACK))
647 return false; 652 return false;
648 653
diff --git a/drivers/base/firmware_loader/fallback.h b/drivers/base/firmware_loader/fallback.h
index ca7e69a8417b..dfebc644ed35 100644
--- a/drivers/base/firmware_loader/fallback.h
+++ b/drivers/base/firmware_loader/fallback.h
@@ -14,12 +14,16 @@
14 * as if one had enabled CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y. 14 * as if one had enabled CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y.
15 * Useful to help debug a CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y 15 * Useful to help debug a CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y
16 * functionality on a kernel where that config entry has been disabled. 16 * functionality on a kernel where that config entry has been disabled.
17 * @ignore_sysfs_fallback: force to disable the sysfs fallback mechanism.
18 * This emulates the behaviour as if we had set the kernel
19 * config CONFIG_FW_LOADER_USER_HELPER=n.
17 * @old_timeout: for internal use 20 * @old_timeout: for internal use
18 * @loading_timeout: the timeout to wait for the fallback mechanism before 21 * @loading_timeout: the timeout to wait for the fallback mechanism before
19 * giving up, in seconds. 22 * giving up, in seconds.
20 */ 23 */
21struct firmware_fallback_config { 24struct firmware_fallback_config {
22 unsigned int force_sysfs_fallback; 25 unsigned int force_sysfs_fallback;
26 unsigned int ignore_sysfs_fallback;
23 int old_timeout; 27 int old_timeout;
24 int loading_timeout; 28 int loading_timeout;
25}; 29};
diff --git a/drivers/base/firmware_loader/fallback_table.c b/drivers/base/firmware_loader/fallback_table.c
index 92365e053e30..7428659d8df9 100644
--- a/drivers/base/firmware_loader/fallback_table.c
+++ b/drivers/base/firmware_loader/fallback_table.c
@@ -39,6 +39,15 @@ struct ctl_table firmware_config_table[] = {
39 .extra1 = &zero, 39 .extra1 = &zero,
40 .extra2 = &one, 40 .extra2 = &one,
41 }, 41 },
42 {
43 .procname = "ignore_sysfs_fallback",
44 .data = &fw_fallback_config.ignore_sysfs_fallback,
45 .maxlen = sizeof(unsigned int),
46 .mode = 0644,
47 .proc_handler = proc_douintvec_minmax,
48 .extra1 = &zero,
49 .extra2 = &one,
50 },
42 { } 51 { }
43}; 52};
44EXPORT_SYMBOL_GPL(firmware_config_table); 53EXPORT_SYMBOL_GPL(firmware_config_table);