From nobody Sat Dec 28 12:20:43 2024 Delivered-To: importer@patchew.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; Authentication-Results: mx.zoho.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 1493950552817990.1486233855927; Thu, 4 May 2017 19:15:52 -0700 (PDT) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id EF7D021A134BB; Thu, 4 May 2017 19:15:50 -0700 (PDT) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) (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 49ACA21A134AE for ; Thu, 4 May 2017 19:15:50 -0700 (PDT) Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga104.jf.intel.com with ESMTP; 04 May 2017 19:15:49 -0700 Received: from ray-dev.ccr.corp.intel.com ([10.239.9.1]) by fmsmga001.fm.intel.com with ESMTP; 04 May 2017 19:15:48 -0700 X-Original-To: edk2-devel@lists.01.org X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.38,290,1491289200"; d="scan'208";a="1143876889" From: Ruiyu Ni To: edk2-devel@lists.01.org Date: Fri, 5 May 2017 10:15:46 +0800 Message-Id: <20170505021546.193068-1-ruiyu.ni@intel.com> X-Mailer: git-send-email 2.12.2.windows.2 Subject: [edk2] [PATCH] UefiCpuPkg/MtrrLib: Don't report OutOfResource when MTRR is enough 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: Jeff Fan 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" The MTRR calculation algorithm contains a bug that when left subtraction cannot produce better MTRR solution, it forgets to restore the BaseAddress/Length so that MtrrLibGetMtrrNumber() returns bigger value of actual required MTRR numbers. As a result, the MtrrLib reports OutOfResource but actually the MTRR is enough. MEMORY_RANGE mC[] =3D { 0, 0x100000, CacheUncacheable, 0x100000, 0x89F00000, CacheWriteBack, 0x8A000000, 0x75000000, CacheUncacheable, 0xFF000000, 0x01000000, CacheWriteProtected, 0x100000000, 0x7F00000000, CacheUncacheable, 0xFC240000, 0x2000, CacheWriteCombining // <-- trigger the error }; Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ruiyu Ni Cc: Jeff Fan Reviewed-by: Jeff Fan --- UefiCpuPkg/Library/MtrrLib/MtrrLib.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/UefiCpuPkg/Library/MtrrLib/MtrrLib.c b/UefiCpuPkg/Library/Mtrr= Lib/MtrrLib.c index 9d1927262a..cf1af29936 100644 --- a/UefiCpuPkg/Library/MtrrLib/MtrrLib.c +++ b/UefiCpuPkg/Library/MtrrLib/MtrrLib.c @@ -851,6 +851,8 @@ MtrrLibGetMtrrNumber ( UINT64 SubtractiveLength; UINT64 BaseAlignment; UINT32 Index; + UINT64 OriginalBaseAddress; + UINT64 OriginalLength; =20 *SubLeft =3D 0; *SubRight =3D 0; @@ -861,6 +863,9 @@ MtrrLibGetMtrrNumber ( // Get the optimal left subtraction solution. // if (BaseAddress !=3D 0) { + + OriginalBaseAddress =3D BaseAddress; + OriginalLength =3D Length; SubtractiveBaseAddress =3D 0; SubtractiveLength =3D 0; // @@ -915,7 +920,10 @@ MtrrLibGetMtrrNumber ( // if (*SubLeft !=3D 0) { BaseAddress =3D SubtractiveBaseAddress; - Length =3D SubtractiveLength; + Length =3D SubtractiveLength; + } else { + BaseAddress =3D OriginalBaseAddress; + Length =3D OriginalLength; } } =20 --=20 2.12.2.windows.2 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel