From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail05.groups.io (mail05.groups.io [45.79.224.7]) by spool.mail.gandi.net (Postfix) with ESMTPS id 967CB740055 for ; Sat, 25 May 2024 01:34:55 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=mjXGyehRfeZgxS1/Jidk6MWePoIJho5NztbzoQz4uWk=; c=relaxed/simple; d=groups.io; h=From:To:Subject:Thread-Topic:Thread-Index:Date:Message-ID:References:In-Reply-To:Accept-Language:msip_labels:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Resent-Date:Resent-From:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Language:Content-Type; s=20240206; t=1716600894; v=1; b=OQSkPZETD3qg6CRKx0zTWZDXPASJaNNJmwoGBrvYy9hmfIkMnuNSFCNPlKMiTTlFTBtXNMzq PyRp3elOw+i3rNcE8SLOIqFb67FqQcoJ1BmelJcmLMdRf3mxop1PXPQ6u54wkNC/GQxne29Bi+7 l3MjlIIUYh6Ew8e8cNDH2aI54ZfbZeYY4yOZ3ShGGz4zDUfUeh7V0/wxwgCPnrqiY2enuQKeSwV bFh2DG4OycKsEZCDvnKHOA6IPmJuspub7QE6QCql0iTaJ/mdRBePR/SGLs5093HGDDIOXZL/n8U Kuq60HhIchCX3SpqipVByqbGgK0qngLmQpIEwXsWx2BOg== X-Received: by 127.0.0.2 with SMTP id jBmzYY7687511xJZfDGmaxHt; Fri, 24 May 2024 18:34:54 -0700 X-Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.10]) by mx.groups.io with SMTP id smtpd.web11.3608.1716600893367051933 for ; Fri, 24 May 2024 18:34:53 -0700 X-CSE-ConnectionGUID: J4WHlfbGRw6745Uy6sT2Ng== X-CSE-MsgGUID: gZj/CU6ERgmKglBVwXbNCw== X-IronPort-AV: E=McAfee;i="6600,9927,11082"; a="30509385" X-IronPort-AV: E=Sophos;i="6.08,187,1712646000"; d="scan'208,217";a="30509385" X-Received: from fmviesa008.fm.intel.com ([10.60.135.148]) by orvoesa102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 May 2024 18:34:52 -0700 X-CSE-ConnectionGUID: k/FviZMDS4qosT1ZoUUySw== X-CSE-MsgGUID: fsBEck1dS8iWlnTxZRpmUA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.08,187,1712646000"; d="scan'208,217";a="34167570" X-Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by fmviesa008.fm.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 24 May 2024 18:34:52 -0700 X-Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) by ORSMSX602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Fri, 24 May 2024 18:34:52 -0700 X-Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by orsmsx610.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39 via Frontend Transport; Fri, 24 May 2024 18:34:52 -0700 X-Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.173) by edgegateway.intel.com (134.134.137.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Fri, 24 May 2024 18:34:51 -0700 X-Received: from MN6PR11MB8244.namprd11.prod.outlook.com (2603:10b6:208:470::14) by DM6PR11MB4724.namprd11.prod.outlook.com (2603:10b6:5:2ad::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7587.36; Sat, 25 May 2024 01:34:49 +0000 X-Received: from MN6PR11MB8244.namprd11.prod.outlook.com ([fe80::41a4:c775:32e6:76a8]) by MN6PR11MB8244.namprd11.prod.outlook.com ([fe80::41a4:c775:32e6:76a8%4]) with mapi id 15.20.7587.035; Sat, 25 May 2024 01:34:49 +0000 From: "Ni, Ray" To: "Feng, Ning" , "devel@edk2.groups.io" , "Ni, Ray" , "Gao, Liming" Subject: Re: [edk2-devel] [PATCH] UefiCpuPkg/MpLib:Do not assume BSP is #0. Thread-Topic: [edk2-devel] [PATCH] UefiCpuPkg/MpLib:Do not assume BSP is #0. Thread-Index: AQHarjCN0uJNmp/a9kao0ZDr8qKuQLGnKlH3gAAAkas= Date: Sat, 25 May 2024 01:34:49 +0000 Message-ID: References: <20240525074209.1672006-1-ning.feng@intel.com> <17D29748B3A2AE5A.12956@groups.io> In-Reply-To: <17D29748B3A2AE5A.12956@groups.io> Accept-Language: en-US X-Mentions: gaoliming@byosoft.com.cn X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MN6PR11MB8244:EE_|DM6PR11MB4724:EE_ x-ms-office365-filtering-correlation-id: e3ac60fd-b9cf-45ed-a452-08dc7c5ade2f x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam-message-info: =?iso-8859-1?Q?Bv0jg1IvlZMU5HHoRNr+IYME416UVfy+9yje3rzW4uQol6gRjaVioSbdaZ?= =?iso-8859-1?Q?aZwxZOpK38MqErEGHvYfU7RICzGULpwX0oXOOYHJMNtqsS/GusQtVSZVBk?= =?iso-8859-1?Q?2oKCV6aOYMDTGJvcp1+hbL/2t78KDxc/mayJUoNP1mmbrADmuwdQcOELlT?= =?iso-8859-1?Q?fTmFpPeOLLhRahNin9VEbAyMvemaOAeTF1zlh+L+kKPIReQDmb9yYSVRTx?= =?iso-8859-1?Q?dW2R53iAXq+Ud1XlemHGCKSjCYDrFlv50whnTH8AVVgCesekMXXgY1RNMn?= =?iso-8859-1?Q?XC9SfGDjt4bYspp+mIDHPUOK8Mo3J2wwKpQcZpKfpPkU+sq7hMOUu36Mw6?= =?iso-8859-1?Q?c5lqz/4iUU37tj9Bae5EHUEpNuQ5v3kXyvgrzybNzNJaZUx5NDzieXJVYu?= =?iso-8859-1?Q?Wcac8b+MljAm0lgw9N/Vm/4CcZ7N3dSHhuz25TePHxr3Fifu4iBuxvjw9G?= =?iso-8859-1?Q?puMAUShN4cQXRtp/4zMoaP5eKwFgKE5LBLfEYcTUhGqi4DoOAUXI00JLM8?= =?iso-8859-1?Q?azKkOhH7/K2Ml7ROc5x6XfuXfiYxemq3uDkw1Ng8ISmxdjPBTZeuqWD8e6?= =?iso-8859-1?Q?7v5xBRbsrJ202mHDeJD5lbUFlLQmGgZWjJGBb7YhPV0klpKndv3lIaXIAE?= =?iso-8859-1?Q?YDDAO0FaOOEKcKajORUhTQZaV0NkEBv3Hn7+hhPmVl1VaGzKlaGmqfSUVK?= =?iso-8859-1?Q?JkVDiZjDrBJZWITx8ejQSAsVYjm6YjVPsLr/g9vgOLLFgRgzeaWgdU/KSU?= =?iso-8859-1?Q?GJDudFVnAgbcjFyd9CdzSvq3b8HliygkUgWuDh+PmzEkN87xGz+sAZa6ZZ?= =?iso-8859-1?Q?6lCRUj6gXyovJX1+pN1Lwpaec/fDx7wHb+32FxxZQGzLQGRsEWFWrFMz9t?= =?iso-8859-1?Q?fNQIYWcoACdZyir51hC7bArkVWcHElwLhG+SfeAiL4wskM9qUMmSC6pe/T?= =?iso-8859-1?Q?Vox+u1E4ihpiTOKLv6z+dRYsO19AVN/XHbdZJVts52+wREubk+/FoQK6xM?= =?iso-8859-1?Q?6YsGA9i4Y+wXNQqw5lB7QM+2jyoGNHmOf3Qz1xfz7Jt2Yb6fnIPQzeDpBl?= =?iso-8859-1?Q?n3+6o/BdbXc722y2z2o5g6n4F1umosx+sda61GGOWIrC2cwpSwB3lBUY7Y?= =?iso-8859-1?Q?uYydleTtg1l257DRQqJoa9IygN8XpyCzR76IYe3oWwEobcngGetNE5rHud?= =?iso-8859-1?Q?jDuJaHxdAR2coVpUn4dGp1+zbtEcGOcOhK+QZo9Vrv7R7VhuQK3MTgwNgR?= =?iso-8859-1?Q?5Fn/jyUZbtfjdBUn232yVmnklvtBBYiDfNiq7E012eosdMGVOStBD2CFzF?= =?iso-8859-1?Q?dn03Co6jJovOhlnPt/zBxyDLQuHey/pjRHnuKvhjPVfIy+4=3D?= x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?fXU/27wtVE0NQ+gWAQASMgdMZ9V99eFcMkXloSL1UJtwtfdUHZQD6off8o?= =?iso-8859-1?Q?mmjVusZ0b+L8lbRu9sNXxujPjSydeBIvv4oQaJekDTnw3te3Dj8rNuAOIm?= =?iso-8859-1?Q?vLieAgISqzhQi7s0g20smqdvVD1chCeLz14+BpwHxkD9dTbT7/264KmJvB?= =?iso-8859-1?Q?s4gxorUtKJuJs/k2PGCan/HQ+FcAnMjHWT3k9k4TWznsdBzQ+fsNfqobej?= =?iso-8859-1?Q?0VPUD75UaqyxBq5yFmodOkOUoF1NnpRyGZL+rmJgT9X0mAzlxhhwth76OX?= =?iso-8859-1?Q?u7ESaJ/G4Nx/NeJAbhhtWdzBZ8PmHF8baA2KxLmCmSbX9OKFDpbeg/aa5l?= =?iso-8859-1?Q?G8ZjDTUdWrKEJQIcRhoSQBvd+h97i2E0eFbIwf/P8/Wncl6c1FqFGbdju3?= =?iso-8859-1?Q?vrMGgpgLkriaBndwWpLX4gfmyOA0d+DVdS1ztznfQ+uPltDtqy5iHUqTDz?= =?iso-8859-1?Q?Nv2vLGae0Iwf7RtendyZKvKRtdDWU9OQIZB0u3fGpsomNwD6uF72J4DTUG?= =?iso-8859-1?Q?8E4WMBQTAoQxv0qPbMPuZ5mPuYODcjvZ3J5RtadhRllVV14DGUUAgJoZuv?= =?iso-8859-1?Q?zN3Nb7pUOR5BKuNAArAjCplCOVb4wYz9AtJrZAv67fTh30E0KKKAs0n5Xh?= =?iso-8859-1?Q?lkEJsSe4Ilc+RDSoTpL8ZJjhEVKW9nRxy2gKF0WqEfhkaU10VMBic+IzUW?= =?iso-8859-1?Q?ugvSC0v+1wItlSxi9trGSUif4sEd2ILDHEkFWNJy1Q13z8SzcONwpNf46S?= =?iso-8859-1?Q?lV2MzOarxiuxgBZAUqUYQUxN3/HIv3AIQS5kRIKLCwepTMNQMiKK82NGP/?= =?iso-8859-1?Q?9VwwWz31QaZbcR+VN/ANVkQA7aUygCAEXX3vTiQiwtyLrxF9Q81lL47iDM?= =?iso-8859-1?Q?+t9KV7Gj+6jWZzB2aoG1mLOYlzlgHihsrNfzxeG8n8F6NF5nolXZ1WVrMJ?= =?iso-8859-1?Q?p0oU4U89KPqP6SaOxEqXsMO/yspkx/26263FSOc/MUypALlY8AQT7WSTzL?= =?iso-8859-1?Q?M8abIIVWFYTreXadiNGBpiyNVV4E3Efa+qxMf79HHLzMg0lDGm01TUHrTJ?= =?iso-8859-1?Q?3dMc2mTm2t+BS2swugrvC+wx55pymIytVzY+3hdz/GIYW5372hRAwl+NgS?= =?iso-8859-1?Q?kA/aZYVa489E7B3N2NaHEPTZsszj/SaBnhNkJ2tYgegsVsA+OgJOn1nbLD?= =?iso-8859-1?Q?YhB36MZ4act+7bt12SQz/vxr/ICV5j9hJgyNYYMNvAGCDg1L0A+MRPwn0d?= =?iso-8859-1?Q?mbCEhSh4truQYX9HIsFAJYu1lTn54bKtuxqDRezDW86No5RMhSMKvnnUyN?= =?iso-8859-1?Q?6ClEa0zhJtA+pUKDK7QGxP6CqcuyhrNoKayDBzChVUlodpQ8G/quq8jpsM?= =?iso-8859-1?Q?OuUbtmAW0itv6S24iWwZ0keA/rtuSxw1k8Es/1VzpGiqz7vHiRyuXo/JIC?= =?iso-8859-1?Q?tipckEIzQ9yGzjHEzRywa4aBGZDKhAzok5i+kquAHAEBv8IGVBjicJMvqG?= =?iso-8859-1?Q?LcKDx16Ul69wXDYTb3sYy1hSmOYnZ1RBh6f6rWwSGOB1pOroJgquHc4mVQ?= =?iso-8859-1?Q?PVa6JsRaFsB8w6p4jeEvyj9Tof/sy8vpDshGrkbP8FP0+CuI7c0S+TsB8f?= =?iso-8859-1?Q?ZTtIH292pwI+U=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN6PR11MB8244.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e3ac60fd-b9cf-45ed-a452-08dc7c5ade2f X-MS-Exchange-CrossTenant-originalarrivaltime: 25 May 2024 01:34:49.6182 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: P4xlCpJ7fyVUDncD400bFzHKwwohL1m3VIlwTiVzUb1ypR6HTSIF/tfhjLnUcd7Mf6N1ah9BVfg5Syf6GoDLGQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR11MB4724 X-OriginatorOrg: intel.com 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 Resent-Date: Fri, 24 May 2024 18:34:53 -0700 Resent-From: ray.ni@intel.com Reply-To: devel@edk2.groups.io,ray.ni@intel.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: Nk0lsjMaQEWJ588Lk1itWL0px7686176AA= Content-Language: en-US Content-Type: multipart/alternative; boundary="_000_MN6PR11MB82441022813E0A1E4BCF9AA08CF62MN6PR11MB8244namp_" X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20240206 header.b=OQSkPZET; dmarc=fail reason="SPF not aligned (relaxed), DKIM not aligned (relaxed)" header.from=intel.com (policy=none); spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 45.79.224.7 as permitted sender) smtp.mailfrom=bounce@groups.io --_000_MN6PR11MB82441022813E0A1E4BCF9AA08CF62MN6PR11MB8244namp_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable I created PR for merge: UefiCpuPkg/MpLib:Do not assume BSP is #0. by niruiy= u =B7 Pull Request #5683 =B7 tianocore/edk2 (github.com) But, I cannot set "push" label. @Gao, Liming? Thanks, Ray ________________________________ From: devel@edk2.groups.io on behalf of Ni, Ray Sent: Saturday, May 25, 2024 9:32 To: Feng, Ning ; devel@edk2.groups.io Subject: Re: [edk2-devel] [PATCH] UefiCpuPkg/MpLib:Do not assume BSP is #0. Reviewed-by: Ray Ni Thanks, Ray ________________________________ From: Feng, Ning Sent: Saturday, May 25, 2024 15:42 To: devel@edk2.groups.io Cc: Feng, Ning ; Ni, Ray Subject: [PATCH] UefiCpuPkg/MpLib:Do not assume BSP is #0. REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3D4778 MPInitlib have wrong expectation that BSP index should always be 0 in MpInitLibInitialize(), SwitchBsp(),ApWakeupFunction(). That will cause the data mismatch, if the initial BSP is not 0. Cc: Ray Ni Signed-off-by: Ning Feng --- UefiCpuPkg/Library/MpInitLib/MpLib.c | 47 ++++++++++++++++++---------- 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.c b/UefiCpuPkg/Library/MpIn= itLib/MpLib.c index d724456502..ba497cbfd9 100644 --- a/UefiCpuPkg/Library/MpInitLib/MpLib.c +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.c @@ -114,6 +114,10 @@ FutureBSPProc ( SaveVolatileRegisters (&DataInHob->APInfo.VolatileRegisters); AsmExchangeRole (&DataInHob->APInfo, &DataInHob->BSPInfo); RestoreVolatileRegisters (&DataInHob->APInfo.VolatileRegisters, FALSE); + // + // Restore VolatileReg saved in CpuMpData->CpuData + // + CopyMem (&DataInHob->CpuData[DataInHob->BspNumber].VolatileRegisters, &D= ataInHob->APInfo.VolatileRegisters, sizeof (CPU_VOLATILE_REGISTERS)); } /** @@ -761,11 +765,11 @@ ApWakeupFunction ( BistData =3D (UINT32)ApStackData->Bist; // - // CpuMpData->CpuData[0].VolatileRegisters is initialized based on B= SP environment, + // CpuMpData->CpuData[BspNumber].VolatileRegisters is initialized ba= sed on BSP environment, // to initialize AP in InitConfig path. - // NOTE: IDTR.BASE stored in CpuMpData->CpuData[0].VolatileRegisters= points to a different IDT shared by all APs. + // NOTE: IDTR.BASE stored in CpuMpData->CpuData[BspNumber].VolatileR= egisters points to a different IDT shared by all APs. // - RestoreVolatileRegisters (&CpuMpData->CpuData[0].VolatileRegisters, = FALSE); + RestoreVolatileRegisters (&CpuMpData->CpuData[CpuMpData->BspNumber].= VolatileRegisters, FALSE); InitializeApData (CpuMpData, ProcessorNumber, BistData, ApTopOfStack= ); ApStartupSignalBuffer =3D CpuMpData->CpuData[ProcessorNumber].Startu= pApSignal; } else { @@ -798,10 +802,10 @@ ApWakeupFunction ( // 1. AP is re-enabled after it's disabled, in either PEI or DXE p= hase. // 2. AP is initialized in DXE phase. // In either case, use the volatile registers value derived from B= SP. - // NOTE: IDTR.BASE stored in CpuMpData->CpuData[0].VolatileRegiste= rs points to a + // NOTE: IDTR.BASE stored in CpuMpData->CpuData[BspNumber].Volatil= eRegisters points to a // different IDT shared by all APs. // - RestoreVolatileRegisters (&CpuMpData->CpuData[0].VolatileRegisters= , FALSE); + RestoreVolatileRegisters (&CpuMpData->CpuData[CpuMpData->BspNumber= ].VolatileRegisters, FALSE); } else { if (CpuMpData->ApLoopMode =3D=3D ApInHltLoop) { // @@ -927,7 +931,7 @@ DxeApEntryPoint ( AsmWriteMsr64 (MSR_IA32_EFER, EferMsr.Uint64); } - RestoreVolatileRegisters (&CpuMpData->CpuData[0].VolatileRegisters, FALS= E); + RestoreVolatileRegisters (&CpuMpData->CpuData[CpuMpData->BspNumber].Vola= tileRegisters, FALSE); InterlockedIncrement ((UINT32 *)&CpuMpData->FinishedCount); PlaceAPInMwaitLoopOrRunLoop ( CpuMpData->ApLoopMode, @@ -2151,11 +2155,16 @@ MpInitLibInitialize ( CpuMpData->BackupBufferSize =3D ApResetVectorSizeBelow1Mb; CpuMpData->WakeupBuffer =3D (UINTN)-1; CpuMpData->CpuCount =3D 1; - CpuMpData->BspNumber =3D 0; - CpuMpData->WaitEvent =3D NULL; - CpuMpData->SwitchBspFlag =3D FALSE; - CpuMpData->CpuData =3D (CPU_AP_DATA *)(CpuMpData + 1); - CpuMpData->CpuInfoInHob =3D (UINT64)(UINTN)(CpuMpData->CpuData + Max= LogicalProcessorNumber); + if (FirstMpHandOff =3D=3D NULL) { + CpuMpData->BspNumber =3D 0; + } else { + CpuMpData->BspNumber =3D GetBspNumber (FirstMpHandOff); + } + + CpuMpData->WaitEvent =3D NULL; + CpuMpData->SwitchBspFlag =3D FALSE; + CpuMpData->CpuData =3D (CPU_AP_DATA *)(CpuMpData + 1); + CpuMpData->CpuInfoInHob =3D (UINT64)(UINTN)(CpuMpData->CpuData + MaxLog= icalProcessorNumber); InitializeSpinLock (&CpuMpData->MpLock); CpuMpData->SevEsIsEnabled =3D ConfidentialComputingGuestHas (CCAttrAmd= SevEs); CpuMpData->SevSnpIsEnabled =3D ConfidentialComputingGuestHas (CCAttrAmd= SevSnp); @@ -2186,11 +2195,11 @@ MpInitLibInitialize ( // Don't pass BSP's TR to APs to avoid AP init failure. // VolatileRegisters.Tr =3D 0; - CopyMem (&CpuMpData->CpuData[0].VolatileRegisters, &VolatileRegisters, s= izeof (VolatileRegisters)); + CopyMem (&CpuMpData->CpuData[CpuMpData->BspNumber].VolatileRegisters, &V= olatileRegisters, sizeof (VolatileRegisters)); // // Set BSP basic information // - InitializeApData (CpuMpData, 0, 0, CpuMpData->Buffer + ApStackSize); + InitializeApData (CpuMpData, CpuMpData->BspNumber, 0, CpuMpData->Buffer = + ApStackSize * (CpuMpData->BspNumber + 1)); // // Save assembly code information // @@ -2245,9 +2254,8 @@ MpInitLibInitialize ( AmdSevUpdateCpuMpData (CpuMpData); } - CpuMpData->CpuCount =3D MaxLogicalProcessorNumber; - CpuMpData->BspNumber =3D GetBspNumber (FirstMpHandOff); - CpuInfoInHob =3D (CPU_INFO_IN_HOB *)(UINTN)CpuMpData->CpuInfoI= nHob; + CpuMpData->CpuCount =3D MaxLogicalProcessorNumber; + CpuInfoInHob =3D (CPU_INFO_IN_HOB *)(UINTN)CpuMpData->CpuInfoIn= Hob; for (MpHandOff =3D FirstMpHandOff; MpHandOff !=3D NULL; MpHandOff =3D GetNextMpHandOffHob (MpHandOff)) @@ -2615,7 +2623,12 @@ SwitchBSPWorker ( SaveVolatileRegisters (&CpuMpData->BSPInfo.VolatileRegisters); AsmExchangeRole (&CpuMpData->BSPInfo, &CpuMpData->APInfo); RestoreVolatileRegisters (&CpuMpData->BSPInfo.VolatileRegisters, FALSE); - + // + // Restore VolatileRegs saved in CpuMpData->CpuData + // Don't pass BSP's TR to APs to avoid AP init failure. + // + CopyMem (&CpuMpData->CpuData[CpuMpData->NewBspNumber].VolatileRegisters,= &CpuMpData->BSPInfo.VolatileRegisters, sizeof (CPU_VOLATILE_REGISTERS)); + CpuMpData->CpuData[CpuMpData->NewBspNumber].VolatileRegisters.Tr =3D 0; // // Set the BSP bit of MSR_IA32_APIC_BASE on new BSP // -- 2.25.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 (#119264): https://edk2.groups.io/g/devel/message/119264 Mute This Topic: https://groups.io/mt/106291092/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- --_000_MN6PR11MB82441022813E0A1E4BCF9AA08CF62MN6PR11MB8244namp_ Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
But, I cannot set "push" label.


Thanks,
Ray

From: devel@edk2.groups.io = <devel@edk2.groups.io> on behalf of Ni, Ray <ray.ni@intel.com><= br> Sent: Saturday, May 25, 2024 9:32
To: Feng, Ning <ning.feng@intel.com>; devel@edk2.groups.io <= ;devel@edk2.groups.io>
Subject: Re: [edk2-devel] [PATCH] UefiCpuPkg/MpLib:Do not assume BSP= is #0.
 
Reviewed-by: Ray Ni <ray.ni@intel.com>

Thanks,
Ray

From: Feng, Ning <ning= .feng@intel.com>
Sent: Saturday, May 25, 2024 15:42
To: devel@edk2.groups.io <devel@edk2.groups.io>
Cc: Feng, Ning <ning.feng@intel.com>; Ni, Ray <ray.ni@intel= .com>
Subject: [PATCH] UefiCpuPkg/MpLib:Do not assume BSP is #0.
 
REF:https://bugzilla.tianocore.org/show_bug.cgi?= id=3D4778
MPInitlib have wrong expectation that BSP index should always be 0 in
MpInitLibInitialize(), SwitchBsp(),ApWakeupFunction().
That will cause the data mismatch, if the initial BSP is not 0.
Cc: Ray Ni <ray.ni@intel.com>
Signed-off-by: Ning Feng <ning.feng@intel.com>
---
 UefiCpuPkg/Library/MpInitLib/MpLib.c | 47 ++++++++++++++++++---------= -
 1 file changed, 30 insertions(+), 17 deletions(-)

diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.c b/UefiCpuPkg/Library/MpIn= itLib/MpLib.c
index d724456502..ba497cbfd9 100644
--- a/UefiCpuPkg/Library/MpInitLib/MpLib.c
+++ b/UefiCpuPkg/Library/MpInitLib/MpLib.c
@@ -114,6 +114,10 @@ FutureBSPProc (
   SaveVolatileRegisters (&DataInHob->APInfo.VolatileRegis= ters);

   AsmExchangeRole (&DataInHob->APInfo, &DataInHob->= ;BSPInfo);

   RestoreVolatileRegisters (&DataInHob->APInfo.VolatileRe= gisters, FALSE);

+  //

+  // Restore VolatileReg saved in CpuMpData->CpuData

+  //

+  CopyMem (&DataInHob->CpuData[DataInHob->BspNumber].Volati= leRegisters, &DataInHob->APInfo.VolatileRegisters, sizeof (CPU_VOLAT= ILE_REGISTERS));

 }

 

 /**

@@ -761,11 +765,11 @@ ApWakeupFunction (
       BistData     =3D (= UINT32)ApStackData->Bist;

 

       //

-      // CpuMpData->CpuData[0].VolatileRegiste= rs is initialized based on BSP environment,

+      // CpuMpData->CpuData[BspNumber].Volatil= eRegisters is initialized based on BSP environment,

       //   to initialize AP in Ini= tConfig path.

-      // NOTE: IDTR.BASE stored in CpuMpData->= CpuData[0].VolatileRegisters points to a different IDT shared by all APs.
+      // NOTE: IDTR.BASE stored in CpuMpData->= CpuData[BspNumber].VolatileRegisters points to a different IDT shared by al= l APs.

       //

-      RestoreVolatileRegisters (&CpuMpData-&g= t;CpuData[0].VolatileRegisters, FALSE);

+      RestoreVolatileRegisters (&CpuMpData-&g= t;CpuData[CpuMpData->BspNumber].VolatileRegisters, FALSE);

       InitializeApData (CpuMpData, Processor= Number, BistData, ApTopOfStack);

       ApStartupSignalBuffer =3D CpuMpData-&g= t;CpuData[ProcessorNumber].StartupApSignal;

     } else {

@@ -798,10 +802,10 @@ ApWakeupFunction (
         // 1. AP is re-enabled aft= er it's disabled, in either PEI or DXE phase.

         // 2. AP is initialized in= DXE phase.

         // In either case, use the= volatile registers value derived from BSP.

-        // NOTE: IDTR.BASE stored in Cp= uMpData->CpuData[0].VolatileRegisters points to a

+        // NOTE: IDTR.BASE stored in Cp= uMpData->CpuData[BspNumber].VolatileRegisters points to a

         //   different I= DT shared by all APs.

         //

-        RestoreVolatileRegisters (&= CpuMpData->CpuData[0].VolatileRegisters, FALSE);

+        RestoreVolatileRegisters (&= CpuMpData->CpuData[CpuMpData->BspNumber].VolatileRegisters, FALSE);
       } else {

         if (CpuMpData->ApLoopMo= de =3D=3D ApInHltLoop) {

           //

@@ -927,7 +931,7 @@ DxeApEntryPoint (
     AsmWriteMsr64 (MSR_IA32_EFER, EferMsr.Uint64);

   }

 

-  RestoreVolatileRegisters (&CpuMpData->CpuData[0].VolatileReg= isters, FALSE);

+  RestoreVolatileRegisters (&CpuMpData->CpuData[CpuMpData->= BspNumber].VolatileRegisters, FALSE);

   InterlockedIncrement ((UINT32 *)&CpuMpData->FinishedCou= nt);

   PlaceAPInMwaitLoopOrRunLoop (

     CpuMpData->ApLoopMode,

@@ -2151,11 +2155,16 @@ MpInitLibInitialize (
   CpuMpData->BackupBufferSize =3D ApResetVectorSizeBelow1Mb;<= br>
   CpuMpData->WakeupBuffer     =3D (UINTN)= -1;

   CpuMpData->CpuCount      &nbs= p;  =3D 1;

-  CpuMpData->BspNumber        = =3D 0;

-  CpuMpData->WaitEvent        = =3D NULL;

-  CpuMpData->SwitchBspFlag    =3D FALSE;

-  CpuMpData->CpuData       &nbs= p;  =3D (CPU_AP_DATA *)(CpuMpData + 1);

-  CpuMpData->CpuInfoInHob     =3D (UINT64)(UIN= TN)(CpuMpData->CpuData + MaxLogicalProcessorNumber);

+  if (FirstMpHandOff =3D=3D NULL) {

+    CpuMpData->BspNumber =3D 0;

+  } else {

+    CpuMpData->BspNumber =3D GetBspNumber (FirstMpHandOf= f);

+  }

+

+  CpuMpData->WaitEvent     =3D NULL;

+  CpuMpData->SwitchBspFlag =3D FALSE;

+  CpuMpData->CpuData       =3D (CPU_= AP_DATA *)(CpuMpData + 1);

+  CpuMpData->CpuInfoInHob  =3D (UINT64)(UINTN)(CpuMpData->= CpuData + MaxLogicalProcessorNumber);

   InitializeSpinLock (&CpuMpData->MpLock);

   CpuMpData->SevEsIsEnabled   =3D ConfidentialCompu= tingGuestHas (CCAttrAmdSevEs);

   CpuMpData->SevSnpIsEnabled  =3D ConfidentialComputingG= uestHas (CCAttrAmdSevSnp);

@@ -2186,11 +2195,11 @@ MpInitLibInitialize (
   // Don't pass BSP's TR to APs to avoid AP init failure.

   //

   VolatileRegisters.Tr =3D 0;

-  CopyMem (&CpuMpData->CpuData[0].VolatileRegisters, &Vola= tileRegisters, sizeof (VolatileRegisters));

+  CopyMem (&CpuMpData->CpuData[CpuMpData->BspNumber].Volati= leRegisters, &VolatileRegisters, sizeof (VolatileRegisters));

   //

   // Set BSP basic information

   //

-  InitializeApData (CpuMpData, 0, 0, CpuMpData->Buffer + ApStackSi= ze);

+  InitializeApData (CpuMpData, CpuMpData->BspNumber, 0, CpuMpData-= >Buffer + ApStackSize * (CpuMpData->BspNumber + 1));

   //

   // Save assembly code information

   //

@@ -2245,9 +2254,8 @@ MpInitLibInitialize (
       AmdSevUpdateCpuMpData (CpuMpData);

     }

 

-    CpuMpData->CpuCount  =3D MaxLogicalProcessorNum= ber;

-    CpuMpData->BspNumber =3D GetBspNumber (FirstMpHandOf= f);

-    CpuInfoInHob       &= nbsp; =3D (CPU_INFO_IN_HOB *)(UINTN)CpuMpData->CpuInfoInHob;

+    CpuMpData->CpuCount =3D MaxLogicalProcessorNumber;
+    CpuInfoInHob        = =3D (CPU_INFO_IN_HOB *)(UINTN)CpuMpData->CpuInfoInHob;

     for (MpHandOff =3D FirstMpHandOff;

          MpHandOff !=3D NULL;=

          MpHandOff =3D GetNex= tMpHandOffHob (MpHandOff))

@@ -2615,7 +2623,12 @@ SwitchBSPWorker (
   SaveVolatileRegisters (&CpuMpData->BSPInfo.VolatileRegi= sters);

   AsmExchangeRole (&CpuMpData->BSPInfo, &CpuMpData-&g= t;APInfo);

   RestoreVolatileRegisters (&CpuMpData->BSPInfo.VolatileR= egisters, FALSE);

-

+  //

+  // Restore VolatileRegs saved in CpuMpData->CpuData

+  // Don't pass BSP's TR to APs to avoid AP init failure.

+  //

+  CopyMem (&CpuMpData->CpuData[CpuMpData->NewBspNumber].Vol= atileRegisters, &CpuMpData->BSPInfo.VolatileRegisters, sizeof (CPU_V= OLATILE_REGISTERS));

+  CpuMpData->CpuData[CpuMpData->NewBspNumber].VolatileRegisters= .Tr =3D 0;

   //

   // Set the BSP bit of MSR_IA32_APIC_BASE on new BSP

   //

--
2.25.1

_._,_._,_

Groups.io Links:

=20 You receive all messages sent to this group. =20 =20

View/Reply Online (#119264) | =20 | Mute= This Topic | New Topic
Your Subscriptio= n | Contact Group Owner | Unsubscribe [rebecca@openfw.io]

_._,_._,_
--_000_MN6PR11MB82441022813E0A1E4BCF9AA08CF62MN6PR11MB8244namp_--