From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.120; helo=mga04.intel.com; envelope-from=star.zeng@intel.com; receiver=edk2-devel@lists.01.org Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) (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 CDCFB202E5E57 for ; Mon, 6 Nov 2017 01:12:04 -0800 (PST) Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 06 Nov 2017 01:16:02 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.44,351,1505804400"; d="scan'208";a="1214702489" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by fmsmga001.fm.intel.com with ESMTP; 06 Nov 2017 01:16:02 -0800 Received: from fmsmsx122.amr.corp.intel.com (10.18.125.37) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.319.2; Mon, 6 Nov 2017 01:16:02 -0800 Received: from shsmsx152.ccr.corp.intel.com (10.239.6.52) by fmsmsx122.amr.corp.intel.com (10.18.125.37) with Microsoft SMTP Server (TLS) id 14.3.319.2; Mon, 6 Nov 2017 01:16:02 -0800 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.175]) by SHSMSX152.ccr.corp.intel.com ([169.254.6.93]) with mapi id 14.03.0319.002; Mon, 6 Nov 2017 17:16:00 +0800 From: "Zeng, Star" To: "Wang, Jian J" , "edk2-devel@lists.01.org" CC: Laszlo Ersek , "Yao, Jiewen" , "Dong, Eric" , "Zeng, Star" Thread-Topic: [edk2] [PATCH v2] UefiCpuPkg/CpuDxe: Fix multiple entries of RT_CODE in memory map Thread-Index: AQHTVD7B/uDqHmlwpEW1n+2GtWyns6MHE7vw Date: Mon, 6 Nov 2017 09:15:59 +0000 Message-ID: <0C09AFA07DD0434D9E2A0C6AEB0483103B9B20B5@shsmsx102.ccr.corp.intel.com> References: <20171103005729.7856-1-jian.j.wang@intel.com> In-Reply-To: <20171103005729.7856-1-jian.j.wang@intel.com> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH v2] UefiCpuPkg/CpuDxe: Fix multiple entries of RT_CODE in memory map 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: , X-List-Received-Date: Mon, 06 Nov 2017 09:12:05 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable I am ok to this code approach. Acknowledged-by: Star Zeng Besides, I think except GCD services, DxeCore should not call gCpu->SetMemo= ryAttributes() directly, for example ApplyMemoryProtectionPolicy(), it shou= ld have no assumption of the CPU code (to set capabilities), and call GCD s= etcapabilities first, and then call GCD setattributes since 14dde9e903bb9a7= 19ebb8f3381da72b19509bc36 "MdeModulePkg/Core: Fix out-of-sync issue in GCD"= , otherwise there may be mismatch of page attributes between GCD and gCPU a= fter RefreshGcdMemoryAttributesFromPaging() by the calling gCpu->SetMemoryA= ttributes() in ApplyMemoryProtectionPolicy(). Anyway, that could be in a separated patch. :) Thanks, Star -----Original Message----- From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of Jian= J Wang Sent: Friday, November 3, 2017 8:57 AM To: edk2-devel@lists.01.org Cc: Laszlo Ersek ; Yao, Jiewen ; D= ong, Eric Subject: [edk2] [PATCH v2] UefiCpuPkg/CpuDxe: Fix multiple entries of RT_CO= DE in memory map > v2 > a. Fix an issue which will cause setting capability failure if size is sm= aller > than a page. More than one entry of RT_CODE memory might cause boot problem for some old= OSs. This patch will fix this issue to keep OS compatibility as much as po= ssible. More detailed information, please refer to https://bugzilla.tianocore.org/show_bug.cgi?id=3D753 Cc: Eric Dong Cc: Jiewen Yao Cc: Laszlo Ersek Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Jian J Wang --- UefiCpuPkg/CpuDxe/CpuPageTable.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/UefiCpuPkg/CpuDxe/CpuPageTable.c b/UefiCpuPkg/CpuDxe/CpuPageTa= ble.c index d312eb66f8..4a7827ebc9 100644 --- a/UefiCpuPkg/CpuDxe/CpuPageTable.c +++ b/UefiCpuPkg/CpuDxe/CpuPageTable.c @@ -809,7 +809,9 @@ RefreshGcdMemoryAttributesFromPaging ( PageLength =3D 0; =20 for (Index =3D 0; Index < NumberOfDescriptors; Index++) { - if (MemorySpaceMap[Index].GcdMemoryType =3D=3D EfiGcdMemoryTypeNonExis= tent) { + if (MemorySpaceMap[Index].GcdMemoryType =3D=3D EfiGcdMemoryTypeNonExis= tent + || (MemorySpaceMap[Index].BaseAddress & EFI_PAGE_MASK) !=3D 0 + || (MemorySpaceMap[Index].Length & EFI_PAGE_MASK) !=3D 0) { continue; } =20 @@ -829,6 +831,15 @@ RefreshGcdMemoryAttributesFromPaging ( // Sync real page attributes to GCD BaseAddress =3D MemorySpaceMap[Index].BaseAddress; MemorySpaceLength =3D MemorySpaceMap[Index].Length; + Capabilities =3D MemorySpaceMap[Index].Capabilities | + EFI_MEMORY_PAGETYPE_MASK; + Status =3D gDS->SetMemorySpaceCapabilities ( + BaseAddress, + MemorySpaceLength, + Capabilities + ); + ASSERT_EFI_ERROR (Status); + while (MemorySpaceLength > 0) { if (PageLength =3D=3D 0) { PageEntry =3D GetPageTableEntry (&PagingContext, BaseAddress, &Pag= eAttribute); @@ -846,7 +857,6 @@ RefreshGcdMemoryAttributesFromPaging ( if (Attributes !=3D (MemorySpaceMap[Index].Attributes & EFI_MEMORY= _PAGETYPE_MASK)) { DoUpdate =3D TRUE; Attributes |=3D (MemorySpaceMap[Index].Attributes & ~EFI_MEMORY_= PAGETYPE_MASK); - Capabilities =3D Attributes | MemorySpaceMap[Index].Capabilities= ; } else { DoUpdate =3D FALSE; } @@ -854,8 +864,8 @@ RefreshGcdMemoryAttributesFromPaging ( =20 Length =3D MIN (PageLength, MemorySpaceLength); if (DoUpdate) { - gDS->SetMemorySpaceCapabilities (BaseAddress, Length, Capabilities= ); - gDS->SetMemorySpaceAttributes (BaseAddress, Length, Attributes); + Status =3D gDS->SetMemorySpaceAttributes (BaseAddress, Length, Att= ributes); + ASSERT_EFI_ERROR (Status); DEBUG ((DEBUG_INFO, "Update memory space attribute: [%02d] %016lx = - %016lx (%08lx -> %08lx)\r\n", Index, BaseAddress, BaseAddress + Length - 1, MemorySpaceMap[Index].Attributes, Attributes)= ); -- 2.14.1.windows.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel