From: Luis Chamberlain <mcgrof@kernel.org>
To: Hans de Goede <hdegoede@redhat.com>
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>,
Darren Hart <dvhart@infradead.org>,
Andy Shevchenko <andy@infradead.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
"Rafael J . Wysocki" <rafael@kernel.org>,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
"H . Peter Anvin" <hpa@zytor.com>,
Jonathan Corbet <corbet@lwn.net>,
Dmitry Torokhov <dmitry.torokhov@gmail.com>,
Peter Jones <pjones@redhat.com>, Dave Olsthoorn <dave@bewaar.me>,
x86@kernel.org, platform-driver-x86@vger.kernel.org,
linux-efi@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-doc@vger.kernel.org, linux-input@vger.kernel.org
Subject: Re: [PATCH v7 2/8] efi: Add embedded peripheral firmware support
Date: Thu, 14 Nov 2019 21:50:09 +0000 [thread overview]
Message-ID: <20191114215009.GF11244@42.do-not-panic.com> (raw)
In-Reply-To: <9b0a0121-3e63-0602-6c0d-00547e389f76@redhat.com>
On Thu, Nov 14, 2019 at 09:48:38PM +0100, Hans de Goede wrote:
> Hi,
>
> On 14-11-2019 21:13, Hans de Goede wrote:
> > Hi,
> >
> > On 14-11-2019 20:42, Luis Chamberlain wrote:
> > > On Thu, Nov 14, 2019 at 12:27:01PM +0100, Hans de Goede wrote:
> > > > Hi Luis,
> > > >
> > > > Thank you for the reviews and sorry for being a bit slow to respind.
> > > >
> > > > On 11-10-2019 16:48, Luis Chamberlain wrote:
> > > > > On Fri, Oct 04, 2019 at 04:50:50PM +0200, Hans de Goede wrote:
> > > > > > +static int __init efi_check_md_for_embedded_firmware(
> > > > > > + efi_memory_desc_t *md, const struct efi_embedded_fw_desc *desc)
> > > > > > +{
> > > > > > + const u64 prefix = *((u64 *)desc->prefix);
> > > > > > + struct sha256_state sctx;
> > > > > > + struct embedded_fw *fw;
> > > > > > + u8 sha256[32];
> > > > > > + u64 i, size;
> > > > > > + void *map;
> > > > > > +
> > > > > > + size = md->num_pages << EFI_PAGE_SHIFT;
> > > > > > + map = memremap(md->phys_addr, size, MEMREMAP_WB);
> > > > >
> > > > > Since our limitaiton is the init process must have mostly finished,
> > > > > it implies early x86 boot code cannot use this, what measures can we
> > > > > take to prevent / check for such conditions to be detected and
> > > > > gracefully errored out?
> > > >
> > > > As with all (EFI) early boot code, there simply is a certain order
> > > > in which things need to be done. This needs to happen after the basic
> > > > mm is setup, but before efi_free_boot_services() gets called, there
> > > > isn't really a way to check for all these conditions. As with all
> > > > early boot code, people making changes need to be careful to not
> > > > break stuff.
> > >
> > > I rather we take a proactive measure here and add whatever it is we need
> > > to ensure the API works only when its supposed to, rather than try and
> > > fail, and then expect the user to know these things.
> > >
> > > I'd prefer if we at least try to address this.
> >
> > This is purely internal x86/EFI API it is not intended for drivers
> > or anything like that. It has only one caller under arch/x86 and it is
> > not supposed to get any other callers outside of arch/* ever.
> >
> > Note that this all runs before even core_initcall-s get run, none
> > if the code which runs before then has any sort of ordering checks
> > and I don't see how this bit is special and thus does need ordering
> > checks; and there really is no mechanism for such checks so early
> > during boot.
> >
> > The drivers/firmware/efi/embedded-firmware.c file does add some API
> > which can be used normally, specifically the efi_get_embedded_fw()
> > but that has no special ordering constrains and it does not directly
> > use the function we are discussing now. It reads back data stored
> > by the earlier functions; and if somehow called before those functions
> > run (*), then it will simply return -ENOENT.
>
> Ok, I just realized that we may have some miscommunication here,
> when you wrote:
>
> "Since our limitation is the init process must have mostly finished,
> it implies early x86 boot code cannot use this, what measures can we
> take to prevent / check for such conditions to be detected and
> gracefully errored out?"
>
> I assumed you meant that to apply to the efi_check_md_for_embedded_firmware()
> helper or its caller.
>
> But I guess what you really want is some error to be thrown if someone
> calls firmware_request_platform() before we are ready.
Yes.
> 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.
>
> That would mean though that some code which runs earlier then
> a core_initcall would, would call firmware_request_platform() and
> such code is generally expected to know what they are doing.
>
> I just checked and the cpu microcode stuff which comes to mind
> for this uses a late_initcall so runs long after efi_get_embedded_fw()
> and I have a feeling that trying to use the fw_loader before
> core_initcalls have run is going to end poorly anyways.
>
> Still if you want I can add a pr_warn or maybe even a WARN_ON
> to efi_get_embedded_fw() in case it somehow gets called before
> efi_check_for_embedded_firmwares().
That'd be great.
Luis
next prev parent reply other threads:[~2019-11-14 21:50 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-04 14:50 [PATCH v7 0/8] efi/firmware/platform-x86: Add EFI embedded fw support Hans de Goede
2019-10-04 14:50 ` [PATCH v7 1/8] efi: Export boot-services code and data as debugfs-blobs Hans de Goede
2019-10-09 13:07 ` Ard Biesheuvel
2019-10-09 13:18 ` Hans de Goede
2019-10-09 13:35 ` Ard Biesheuvel
2019-10-09 13:59 ` Hans de Goede
2019-10-09 14:01 ` Ard Biesheuvel
2019-10-14 9:11 ` Luis Chamberlain
2019-11-14 11:31 ` Hans de Goede
2019-10-04 14:50 ` [PATCH v7 2/8] efi: Add embedded peripheral firmware support Hans de Goede
2019-10-11 14:48 ` Luis Chamberlain
2019-11-14 11:27 ` Hans de Goede
2019-11-14 19:42 ` Luis Chamberlain
2019-11-14 20:13 ` Hans de Goede
2019-11-14 20:48 ` Hans de Goede
2019-11-14 21:50 ` Luis Chamberlain [this message]
2019-11-15 12:09 ` Hans de Goede
2019-10-04 14:50 ` [PATCH v7 3/8] firmware: Rename FW_OPT_NOFALLBACK to FW_OPT_NOFALLBACK_SYSFS Hans de Goede
2019-10-11 15:02 ` Luis Chamberlain
2019-11-14 20:22 ` Hans de Goede
2019-10-04 14:50 ` [PATCH v7 4/8] firmware: Add new platform fallback mechanism and firmware_request_platform() Hans de Goede
2019-10-04 19:33 ` kbuild test robot
2019-10-04 19:33 ` kbuild test robot
2019-10-04 19:33 ` kbuild test robot
2019-10-04 20:45 ` kbuild test robot
2019-10-04 20:45 ` kbuild test robot
2019-10-04 20:45 ` kbuild test robot
2019-10-04 23:17 ` Dmitry Torokhov
2019-10-05 9:53 ` Hans de Goede
2019-10-11 15:31 ` Luis Chamberlain
2019-10-11 15:29 ` Luis Chamberlain
2019-11-14 11:32 ` Hans de Goede
2019-10-04 14:50 ` [PATCH v7 5/8] Input: silead - Switch to firmware_request_platform for retreiving the fw Hans de Goede
2019-10-11 0:47 ` Dmitry Torokhov
2019-10-04 14:50 ` [PATCH v7 6/8] Input: icn8505 " Hans de Goede
2019-10-11 0:47 ` Dmitry Torokhov
2019-10-04 14:50 ` [PATCH v7 7/8] platform/x86: touchscreen_dmi: Add EFI embedded firmware info support Hans de Goede
2019-10-05 3:03 ` kbuild test robot
2019-10-05 3:03 ` kbuild test robot
2019-10-05 3:03 ` kbuild test robot
2019-10-05 7:13 ` kbuild test robot
2019-10-05 7:13 ` kbuild test robot
2019-10-05 7:13 ` kbuild test robot
2019-10-04 14:50 ` [PATCH v7 8/8] platform/x86: touchscreen_dmi: Add info for the Chuwi Vi8 Plus tablet Hans de Goede
2019-10-07 14:19 ` [PATCH v7 0/8] efi/firmware/platform-x86: Add EFI embedded fw support Ingo Molnar
2019-10-08 9:35 ` Hans de Goede
2019-10-08 11:05 ` Ingo Molnar
2019-10-11 14:10 ` Luis Chamberlain
2019-10-11 14:31 ` Hans de Goede
2019-10-11 15:38 ` Luis Chamberlain
2019-10-11 16:38 ` Greg Kroah-Hartman
2019-10-14 9:22 ` Luis Chamberlain
2019-10-14 9:29 ` Greg Kroah-Hartman
2019-10-14 10:31 ` Luis Chamberlain
2019-10-14 10:57 ` Greg Kroah-Hartman
2019-10-16 12:45 ` Luis Chamberlain
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191114215009.GF11244@42.do-not-panic.com \
--to=mcgrof@kernel.org \
--cc=andy@infradead.org \
--cc=ard.biesheuvel@linaro.org \
--cc=bp@alien8.de \
--cc=corbet@lwn.net \
--cc=dave@bewaar.me \
--cc=dmitry.torokhov@gmail.com \
--cc=dvhart@infradead.org \
--cc=gregkh@linuxfoundation.org \
--cc=hdegoede@redhat.com \
--cc=hpa@zytor.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-efi@vger.kernel.org \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=pjones@redhat.com \
--cc=platform-driver-x86@vger.kernel.org \
--cc=rafael@kernel.org \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.