From: "Ni, Ray" <ray.ni@intel.com>
To: "devel@edk2.groups.io" <devel@edk2.groups.io>,
"Ni, Ray" <ray.ni@intel.com>
Cc: "Dong, Eric" <eric.dong@intel.com>
Subject: Re: [edk2-devel] [PATCH] UefiCpuPkg/MpService: GetProcessorInfo returns 6-level topology
Date: Wed, 19 Jun 2019 08:58:08 +0000 [thread overview]
Message-ID: <734D49CCEBEEF84792F5B80ED585239D5C1DACD2@SHSMSX104.ccr.corp.intel.com> (raw)
In-Reply-To: <15A98DC5A007A952.7301@groups.io>
This change will be pushed to edk2-staging repo after it gets Reviewed-by.
The reason is the change requires a protocol interface change in PI spec.
> -----Original Message-----
> From: devel@edk2.groups.io <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 <eric.dong@intel.com>
> Subject: [edk2-devel] [PATCH] UefiCpuPkg/MpService: GetProcessorInfo
> returns 6-level topology
>
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Ray Ni <ray.ni@intel.com>
> Cc: Eric Dong <eric.dong@intel.com>
> ---
> 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 initialization.
> Diagnostics applications may also use this protocol for multi-processor.
>
> -Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
> 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 CPU.
> +///
> +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 processor.
> + ///
> + 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 processor 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.
> /// </pre>
> ///
> - 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 = GetCpuMpData ();
> CpuInfoInHob = (CPU_INFO_IN_HOB *) (UINTN) CpuMpData-
> >CpuInfoInHob;
>
> + //
> + // Lower 24 bits contains the actual processor number.
> + //
> + OriginalProcessorNumber = ProcessorNumber; ProcessorNumber &=
> BIT24
> + - 1;
> +
> //
> // Check whether caller processor is BSP
> //
> @@ -1818,6 +1825,18 @@ MpInitLibGetProcessorInfo (
> &ProcessorInfoBuffer->Location.Thread
> );
>
> + if ((OriginalProcessorNumber & CPU_V2_EXTENDED_TOPOLOGY) != 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 != NULL) {
> HealthData->Uint32 = CpuInfoInHob[ProcessorNumber].Health;
> }
> --
> 2.21.0.windows.1
>
>
>
next parent reply other threads:[~2019-06-19 8:58 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <15A98DC5A007A952.7301@groups.io>
2019-06-19 8:58 ` Ni, Ray [this message]
2019-06-20 3:00 ` [edk2-devel] [PATCH] UefiCpuPkg/MpService: GetProcessorInfo returns 6-level topology Dong, Eric
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=734D49CCEBEEF84792F5B80ED585239D5C1DACD2@SHSMSX104.ccr.corp.intel.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox