[PATCH v2 09/11] firmware: enable to force disable the fallback mechanism at run time

From: Luis R. Rodriguez
Date: Tue Feb 13 2018 - 19:43:31 EST


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.

Signed-off-by: Luis R. Rodriguez <mcgrof@xxxxxxxxxx>
---
drivers/base/firmware_fallback.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)

diff --git a/drivers/base/firmware_fallback.c b/drivers/base/firmware_fallback.c
index 1a5bb3d22417..bf63034e0556 100644
--- a/drivers/base/firmware_fallback.c
+++ b/drivers/base/firmware_fallback.c
@@ -28,12 +28,16 @@ static unsigned int one = 1;
* as if one had enabled CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y.
* Useful to help debug a CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y
* functionality on a kernel where that config entry has been disabled.
+ * @ignore_sysfs_fallback: force to disable the sysfs fallback mechanism.
+ * This emulates the behaviour as if we had set the kernel
+ * config CONFIG_FW_LOADER_USER_HELPER=n.
* @old_timeout: for internal use
* @loading_timeout: the timeout to wait for the fallback mechanism before
* giving up, in seconds.
*/
struct firmware_fallback_config {
unsigned int force_sysfs_fallback;
+ unsigned int ignore_sysfs_fallback;
int old_timeout;
int loading_timeout;
};
@@ -54,6 +58,15 @@ struct ctl_table firmware_config_table[] = {
.extra1 = &zero,
.extra2 = &one,
},
+ {
+ .procname = "ignore_sysfs_fallback",
+ .data = &fw_fallback_config.ignore_sysfs_fallback,
+ .maxlen = sizeof(unsigned int),
+ .mode = 0644,
+ .proc_handler = proc_douintvec_minmax,
+ .extra1 = &zero,
+ .extra2 = &one,
+ },
{ }
};
EXPORT_SYMBOL_GPL(firmware_config_table);
@@ -683,6 +696,11 @@ static bool fw_force_sysfs_fallback(unsigned int opt_flags)

static bool fw_run_sysfs_fallback(unsigned int opt_flags)
{
+ if (fw_fallback_config.ignore_sysfs_fallback) {
+ pr_info_once("Ignoring firmware sysfs fallback due to debugfs knob\n");
+ return false;
+ }
+
if ((opt_flags & FW_OPT_NOFALLBACK))
return false;

--
2.16.1