Reducing firmware loading timeout
Alexey Smirnoff
fling at member.fsf.org
Mon Dec 8 03:09:35 UTC 2014
Will this patch also decrease radeon loading delay?
On Sun, Dec 07, 2014 at 08:03:17PM -0200, Alexandre Oliva wrote:
> Hi, Cristophe,
>
> On Jan 9, 2013, christophe.jarry at ouvaton.org wrote:
>
> > Because linux-libre intends to remove every binary blob from the
> > vanilla version of the kernel linux, it is senseless to have to wait
> > for the firmware to load.
>
> We remove every binary blob, but not every piece of firmware, and it
> makes sense to wait longer for the Free firmware that might really be
> there but take long to load.
>
> I have arranged for the deblob script for the upcoming 3.18 release to
> time out after 1 second when issuing to userland an unsatisfiable
> attempt to load a blob, but to still use the default timeout for Free
> firmware.
>
> Sorry it took me so incredibly long to get to this. I kept hoping the
> blobhush implementation would be ready and make this obsolete, but this
> time I figured I wouldn't be able to complete the blobhush
> implementation, but I had enough time to fix this, so, there you go ;-)
>
> I'll give it a round of testing and then check the scripts in. I'm not
> sure if/when I'll backport this to earlier releases though.
>
> Here's the patch I'm testing to fix this problem, in case you're
> interested:
>
> Index: deblob-3.18
> ===================================================================
> --- deblob-3.18 (revision 11729)
> +++ deblob-3.18 (working copy)
> @@ -370,6 +370,12 @@
> #define NONFREE_FIRMWARE "/*(DEBLOBBED)*/"\
> \
> static inline int\
> +is_nonfree_firmware(const char *name)\
> +{\
> + return strstr(name, NONFREE_FIRMWARE) != 0;\
> +}\
> +\
> +static inline int\
> report_missing_free_firmware(const char *name, const char *what)\
> {\
> printk(KERN_ERR "%s: Missing Free %s\\n", name,\
> @@ -392,7 +398,7 @@
> maybe_reject_firmware(const struct firmware **fw,\
> const char *name, struct device *device)\
> {\
> - if (strstr (name, NONFREE_FIRMWARE))\
> + if (is_nonfree_firmware(name))\
> return reject_firmware(fw, name, device);\
> else\
> return request_firmware(fw, name, device);\
> @@ -437,7 +443,7 @@
> void (*cont)(const struct firmware *fw,\
> void *context))\
> {\
> - if (strstr (name, NONFREE_FIRMWARE))\
> + if (is_nonfree_firmware(name))\
> return reject_firmware_nowait(module, uevent, name,\
> device, gfp, context, cont);\
> else\
> @@ -466,6 +472,11 @@
> #endif /* _LINUX_LIBRE_IHEX_H */\
> ' include/linux/ihex.h 'added non-Free ihex firmware notification support'
>
> +clean_sed '
> +s,\(timeout = \)\(firmware_loading_timeout()\),\1is_nonfree_firmware(name) ? 1 : \2,
> +' drivers/base/firmware_class.c 'shorten non-Free firmware fail-to-load timeout'
> +
> +
> ########
> # Arch #
> ########
>
More information about the linux-libre
mailing list