From nobody Wed May 15 04:22:42 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+111027+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+111027+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1699612660; cv=none; d=zohomail.com; s=zohoarc; b=L/d9VNJ2FoTrR4c3p3PN7ZylMvy7mswylT5ztSpodxmOk1ajuqlwWCXI4Fap67GzT26sYH5f6yircs2py0HNuri8KBAqDJ3tTwtbk/IstLWZvoGm7BCnk8mFOWZhPYqiIpJPu1lUgw26YW+PgUOPzbWTxQ+71FM0VR/OaD7k7vE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1699612660; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:Sender:Subject:Subject:To:To:Message-Id; bh=gpZdDhZWYSU4xxbf+53hVMwTkUI2hnMdXIw0RLqC+0U=; b=m6IxUbDTd0YhlbxWteBKCssCJQ0/3u8RXczX9cyiaOZDqQs1QiSAAtcDmPC+p+aIE/BvKlpBDSIIReTiQX75noKqyyFMMM8CQR5HXCo5IGl0Kb7l7U57tRchbAmnt5WqUE2lWeT4jzvsMkx+ZAWs/4UyeWP4xyb20QcFRCq1mtI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+111027+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1699612660055414.6033468604263; Fri, 10 Nov 2023 02:37:40 -0800 (PST) Return-Path: DKIM-Signature: a=rsa-sha256; bh=8oCvMJC/GvT8NL3XVwkTATE9qpQ6aVJ+DU3WuX6PDTw=; c=relaxed/simple; d=groups.io; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding; s=20140610; t=1699612659; v=1; b=dHKjQ1sUjvGtREPn+bLtM5lQHpmW4ZSQXnfQsL8yv3XYPLPEUQb0G9d3urwgv6GSXTe47omT V3X6cLIX6Dr686GYxazInuhnXJi8OpDaBLNxzchWFaaCB0MU90ZSbngGGvhryDayUh+6UQ39Hwo u6I9kJ7sNsPb3nksxrFW4OuY= X-Received: by 127.0.0.2 with SMTP id QBQsYY1788612xvpPnsjoMdb; Fri, 10 Nov 2023 02:37:39 -0800 X-Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.126]) by mx.groups.io with SMTP id smtpd.web10.24636.1699612658910708948 for ; Fri, 10 Nov 2023 02:37:39 -0800 X-IronPort-AV: E=McAfee;i="6600,9927,10889"; a="375207137" X-IronPort-AV: E=Sophos;i="6.03,291,1694761200"; d="scan'208";a="375207137" X-Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Nov 2023 02:37:38 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10889"; a="798587408" X-IronPort-AV: E=Sophos;i="6.03,291,1694761200"; d="scan'208";a="798587408" X-Received: from shwdeopenlab813.ccr.corp.intel.com ([10.239.55.230]) by orsmga001.jf.intel.com with ESMTP; 10 Nov 2023 02:37:35 -0800 From: "Yuanhao Xie" To: devel@edk2.groups.io Cc: Yuanhao Xie , Eric Dong , Ray Ni , Rahul Kumar , Gerd Hoffmann Subject: [edk2-devel] [PATCH] UefiCpuPkg/MpInitLib: Enable execute disable bit. Date: Fri, 10 Nov 2023 18:37:32 +0800 Message-Id: <20231110103732.1399-1-yuanhao.xie@intel.com> MIME-Version: 1.0 Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,yuanhao.xie@intel.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: umvzrT5LFf31Pnzk5RGZ9MzXx1787277AA= Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1699612660959100001 Content-Type: text/plain; charset="utf-8" From: Yuanhao Xie This patch synchronizes the No-Execute bit in the IA32_EFER register for the APs before the RestoreVolatileRegisters operation. The commit 964a4f0, titled "Eliminate the second INIT-SIPI-SIPI sequence," replaces the second INIT-SIPI-SIPI sequence with the BSP calling the SwitchApContext function to initiate a specialized start-up signal, waking up APs in the DXE instead of using INIT-SIPI-SIPI. Due to this change, the logic for "Enable execute disable bit" in MpFuncs.nasm is no longer executed. However, to ensure the proper setup of the page table, it is necessary to synchronize the IA32_EFER.NXE for APs before executing RestoreVolatileRegisters . Based on SDM: If IA32_EFER.NXE is set to 1, it signifies execute-disable, meaning instruction fetches are not allowed from the 4-KByte page controlled by this entry. Conversely, if it is set to 0, it is reserved. Signed-off-by: Yuanhao Xie Cc: Eric Dong Cc: Ray Ni Cc: Rahul Kumar Cc: Gerd Hoffmann --- UefiCpuPkg/Library/MpInitLib/MpLib.c | 33 ++++++++++++++++++---------- UefiCpuPkg/Library/MpInitLib/MpLib.h | 1 + 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.c b/UefiCpuPkg/Library/MpIn= itLib/MpLib.c index 9a6ec5db5c..a5ff7ef91f 100644 --- a/UefiCpuPkg/Library/MpInitLib/MpLib.c +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.c @@ -906,21 +906,29 @@ ApWakeupFunction ( **/ VOID EFIAPI -DxeApEntryPoint ( - CPU_MP_DATA *CpuMpData +DxeApEntryPoint( + CPU_MP_DATA *CpuMpData ) { - UINTN ProcessorNumber; + UINTN ProcessorNumber; + MSR_IA32_EFER_REGISTER EferMsr; =20 - GetProcessorNumber (CpuMpData, &ProcessorNumber); - RestoreVolatileRegisters (&CpuMpData->CpuData[0].VolatileRegisters, FALS= E); - InterlockedIncrement ((UINT32 *)&CpuMpData->FinishedCount); - PlaceAPInMwaitLoopOrRunLoop ( - CpuMpData->ApLoopMode, - CpuMpData->CpuData[ProcessorNumber].StartupApSignal, - CpuMpData->ApTargetCState - ); - ApWakeupFunction (CpuMpData, ProcessorNumber); + GetProcessorNumber(CpuMpData, &ProcessorNumber); + InterlockedIncrement((UINT32 *)&CpuMpData->FinishedCount); + + if (CpuMpData->EnableExecuteDisableForSwitchContext) + { + EferMsr.Uint64 =3D AsmReadMsr64(MSR_IA32_EFER); + EferMsr.Bits.NXE =3D 1; + AsmWriteMsr64(MSR_IA32_EFER, EferMsr.Uint64); + } + + RestoreVolatileRegisters(&CpuMpData->CpuData[0].VolatileRegisters, FALSE= ); + PlaceAPInMwaitLoopOrRunLoop( + CpuMpData->ApLoopMode, + CpuMpData->CpuData[ProcessorNumber].StartupApSignal, + CpuMpData->ApTargetCState); + ApWakeupFunction(CpuMpData, ProcessorNumber); } =20 /** @@ -2190,6 +2198,7 @@ MpInitLibInitialize ( =20 CpuMpData->FinishedCount =3D 0; CpuMpData->InitFlag =3D ApInitDone; + CpuMpData->EnableExecuteDisableForSwitchContext =3D IsBspExecuteDisa= bleEnabled (); SaveCpuMpData (CpuMpData); // // In scenarios where both the PEI and DXE phases run in the same diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.h b/UefiCpuPkg/Library/MpIn= itLib/MpLib.h index d2f411f006..bf86a13820 100644 --- a/UefiCpuPkg/Library/MpInitLib/MpLib.h +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.h @@ -265,6 +265,7 @@ struct _CPU_MP_DATA { UINT64 TotalTime; EFI_EVENT WaitEvent; UINTN **FailedCpuList; + BOOLEAN EnableExecuteDisableForSwitchContext; =20 AP_INIT_STATE InitFlag; BOOLEAN SwitchBspFlag; --=20 2.39.1.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#111027): https://edk2.groups.io/g/devel/message/111027 Mute This Topic: https://groups.io/mt/102504353/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-