From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by mx.groups.io with SMTP id smtpd.web10.72444.1638246223814649324 for ; Mon, 29 Nov 2021 20:23:44 -0800 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 134.134.136.20, mailfrom: guomin.jiang@intel.com) X-IronPort-AV: E=McAfee;i="6200,9189,10183"; a="223366788" X-IronPort-AV: E=Sophos;i="5.87,275,1631602800"; d="scan'208";a="223366788" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Nov 2021 20:23:42 -0800 X-IronPort-AV: E=Sophos;i="5.87,275,1631602800"; d="scan'208";a="511997687" Received: from guominji-mobl.ccr.corp.intel.com ([10.238.14.26]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Nov 2021 20:23:41 -0800 From: "Guomin Jiang" To: devel@edk2.groups.io Cc: Guo Dong , Ray Ni , Maurice Ma , Benjamin You Subject: [PATCH 1/1] UefiPayloadPkg: Update the Module Info rather than create new Info. Date: Tue, 30 Nov 2021 12:23:37 +0800 Message-Id: <20211130042337.430-1-guomin.jiang@intel.com> X-Mailer: git-send-email 2.30.0.windows.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3754 1. DxeCore will use ModuleInfo to install LoadedImage protocol for DxeCore. 2. DxeIpl will create the ModuleInfo of UniversalPayload. and UniversalPayload will create the ModuleInfo of DxeCore. 3. Only the first ModuleInfo will be used by DxeCore to install LoadedImage. 4. So it will create the mismatched ModuleInfo for DxeCore. Changes: 1. When found the ModuleInfo, update it with DxeCore Info only. 2. Create new ModuleInfo if found no ModuleInfo. Signed-off-by: Guomin Jiang Cc: Guo Dong Cc: Ray Ni Cc: Maurice Ma Cc: Benjamin You --- .../Library/PayloadEntryHobLib/Hob.c | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/UefiPayloadPkg/Library/PayloadEntryHobLib/Hob.c b/UefiPayloadPkg/Library/PayloadEntryHobLib/Hob.c index 61cd11ba0335..b840e7914f7a 100644 --- a/UefiPayloadPkg/Library/PayloadEntryHobLib/Hob.c +++ b/UefiPayloadPkg/Library/PayloadEntryHobLib/Hob.c @@ -331,6 +331,30 @@ BuildModuleHob ( ASSERT (((MemoryAllocationModule & (EFI_PAGE_SIZE - 1)) == 0) && ((ModuleLength & (EFI_PAGE_SIZE - 1)) == 0)); + Hob = GetFirstHob (EFI_HOB_TYPE_MEMORY_ALLOCATION); + ASSERT (Hob != NULL); + while ((Hob = GetNextHob (EFI_HOB_TYPE_MEMORY_ALLOCATION, Hob)) != NULL) { + if (CompareGuid (&Hob->MemoryAllocationHeader.Name, &gEfiHobMemoryAllocModuleGuid)) { + // + // Update Dxe Core HOB. + // + Hob->MemoryAllocationHeader.MemoryBaseAddress = MemoryAllocationModule; + Hob->MemoryAllocationHeader.MemoryLength = ModuleLength; + Hob->MemoryAllocationHeader.MemoryType = EfiBootServicesCode; + + ZeroMem (Hob->MemoryAllocationHeader.Reserved, sizeof (Hob->MemoryAllocationHeader.Reserved)); + + CopyGuid (&Hob->ModuleName, ModuleName); + Hob->EntryPoint = EntryPoint; + + // + // The Dxe Core HOB should only one. When find it, update and return + // + return; + } + Hob = GET_NEXT_HOB (Hob); + } + Hob = CreateHob (EFI_HOB_TYPE_MEMORY_ALLOCATION, sizeof (EFI_HOB_MEMORY_ALLOCATION_MODULE)); CopyGuid (&(Hob->MemoryAllocationHeader.Name), &gEfiHobMemoryAllocModuleGuid); -- 2.30.0.windows.2