diff options
| author | Luis R. Rodriguez <mcgrof@kernel.org> | 2018-03-10 09:14:52 -0500 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2018-03-20 04:28:47 -0400 |
| commit | 2cd7a1c6dcd33e7c1a82b254871230f29866d4e9 (patch) | |
| tree | a9d2464f9e707e108e0267ed8ff7afcf53aa8ace /drivers/base | |
| parent | ceb18132248d95b2c68e30c3df78e69175c4452f (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.c | 5 | ||||
| -rw-r--r-- | drivers/base/firmware_loader/fallback.h | 4 | ||||
| -rw-r--r-- | drivers/base/firmware_loader/fallback_table.c | 9 |
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 | ||
| 644 | static bool fw_run_sysfs_fallback(unsigned int opt_flags) | 644 | static 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 | */ |
| 21 | struct firmware_fallback_config { | 24 | struct 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 | }; |
| 44 | EXPORT_SYMBOL_GPL(firmware_config_table); | 53 | EXPORT_SYMBOL_GPL(firmware_config_table); |
