From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 192.55.52.120, mailfrom: eric.dong@intel.com) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by groups.io with SMTP; Wed, 19 Jun 2019 20:00:26 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 19 Jun 2019 20:00:26 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.63,395,1557212400"; d="scan'208";a="165194489" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by orsmga006.jf.intel.com with ESMTP; 19 Jun 2019 20:00:25 -0700 Received: from shsmsx108.ccr.corp.intel.com (10.239.4.97) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.439.0; Wed, 19 Jun 2019 20:00:25 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.33]) by SHSMSX108.ccr.corp.intel.com ([169.254.8.236]) with mapi id 14.03.0439.000; Thu, 20 Jun 2019 11:00:23 +0800 From: "Dong, Eric" To: "Ni, Ray" , "devel@edk2.groups.io" Subject: Re: [edk2-devel] [PATCH] UefiCpuPkg/MpService: GetProcessorInfo returns 6-level topology Thread-Topic: [edk2-devel] [PATCH] UefiCpuPkg/MpService: GetProcessorInfo returns 6-level topology Thread-Index: AQHVJnz7ekidvH8BiE6y6T5gH6fbX6airO+QgAEuoiA= Date: Thu, 20 Jun 2019 03:00:23 +0000 Message-ID: References: <15A98DC5A007A952.7301@groups.io> <734D49CCEBEEF84792F5B80ED585239D5C1DACD2@SHSMSX104.ccr.corp.intel.com> In-Reply-To: <734D49CCEBEEF84792F5B80ED585239D5C1DACD2@SHSMSX104.ccr.corp.intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Return-Path: eric.dong@intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Eric Dong > -----Original Message----- > From: Ni, Ray > Sent: Wednesday, June 19, 2019 4:58 PM > To: devel@edk2.groups.io; Ni, Ray > Cc: Dong, Eric > Subject: RE: [edk2-devel] [PATCH] UefiCpuPkg/MpService: GetProcessorInfo > returns 6-level topology >=20 > This change will be pushed to edk2-staging repo after it gets Reviewed-b= y. > The reason is the change requires a protocol interface change in PI spec= . >=20 > > -----Original Message----- > > From: devel@edk2.groups.io On Behalf Of Ni, > Ray > > Sent: Wednesday, June 19, 2019 4:57 PM > > To: devel@edk2.groups.io > > Cc: Dong, Eric > > Subject: [edk2-devel] [PATCH] UefiCpuPkg/MpService: GetProcessorInfo > > returns 6-level topology > > > > Contributed-under: TianoCore Contribution Agreement 1.1 > > Signed-off-by: Ray Ni > > Cc: Eric Dong > > --- > > MdePkg/Include/Protocol/MpService.h | 50 > > +++++++++++++++++++++++++--- UefiCpuPkg/Library/MpInitLib/MpLib.c > | > > 19 +++++++++++ > > 2 files changed, 64 insertions(+), 5 deletions(-) > > > > diff --git a/MdePkg/Include/Protocol/MpService.h > > b/MdePkg/Include/Protocol/MpService.h > > index 10e2405daf..aeab8b0790 100644 > > --- a/MdePkg/Include/Protocol/MpService.h > > +++ b/MdePkg/Include/Protocol/MpService.h > > @@ -27,7 +27,7 @@ > > APs to help test system memory in parallel with other device initia= lization. > > Diagnostics applications may also use this protocol for multi-proce= ssor. > > > > -Copyright (c) 2006 - 2017, Intel Corporation. All rights > > reserved.
> > +Copyright (c) 2006 - 2019, Intel Corporation. All rights > > +reserved.
> > SPDX-License-Identifier: BSD-2-Clause-Patent > > > > @par Revision Reference: > > @@ -79,7 +79,7 @@ typedef struct _EFI_MP_SERVICES_PROTOCOL > > EFI_MP_SERVICES_PROTOCOL; #define PROCESSOR_HEALTH_STATUS_BIT > > 0x00000004 > > > > /// > > -/// Structure that describes the pyhiscal location of a logical CPU. > > +/// Structure that describes the physical location of a logical CPU. > > /// > > typedef struct { > > /// > > @@ -96,6 +96,45 @@ typedef struct { > > UINT32 Thread; > > } EFI_CPU_PHYSICAL_LOCATION; > > > > +#define CPU_V2_EXTENDED_TOPOLOGY BIT24 > > + > > +/// > > +/// Structure that describes the v2 physical location of a logical CP= U. > > +/// > > +typedef struct { > > + /// > > + /// Zero-based physical package number that identifies the > > +cartridge of the > > processor. > > + /// > > + UINT32 Package; > > + /// > > + /// Zero-based physical module number within package of the process= or. > > + /// > > + UINT32 Module; > > + /// > > + /// Zero-based physical tile number within module of the processor. > > + /// > > + UINT32 Tile; > > + /// > > + /// Zero-based physical die number within tile of the processor. > > + /// > > + UINT32 Die; > > + /// > > + /// Zero-based physical core number within die of the processor. > > + /// > > + UINT32 Core; > > + /// > > + /// Zero-based logical thread number within core of the processor. > > + /// > > + UINT32 Thread; > > +} EFI_CPU_PHYSICAL_LOCATION2; > > + > > +/// > > +/// Structure that describes extended processor information. > > +/// > > +typedef union { > > + EFI_CPU_PHYSICAL_LOCATION2 Location2; } > > +EXTENDED_PROCESSOR_INFORMATION; > > + > > /// > > /// Structure that describes information about a logical CPU. > > /// > > @@ -106,7 +145,7 @@ typedef struct { > > /// are used, and higher bits are reserved. For IPF, the lower 16 > > bits contains > > /// id/eid, and higher bits are reserved. > > /// > > - UINT64 ProcessorId; > > + UINT64 ProcessorId; > > /// > > /// Flags indicating if the processor is BSP or AP, if the processo= r is > enabled > > /// or disabled, and if the processor is healthy. Bits 3..31 are > > reserved and @@ -125,13 +164,14 @@ typedef struct { > > /// 1 1 1 Healthy Enabled BSP. > > /// > > /// > > - UINT32 StatusFlag; > > + UINT32 StatusFlag; > > /// > > /// The physical location of the processor, including the physical > > package number > > /// that identifies the cartridge, the physical core number within > > package, and > > /// logical thread number within core. > > /// > > - EFI_CPU_PHYSICAL_LOCATION Location; > > + EFI_CPU_PHYSICAL_LOCATION Location; > > + EXTENDED_PROCESSOR_INFORMATION ExtendedInformation; > > } EFI_PROCESSOR_INFORMATION; > > > > /** > > diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.c > > b/UefiCpuPkg/Library/MpInitLib/MpLib.c > > index 6f51bc4ebf..538d6536e2 100644 > > --- a/UefiCpuPkg/Library/MpInitLib/MpLib.c > > +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.c > > @@ -1774,10 +1774,17 @@ MpInitLibGetProcessorInfo ( > > CPU_MP_DATA *CpuMpData; > > UINTN CallerNumber; > > CPU_INFO_IN_HOB *CpuInfoInHob; > > + UINTN OriginalProcessorNumber; > > > > CpuMpData =3D GetCpuMpData (); > > CpuInfoInHob =3D (CPU_INFO_IN_HOB *) (UINTN) CpuMpData- > > >CpuInfoInHob; > > > > + // > > + // Lower 24 bits contains the actual processor number. > > + // > > + OriginalProcessorNumber =3D ProcessorNumber; ProcessorNumber &=3D > > BIT24 > > + - 1; > > + > > // > > // Check whether caller processor is BSP > > // > > @@ -1818,6 +1825,18 @@ MpInitLibGetProcessorInfo ( > > &ProcessorInfoBuffer->Location.Thread > > ); > > > > + if ((OriginalProcessorNumber & CPU_V2_EXTENDED_TOPOLOGY) !=3D 0) { > > + GetProcessorLocation2ByApicId ( > > + CpuInfoInHob[ProcessorNumber].ApicId, > > + &ProcessorInfoBuffer->ExtendedInformation.Location2.Package, > > + &ProcessorInfoBuffer->ExtendedInformation.Location2.Die, > > + &ProcessorInfoBuffer->ExtendedInformation.Location2.Tile, > > + &ProcessorInfoBuffer->ExtendedInformation.Location2.Module, > > + &ProcessorInfoBuffer->ExtendedInformation.Location2.Core, > > + &ProcessorInfoBuffer->ExtendedInformation.Location2.Thread > > + ); > > + } > > + > > if (HealthData !=3D NULL) { > > HealthData->Uint32 =3D CpuInfoInHob[ProcessorNumber].Health; > > } > > -- > > 2.21.0.windows.1 > > > > > >=20