From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by spool.mail.gandi.net (Postfix) with ESMTPS id BBCD5941B5B for ; Tue, 31 Oct 2023 17:44:06 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=H9XBKmQ1MW1AKBX9V0/2SRjU79BkyZCj8ROKrrd5rIQ=; c=relaxed/simple; d=groups.io; h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject:To:Cc:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Type:Content-Transfer-Encoding; s=20140610; t=1698774245; v=1; b=jt5T1/4eYZeQNynkjWpzFOeB6RjLNIk/uE3OxclOSZd0ncoLIbzOXmRpH+ak1pCb7Xqxn8uW fC72nuLWp0OAD0O8I0cF68z8smdC/OPGEUPKUa/puR2Sr1jXuA/e1Pmq35PtQFm37+def34FgW8 7afekyoQb3M9DTRnZ4VnSuGU= X-Received: by 127.0.0.2 with SMTP id An1DYY7687511xy5bsYYCt3Z; Tue, 31 Oct 2023 10:44:05 -0700 X-Received: from mail-ej1-f46.google.com (mail-ej1-f46.google.com [209.85.218.46]) by mx.groups.io with SMTP id smtpd.web10.2204.1698774244547372522 for ; Tue, 31 Oct 2023 10:44:04 -0700 X-Received: by mail-ej1-f46.google.com with SMTP id a640c23a62f3a-9d216597f64so490012766b.3 for ; Tue, 31 Oct 2023 10:44:04 -0700 (PDT) X-Gm-Message-State: Khwk2qirTcp7vOdOc2sBD7Gnx7686176AA= X-Google-Smtp-Source: AGHT+IGGH1k7IrfKIHIcpiMinSMlPtDo9JUCj5wbyaS8nck3IeQkKQh/7CBVvTigKyDF53uhblKkL+ffxMeha2pe2d8= X-Received: by 2002:a17:906:51ce:b0:9bd:a5a3:3328 with SMTP id v14-20020a17090651ce00b009bda5a33328mr53576ejk.13.1698774242405; Tue, 31 Oct 2023 10:44:02 -0700 (PDT) MIME-Version: 1.0 References: <20231026135324.15914-1-ngompa@fedoraproject.org> <38bf5698-07be-3421-ad0b-5dd028e9155b@redhat.com> In-Reply-To: From: "Neal Gompa" Date: Tue, 31 Oct 2023 13:43:25 -0400 Message-ID: Subject: Re: [edk2-devel] [PATCH] MdeModulePkg/UefiBootManagerLib: Signal ReadyToBoot on platform recovery To: devel@edk2.groups.io, lersek@redhat.com Cc: Pete Batard , =?UTF-8?Q?Daniel_P_=2E_Berrang=C3=A9?= , Gerd Hoffmann , Samer El-Haj-Mahmoud Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,ngompa13@gmail.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20140610 header.b="jt5T1/4e"; dmarc=fail reason="SPF not aligned (relaxed), DKIM not aligned (relaxed)" header.from=gmail.com (policy=none); spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io On Thu, Oct 26, 2023 at 12:39=E2=80=AFPM Laszlo Ersek w= rote: > > On 10/26/23 18:19, Laszlo Ersek wrote: > > On 10/26/23 15:53, Neal Gompa wrote: > >> From: Neal Gompa > >> > >> Currently, the ReadyToBoot event is only signaled when a formal Boot > >> Manager option is executed (in BmBoot.c -> EfiBootManagerBoot ()). > >> > >> However, the introduction of Platform Recovery in UEFI 2.5 makes it > >> necessary to signal ReadyToBoot when a Platform Recovery boot loader > >> runs because otherwise it may lead to the execution of a boot loader > >> that has similar requirements to a regular one that is not launched > >> as a Boot Manager option. > >> > >> This is especially critical to ensuring that the graphical console > >> is actually usable during platform recovery, as some platforms do > >> rely on the ConsolePrefDxe driver, which only performs console > >> initialization after ReadyToBoot is triggered. > >> > >> This patch fixes that behavior by calling EfiSignalEventReadyToBoot () > >> in EfiBootManagerProcessLoadOption (), which is the function that sets > >> up the platform recovery boot process. > >> > >> The expected behavior has been clarified in the UEFI 2.10 specificatio= n > >> to explicitly indicate this behavior is required for correct operation= . > >> > >> This is a rebased version of the patch originally written by Pete Bata= rd. > >> > >> Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3D2831 > >> > >> Cc: Pete Batard > >> Cc: Daniel P. Berrang=C3=A9 > >> Cc: Gerd Hoffmann > >> Cc: Samer El-Haj-Mahmoud > >> > >> Co-authored-by: Pete Batard > >> Signed-off-by: Neal Gompa > >> --- > >> MdeModulePkg/Library/UefiBootManagerLib/BmLoadOption.c | 9 +++++++++ > >> 1 file changed, 9 insertions(+) > >> > >> diff --git a/MdeModulePkg/Library/UefiBootManagerLib/BmLoadOption.c b/= MdeModulePkg/Library/UefiBootManagerLib/BmLoadOption.c > >> index 2087f0b91d..31ed608817 100644 > >> --- a/MdeModulePkg/Library/UefiBootManagerLib/BmLoadOption.c > >> +++ b/MdeModulePkg/Library/UefiBootManagerLib/BmLoadOption.c > >> @@ -1416,6 +1416,15 @@ EfiBootManagerProcessLoadOption ( > >> return EFI_SUCCESS; > >> } > >> > >> + // > >> + // Signal the EVT_SIGNAL_READY_TO_BOOT event when we are about to l= oad and execute the boot option. > >> + // > >> + EfiSignalEventReadyToBoot (); > >> + // > >> + // Report Status Code to indicate ReadyToBoot was signalled > >> + // > >> + REPORT_STATUS_CODE (EFI_PROGRESS_CODE, (EFI_SOFTWARE_DXE_BS_DRIVER = | EFI_SW_DXE_BS_PC_READY_TO_BOOT_EVENT)); > >> + > >> // > >> // Load and start the load option. > >> // > > > > While the patch does the right thing for the latest UEFI spec language, > > it does a bit too much. > > > > The spec says (v2.10), under 7.1.2 "EFI_BOOT_SERVICES.CreateEventEx()": > > > > ----------- > > EFI_EVENT_GROUP_READY_TO_BOOT > > > > This event group is notified by the system right before notifying > > EFI_EVENT_GROUP_AFTER_READY_TO_BOOT event group when the Boot Manager i= s > > about to load and execute a boot option or a platform or OS recovery > > option. The event group presents the last chance to modify device or > > system configuration prior to passing control to a boot option. > > ----------- > > > > NB "boot option", or "platform or OS recovery option". > > > > However, EfiBootManagerProcessLoadOption() is also used for launching > > Driver#### and SysPrep#### options. > > > > EfiBootManagerProcessLoadOption() has two call sites: > > > > (1) in ProcessLoadOptions() [MdeModulePkg/Universal/BdsDxe/BdsEntry.c] > > > > (2) near the end of BdsEntry() [MdeModulePkg/Universal/BdsDxe/BdsEntry.= c] > > > > Call site (2) bears the comment "When platform recovery is not enabled, > > still boot to platform default file path", so I figure signaling > > ready-to-boot at that point is fine. > > > > Call site (1) requires further investigation. Namely, > > ProcessLoadOptions() itself is called from three locations, all inside > > BdsEntry() [MdeModulePkg/Universal/BdsDxe/BdsEntry.c]: > > > > (1.1) under comment "Execute Driver Options", for "LoadOptionTypeDriver= " > > type load options > > > > (1.2) under comment "Execute SysPrep####", for "LoadOptionTypeSysPrep" > > type load options > > > > (1.3) for "LoadOptionTypePlatformRecovery" type load options. > > > > I figure the intended extension is for case (1.3), but the patch, as > > proposed, will also affect (1.1) and (1.2); that is, when Driver#### an= d > > SysPrep#### options are processes. That's beyond what the spec says, in > > my opinion. > > > > Now, EfiBootManagerProcessLoadOption() takes a pointer to an > > EFI_BOOT_MANAGER_LOAD_OPTION structure. This structure has a field > > called OptionType (of type EFI_BOOT_MANAGER_LOAD_OPTION_TYPE). You migh= t > > want to restrict the signaling and the status code reporting to when > > LoadOption->OptionType is either LoadOptionTypeBoot or > > LoadOptionTypePlatformRecovery (i.e., exclude LoadOptionTypeDriver and > > LoadOptionTypeSysPrep). > > In fact, > > EfiBootManagerProcessLoadOption() already checks > "LoadOption->OptionType" higher up, and if its LoadOptionTypeBoot, then > the function returns early, with EFI_UNSUPPORTED. > > Therefore, IMO, you need to restrict the logic you are proposing to > > LoadOption->OptionType =3D=3D LoadOptionTypePlatformRecovery > > exclusively. > I've addressed this in the v2: https://edk2.groups.io/g/devel/message/11043= 8 --=20 =E7=9C=9F=E5=AE=9F=E3=81=AF=E3=81=84=E3=81=A4=E3=82=82=E4=B8=80=E3=81=A4=EF= =BC=81/ Always, there's only one truth! -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#110439): https://edk2.groups.io/g/devel/message/110439 Mute This Topic: https://groups.io/mt/102200076/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-