From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) (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 46C7D81E09 for ; Sun, 13 Nov 2016 19:47:13 -0800 (PST) Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga105.fm.intel.com with ESMTP; 13 Nov 2016 19:47:17 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,488,1473145200"; d="scan'208";a="30688986" Received: from jfan12-desk.ccr.corp.intel.com ([10.239.9.5]) by orsmga004.jf.intel.com with ESMTP; 13 Nov 2016 19:47:16 -0800 From: Jeff Fan To: edk2-devel@lists.01.org Cc: Feng Tian , Michael D Kinney Date: Mon, 14 Nov 2016 11:46:58 +0800 Message-Id: <20161114034701.5996-4-jeff.fan@intel.com> X-Mailer: git-send-email 2.9.3.windows.2 In-Reply-To: <20161114034701.5996-1-jeff.fan@intel.com> References: <20161114034701.5996-1-jeff.fan@intel.com> Subject: [PATCH 3/6] UefiCpuPkg/MpInitLib: Remove CPU information from CPU_AP_DATA X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 14 Nov 2016 03:47:13 -0000 Some CPU information (InitialApicId/ApicId/Health) are duplicated in CPU_AP_DATA and CPU_INFO_IN_HOB. This update is to remove the ones from CPU_AP_DATA and update MpInitLib to consume the ones from CPU_INFO_IN_HOB. Cc: Feng Tian Cc: Michael D Kinney Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jeff Fan --- UefiCpuPkg/Library/MpInitLib/MpLib.c | 73 +++++++++++++++++++----------------- UefiCpuPkg/Library/MpInitLib/MpLib.h | 3 -- 2 files changed, 39 insertions(+), 37 deletions(-) diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.c b/UefiCpuPkg/Library/MpInitLib/MpLib.c index 9641e5e..dc4216c 100644 --- a/UefiCpuPkg/Library/MpInitLib/MpLib.c +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.c @@ -253,7 +253,7 @@ SortApicId ( UINTN Index2; UINTN Index3; UINT32 ApicId; - CPU_AP_DATA CpuData; + CPU_INFO_IN_HOB CpuInfo; UINT32 ApCount; CPU_INFO_IN_HOB *CpuInfoInHob; @@ -265,21 +265,22 @@ SortApicId ( // // Sort key is the hardware default APIC ID // - ApicId = CpuMpData->CpuData[Index1].ApicId; + CpuInfoInHob = (CPU_INFO_IN_HOB *) (UINTN) CpuMpData->CpuInfoInHob; + ApicId = CpuInfoInHob[Index1].ApicId; for (Index2 = Index1 + 1; Index2 <= ApCount; Index2++) { - if (ApicId > CpuMpData->CpuData[Index2].ApicId) { + if (ApicId > CpuInfoInHob[Index2].ApicId) { Index3 = Index2; - ApicId = CpuMpData->CpuData[Index2].ApicId; + ApicId = CpuInfoInHob[Index2].ApicId; } } if (Index3 != Index1) { - CopyMem (&CpuData, &CpuMpData->CpuData[Index3], sizeof (CPU_AP_DATA)); + CopyMem (&CpuInfo, &CpuInfoInHob[Index3], sizeof (CPU_INFO_IN_HOB)); CopyMem ( - &CpuMpData->CpuData[Index3], - &CpuMpData->CpuData[Index1], - sizeof (CPU_AP_DATA) + &CpuInfoInHob[Index3], + &CpuInfoInHob[Index1], + sizeof (CPU_INFO_IN_HOB) ); - CopyMem (&CpuMpData->CpuData[Index1], &CpuData, sizeof (CPU_AP_DATA)); + CopyMem (&CpuInfoInHob[Index1], &CpuInfo, sizeof (CPU_INFO_IN_HOB)); } } @@ -288,18 +289,11 @@ SortApicId ( // ApicId = GetInitialApicId (); for (Index1 = 0; Index1 < CpuMpData->CpuCount; Index1++) { - if (CpuMpData->CpuData[Index1].ApicId == ApicId) { + if (CpuInfoInHob[Index1].ApicId == ApicId) { CpuMpData->BspNumber = (UINT32) Index1; break; } } - - CpuInfoInHob = (CPU_INFO_IN_HOB *) (UINTN) CpuMpData->CpuInfoInHob; - for (Index1 = 0; Index1 < CpuMpData->CpuCount; Index1++) { - CpuInfoInHob[Index1].InitialApicId = CpuMpData->CpuData[Index1].InitialApicId; - CpuInfoInHob[Index1].ApicId = CpuMpData->CpuData[Index1].ApicId; - CpuInfoInHob[Index1].Health = CpuMpData->CpuData[Index1].Health; - } } } @@ -358,10 +352,13 @@ GetProcessorNumber ( { UINTN TotalProcessorNumber; UINTN Index; + CPU_INFO_IN_HOB *CpuInfoInHob; + + CpuInfoInHob = (CPU_INFO_IN_HOB *) (UINTN) CpuMpData->CpuInfoInHob; TotalProcessorNumber = CpuMpData->CpuCount; for (Index = 0; Index < TotalProcessorNumber; Index ++) { - if (CpuMpData->CpuData[Index].ApicId == GetApicId ()) { + if (CpuInfoInHob[Index].ApicId == GetApicId ()) { *ProcessorNumber = Index; return EFI_SUCCESS; } @@ -439,12 +436,16 @@ InitializeApData ( IN UINT32 BistData ) { + CPU_INFO_IN_HOB *CpuInfoInHob; + + CpuInfoInHob = (CPU_INFO_IN_HOB *) (UINTN) CpuMpData->CpuInfoInHob; + CpuInfoInHob[ProcessorNumber].InitialApicId = GetInitialApicId (); + CpuInfoInHob[ProcessorNumber].ApicId = GetApicId (); + CpuInfoInHob[ProcessorNumber].Health = BistData; + CpuMpData->CpuData[ProcessorNumber].Waiting = FALSE; - CpuMpData->CpuData[ProcessorNumber].Health = BistData; CpuMpData->CpuData[ProcessorNumber].CpuHealthy = (BistData == 0) ? TRUE : FALSE; - CpuMpData->CpuData[ProcessorNumber].ApicId = GetApicId (); - CpuMpData->CpuData[ProcessorNumber].InitialApicId = GetInitialApicId (); - if (CpuMpData->CpuData[ProcessorNumber].InitialApicId >= 0xFF) { + if (CpuInfoInHob[ProcessorNumber].InitialApicId >= 0xFF) { // // Set x2APIC mode if there are any logical processor reporting // an Initial APIC ID of 255 or greater. @@ -477,6 +478,7 @@ ApWakeupFunction ( VOID *Parameter; UINT32 BistData; volatile UINT32 *ApStartupSignalBuffer; + CPU_INFO_IN_HOB *CpuInfoInHob; // // AP finished assembly code and begin to execute C code @@ -547,8 +549,9 @@ ApWakeupFunction ( // // Re-get the CPU APICID and Initial APICID // - CpuMpData->CpuData[ProcessorNumber].ApicId = GetApicId (); - CpuMpData->CpuData[ProcessorNumber].InitialApicId = GetInitialApicId (); + CpuInfoInHob = (CPU_INFO_IN_HOB *) (UINTN) CpuMpData->CpuInfoInHob; + CpuInfoInHob[ProcessorNumber].ApicId = GetApicId (); + CpuInfoInHob[ProcessorNumber].InitialApicId = GetInitialApicId (); } } SetApState (&CpuMpData->CpuData[ProcessorNumber], CpuStateFinished); @@ -696,6 +699,7 @@ WakeUpAP ( UINTN Index; CPU_AP_DATA *CpuData; BOOLEAN ResetVectorRequired; + CPU_INFO_IN_HOB *CpuInfoInHob; CpuMpData->FinishedCount = 0; ResetVectorRequired = FALSE; @@ -760,8 +764,9 @@ WakeUpAP ( ASSERT (CpuMpData->InitFlag != ApInitConfig); *(UINT32 *) CpuData->StartupApSignal = WAKEUP_AP_SIGNAL; if (ResetVectorRequired) { + CpuInfoInHob = (CPU_INFO_IN_HOB *) (UINTN) CpuMpData->CpuInfoInHob; SendInitSipiSipi ( - CpuData->ApicId, + CpuInfoInHob[ProcessorNumber].ApicId, (UINT32) ExchangeInfo->BufferStart ); } @@ -1229,16 +1234,14 @@ MpInitLibInitialize ( CpuMpData->CpuCount = OldCpuMpData->CpuCount; CpuMpData->BspNumber = OldCpuMpData->BspNumber; CpuMpData->InitFlag = ApInitReconfig; - CpuInfoInHob = (CPU_INFO_IN_HOB *) (UINTN) OldCpuMpData->CpuInfoInHob; + CpuMpData->CpuInfoInHob = OldCpuMpData->CpuInfoInHob; + CpuInfoInHob = (CPU_INFO_IN_HOB *) (UINTN) CpuMpData->CpuInfoInHob; for (Index = 0; Index < CpuMpData->CpuCount; Index++) { InitializeSpinLock(&CpuMpData->CpuData[Index].ApLock); - CpuMpData->CpuData[Index].ApicId = CpuInfoInHob[Index].ApicId; - CpuMpData->CpuData[Index].InitialApicId = CpuInfoInHob[Index].InitialApicId; - if (CpuMpData->CpuData[Index].InitialApicId >= 255) { + if (CpuInfoInHob[Index].InitialApicId >= 255) { CpuMpData->X2ApicEnable = TRUE; } - CpuMpData->CpuData[Index].Health = CpuInfoInHob[Index].Health; - CpuMpData->CpuData[Index].CpuHealthy = (CpuMpData->CpuData[Index].Health == 0)? TRUE:FALSE; + CpuMpData->CpuData[Index].CpuHealthy = (CpuInfoInHob[Index].Health == 0)? TRUE:FALSE; CpuMpData->CpuData[Index].ApFunction = 0; CopyMem ( &CpuMpData->CpuData[Index].VolatileRegisters, @@ -1299,8 +1302,10 @@ MpInitLibGetProcessorInfo ( { CPU_MP_DATA *CpuMpData; UINTN CallerNumber; + CPU_INFO_IN_HOB *CpuInfoInHob; CpuMpData = GetCpuMpData (); + CpuInfoInHob = (CPU_INFO_IN_HOB *) (UINTN) CpuMpData->CpuInfoInHob; // // Check whether caller processor is BSP @@ -1318,7 +1323,7 @@ MpInitLibGetProcessorInfo ( return EFI_NOT_FOUND; } - ProcessorInfoBuffer->ProcessorId = (UINT64) CpuMpData->CpuData[ProcessorNumber].ApicId; + ProcessorInfoBuffer->ProcessorId = (UINT64) CpuInfoInHob[ProcessorNumber].ApicId; ProcessorInfoBuffer->StatusFlag = 0; if (ProcessorNumber == CpuMpData->BspNumber) { ProcessorInfoBuffer->StatusFlag |= PROCESSOR_AS_BSP_BIT; @@ -1336,14 +1341,14 @@ MpInitLibGetProcessorInfo ( // Get processor location information // GetProcessorLocationByApicId ( - CpuMpData->CpuData[ProcessorNumber].ApicId, + CpuInfoInHob[ProcessorNumber].ApicId, &ProcessorInfoBuffer->Location.Package, &ProcessorInfoBuffer->Location.Core, &ProcessorInfoBuffer->Location.Thread ); if (HealthData != NULL) { - HealthData->Uint32 = CpuMpData->CpuData[ProcessorNumber].Health; + HealthData->Uint32 = CpuInfoInHob[ProcessorNumber].Health; } return EFI_SUCCESS; diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.h b/UefiCpuPkg/Library/MpInitLib/MpLib.h index ae78c59..f107b6d 100644 --- a/UefiCpuPkg/Library/MpInitLib/MpLib.h +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.h @@ -112,9 +112,6 @@ typedef struct { volatile UINT32 *StartupApSignal; volatile UINTN ApFunction; volatile UINTN ApFunctionArgument; - UINT32 InitialApicId; - UINT32 ApicId; - UINT32 Health; BOOLEAN CpuHealthy; volatile CPU_STATE State; CPU_VOLATILE_REGISTERS VolatileRegisters; -- 2.9.3.windows.2