From nobody Fri May 3 18:26:10 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) smtp.mailfrom=edk2-devel-bounces@lists.01.org Return-Path: Received: from ml01.01.org (ml01.01.org [198.145.21.10]) by mx.zohomail.com with SMTPS id 1506577827371788.2153112961686; Wed, 27 Sep 2017 22:50:27 -0700 (PDT) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id D2B8E21EC8D17; Wed, 27 Sep 2017 22:47:11 -0700 (PDT) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) (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 0D7CE21EC8D0C for ; Wed, 27 Sep 2017 22:47:09 -0700 (PDT) Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 27 Sep 2017 22:50:24 -0700 Received: from ray-dev.ccr.corp.intel.com ([10.239.9.7]) by fmsmga001.fm.intel.com with ESMTP; 27 Sep 2017 22:50:23 -0700 X-Original-To: edk2-devel@lists.01.org Received-SPF: none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) client-ip=198.145.21.10; envelope-from=edk2-devel-bounces@lists.01.org; helo=ml01.01.org; Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.115; helo=mga14.intel.com; envelope-from=ruiyu.ni@intel.com; receiver=edk2-devel@lists.01.org X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.42,448,1500966000"; d="scan'208";a="1199899937" From: Ruiyu Ni To: edk2-devel@lists.01.org Date: Thu, 28 Sep 2017 13:50:21 +0800 Message-Id: <20170928055021.111952-1-ruiyu.ni@intel.com> X-Mailer: git-send-email 2.12.2.windows.2 Subject: [edk2] [PATCH] MdeModulePkg/BdsDxe: Don't delete "BootNext" until booting it X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Eric Dong , Star Zeng MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" X-ZohoMail: RSF_4 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Current implementation deletes the "BootNext" before calling any PlatformBootManagerLib APIs, but if system resets in PlatformBootManagerLib APIs, "BootNext" is not consumed but lost. The patch defers the deletion of "BootNext" to before booting it. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ruiyu Ni Cc: Eric Dong Cc: Star Zeng Reviewed-by: Star Zeng Reviewed-by: Sunny Wang --- MdeModulePkg/Universal/BdsDxe/BdsEntry.c | 35 ++++++++++++++++++----------= ---- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/MdeModulePkg/Universal/BdsDxe/BdsEntry.c b/MdeModulePkg/Univer= sal/BdsDxe/BdsEntry.c index ac5f9088dd..a6fe617b56 100644 --- a/MdeModulePkg/Universal/BdsDxe/BdsEntry.c +++ b/MdeModulePkg/Universal/BdsDxe/BdsEntry.c @@ -808,7 +808,8 @@ BdsEntry ( ASSERT_EFI_ERROR (Status); =20 // - // Cache and remove the "BootNext" NV variable. + // Cache the "BootNext" NV variable before calling any PlatformBootManag= erLib APIs + // This could avoid the "BootNext" set by PlatformBootManagerLib be cons= umed in this boot. // GetEfiGlobalVariable2 (EFI_BOOT_NEXT_VARIABLE_NAME, (VOID **) &BootNext,= &DataSize); if (DataSize !=3D sizeof (UINT16)) { @@ -817,17 +818,6 @@ BdsEntry ( } BootNext =3D NULL; } - Status =3D gRT->SetVariable ( - EFI_BOOT_NEXT_VARIABLE_NAME, - &gEfiGlobalVariableGuid, - 0, - 0, - NULL - ); - // - // Deleting NV variable shouldn't fail unless it doesn't exist. - // - ASSERT (Status =3D=3D EFI_SUCCESS || Status =3D=3D EFI_NOT_FOUND); =20 // // Initialize the platform language variables @@ -1052,10 +1042,25 @@ BdsEntry ( =20 EfiBootManagerHotkeyBoot (); =20 - // - // Boot to "BootNext" - // if (BootNext !=3D NULL) { + // + // Delete "BootNext" NV variable before transferring control to it t= o prevent loops. + // + Status =3D gRT->SetVariable ( + EFI_BOOT_NEXT_VARIABLE_NAME, + &gEfiGlobalVariableGuid, + 0, + 0, + NULL + ); + // + // Deleting NV variable shouldn't fail unless it doesn't exist. + // + ASSERT (Status =3D=3D EFI_SUCCESS || Status =3D=3D EFI_NOT_FOUND); + + // + // Boot to "BootNext" + // UnicodeSPrint (BootNextVariableName, sizeof (BootNextVariableName), = L"Boot%04x", *BootNext); Status =3D EfiBootManagerVariableToLoadOption (BootNextVariableName,= &LoadOption); if (!EFI_ERROR (Status)) { --=20 2.12.2.windows.2 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel