From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=66.187.233.73; helo=mx1.redhat.com; envelope-from=lersek@redhat.com; receiver=edk2-devel@lists.01.org Received: from mx1.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 457C5203369DC for ; Fri, 29 Jun 2018 05:43:04 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 8C191401C978; Fri, 29 Jun 2018 12:43:03 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-120-43.rdu2.redhat.com [10.10.120.43]) by smtp.corp.redhat.com (Postfix) with ESMTP id D6C20111CD5D; Fri, 29 Jun 2018 12:43:02 +0000 (UTC) To: Ruiyu Ni , edk2-devel@lists.01.org Cc: Michael Turner References: <20180629060344.105716-1-ruiyu.ni@intel.com> <20180629060344.105716-3-ruiyu.ni@intel.com> From: Laszlo Ersek Message-ID: Date: Fri, 29 Jun 2018 14:43:02 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 MIME-Version: 1.0 In-Reply-To: <20180629060344.105716-3-ruiyu.ni@intel.com> X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.5]); Fri, 29 Jun 2018 12:43:03 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.5]); Fri, 29 Jun 2018 12:43:03 +0000 (UTC) for IP:'10.11.54.3' DOMAIN:'int-mx03.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'lersek@redhat.com' RCPT:'' Subject: Re: [PATCH v2 2/2] MdeModulePkg/BdsDxe: Call *UnableToBoot() for ultimate boot failure X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 29 Jun 2018 12:43:04 -0000 Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Hi Ray, again I'm only requesting a comment update: On 06/29/18 08:03, Ruiyu Ni wrote: > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=982 > > The patch changes the default core behavior of ultimate boot failure > to launch Boot Manager Menu. > > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Ruiyu Ni > Cc: Sean Brogan > Cc: Michael Turner > Cc: Laszlo Ersek > Cc: Sunny Wang > --- > MdeModulePkg/Universal/BdsDxe/BdsEntry.c | 65 +++++++------------------------- > 1 file changed, 13 insertions(+), 52 deletions(-) > > diff --git a/MdeModulePkg/Universal/BdsDxe/BdsEntry.c b/MdeModulePkg/Universal/BdsDxe/BdsEntry.c > index 49e403e181..db2a4cf208 100644 > --- a/MdeModulePkg/Universal/BdsDxe/BdsEntry.c > +++ b/MdeModulePkg/Universal/BdsDxe/BdsEntry.c > @@ -634,55 +634,6 @@ BdsFormalizeEfiGlobalVariable ( > BdsFormalizeOSIndicationVariable (); > } > > -/** > - Enter an infinite loop of calling the Boot Manager Menu. > - > - This is a last resort alternative to BdsEntry() giving up for good. This > - function never returns. > - > - @param[in] BootManagerMenu The EFI_BOOT_MANAGER_LOAD_OPTION located and/or > - created by the EfiBootManagerGetBootManagerMenu() > - call in BdsEntry(). > -**/ > -VOID > -BdsBootManagerMenuLoop ( > - IN EFI_BOOT_MANAGER_LOAD_OPTION *BootManagerMenu > - ) > -{ > - EFI_INPUT_KEY Key; > - > - // > - // Normally BdsDxe does not print anything to the system console, but this is > - // a last resort -- the end-user will likely not see any DEBUG messages > - // logged in this situation. > - // > - // AsciiPrint() will NULL-check gST->ConOut internally. We check gST->ConIn > - // here to see if it makes sense to request and wait for a keypress. > - // > - if (gST->ConIn != NULL) { > - AsciiPrint ( > - "%a: No bootable option or device was found.\n" > - "%a: Press any key to enter the Boot Manager Menu.\n", > - gEfiCallerBaseName, > - gEfiCallerBaseName > - ); > - BdsWaitForSingleEvent (gST->ConIn->WaitForKey, 0); > - > - // > - // Drain any queued keys. > - // > - while (!EFI_ERROR (gST->ConIn->ReadKeyStroke (gST->ConIn, &Key))) { > - // > - // just throw away Key > - // > - } > - } > - > - for (;;) { > - EfiBootManagerBoot (BootManagerMenu); > - } > -} > - > /** > > Service routine for BdsInstance->Entry(). Devices are connected, the > @@ -1088,10 +1039,20 @@ BdsEntry ( > } > > // > - // If BootManagerMenu is available, fall back to it indefinitely. > + // Inform the platform that we're unable to boot. The platform may enter > + // BootManagerMenu with the public EfiBootManagerBoot() interface, if so > + // desired. Please replace with the public EfiBootManagerBoot() interface with with the EfiBootManagerGetBootManagerMenu() and EfiBootManagerBoot() interfaces With that update: Reviewed-by: Laszlo Ersek Thank you! Laszlo > // > - if (BootManagerMenuStatus != EFI_NOT_FOUND) { > - BdsBootManagerMenuLoop (&BootManagerMenu); > + Status = EfiBootManagerUnableToBoot (); > + if (EFI_ERROR (Status) && (BootManagerMenuStatus != EFI_NOT_FOUND)) { > + // > + // The platform didn't register a callback; fall back to BootManagerMenu > + // internally, indefinitely. > + // > + > + while (TRUE) { > + EfiBootManagerBoot (&BootManagerMenu); > + } > } > > DEBUG ((EFI_D_ERROR, "[Bds] Unable to boot!\n")); >