diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c index ccfd26814..eccb47c83 100644 --- a/drivers/base/firmware_class.c +++ b/drivers/base/firmware_class.c @@ -40,6 +40,26 @@ MODULE_LICENSE("GPL"); /* Builtin firmware support */ +static int _____fw_cache_init = 0; +static void __init fw_cache_init(void); + +// HACK this initializes the module if not already done. +static void HACK_ensure_fw_cache_init(void) +{ + if(_____fw_cache_init) + { + printk("HACK in %s: fw_cache is already initialized.", __FILE__); + dump_stack(); + return; + } + + _____fw_cache_init = 1; + printk("HACK in %s: initializing fw_cache", __FILE__); + dump_stack(); + + fw_cache_init(); +} + #ifdef CONFIG_FW_LOADER extern struct builtin_fw __start_builtin_fw[]; @@ -1312,6 +1332,8 @@ request_firmware_nowait( { struct firmware_work *fw_work; + HACK_ensure_fw_cache_init(); + fw_work = kzalloc(sizeof(struct firmware_work), gfp); if (!fw_work) return -ENOMEM;