Re: [PATCH v7 2/8] efi: Add embedded peripheral firmware support
From: Hans de Goede <hidden>
Date: 2019-11-15 12:10:11
Also in:
linux-efi, linux-input, lkml, platform-driver-x86
Hi, On 14-11-2019 22:50, Luis Chamberlain wrote:
On Thu, Nov 14, 2019 at 09:48:38PM +0100, Hans de Goede wrote:
<snip>
quoted
But I guess what you really want is some error to be thrown if someone calls firmware_request_platform() before we are ready.Yes.quoted
I guess I could make efi_check_for_embedded_firmwares() which scans for known firmwares and saved a copy set a flag that it has run. And then combine that with making efi_get_embedded_fw() (which underpins firmware_request_platform()) print a warning when called if that flag is not set yet.
<snip>
That'd be great.
So I've been working on this, my first though was to use WARN_ON as calling this too early would be a bug, but there is a bunch of normal circumstances where efi_check_for_embedded_firmwares() never runs. One of the being classic BIOS boot, but e.g. also when running paravirtualized in a paravirt env. using UEFI. Normally we should not end up calling efi_get_embedded_fw() in those cases, for one it is unlikely for any drivers using firmware_request_platform() to be used in such an environment, and if we somehow do end up with a case where firmware_request_platform() is called, since the EFI emebedded fw fallback then will not work I would expect a copy of the necessary fw to be under /lib/firmware so we never hit the fallback. This all makes efi_get_embedded_fw() getting called in cases where efi_check_for_embedded_firmwares() will never run unlikely, but not impossible. Making a WARN_ON the wrong thing to do so for v8 of this patch-set I will add a pr_warn for this. Note I've looked into detecting all the circumstances where it is normal for efi_check_for_embedded_firmwares() to never run, but after tracing the call path leading up to it getting called I've found that a check for that is complicated and more importantly error-prone and likely to get out of sync with reality if any of the functions higher up the call path ever change the conditions. So a pr_warn it is, and since as explained one would normally not expect to ever hit the fallback on systems where efi_check_for_embedded_firmwares() does not get called, I see no harm in simply always printing the warning if efi_check_for_embedded_firmwares() was not called. Regards, Hans