* [PATCH V2] UefiCpuPkg/CpuFeature: reduce time complexty to calc CpuInfo.First @ 2020-12-11 10:47 Ni, Ray 2020-12-14 0:40 ` Dong, Eric 0 siblings, 1 reply; 3+ messages in thread From: Ni, Ray @ 2020-12-11 10:47 UTC (permalink / raw) To: devel; +Cc: Eric Dong, Star Zeng, Yun Lou, Laszlo Ersek CpuInfo.First stores whether the current thread belongs to the first package in the platform, first core in a package, first thread in a core. But the time complexity of original algorithm to calculate the CpuInfo.First is O (n) * O (p) * O (c). n: number of processors p: number of packages c: number of cores per package The patch trades time with space by storing the first package, first core per package, first thread per core in an array. The time complexity becomes O (n). Signed-off-by: Ray Ni <ray.ni@intel.com> Cc: Eric Dong <eric.dong@intel.com> Cc: Star Zeng <star.zeng@intel.com> Cc: Yun Lou <yun.lou@intel.com> Cc: Laszlo Ersek <lersek@redhat.com> --- .../CpuFeaturesInitialize.c | 96 +++++++++---------- 1 file changed, 47 insertions(+), 49 deletions(-) diff --git a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c index d4a576385f..a1e972b1a2 100644 --- a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c +++ b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c @@ -105,7 +105,10 @@ CpuInitDataInitialize ( EFI_CPU_PHYSICAL_LOCATION *Location; UINT32 PackageIndex; UINT32 CoreIndex; - UINT32 First; + UINTN Pages; + UINT32 FirstPackage; + UINT32 *FirstCore; + UINT32 *FirstThread; ACPI_CPU_DATA *AcpiCpuData; CPU_STATUS_INFORMATION *CpuStatus; UINT32 *ThreadCountPerPackage; @@ -236,74 +239,69 @@ CpuInitDataInitialize ( // // Initialize CpuFeaturesData->InitOrder[].CpuInfo.First + // Use AllocatePages () instead of AllocatePool () because pool cannot be freed in PEI phase but page can. // + Pages = EFI_SIZE_TO_PAGES (CpuStatus->PackageCount * sizeof (UINT32) + CpuStatus->PackageCount * CpuStatus->MaxCoreCount * sizeof (UINT32)); + FirstCore = AllocatePages (Pages); + ASSERT (FirstCore != NULL); + FirstThread = FirstCore + CpuStatus->PackageCount; // - // Set First.Package for each thread belonging to the first package. + // Set FirstPackage, FirstCore[], FirstThread[] to maximum package ID, core ID, thread ID. // - First = MAX_UINT32; + FirstPackage = MAX_UINT32; + SetMem32 (FirstCore, CpuStatus->PackageCount * sizeof (UINT32), MAX_UINT32); + SetMem32 (FirstThread, CpuStatus->PackageCount * CpuStatus->MaxCoreCount * sizeof (UINT32), MAX_UINT32); + for (ProcessorNumber = 0; ProcessorNumber < NumberOfCpus; ProcessorNumber++) { Location = &CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.ProcessorInfo.Location; - First = MIN (Location->Package, First); + + // + // Save the minimum package ID in the platform. + // + FirstPackage = MIN (Location->Package, FirstPackage); + + // + // Save the minimum core ID per package. + // + FirstCore[Location->Package] = MIN (Location->Core, FirstCore[Location->Package]); + + // + // Save the minimum thread ID per core. + // + FirstThread[Location->Package * CpuStatus->MaxCoreCount + Location->Core] = MIN ( + Location->Thread, + FirstThread[Location->Package * CpuStatus->MaxCoreCount + Location->Core] + ); } + + // + // Update the First field. + // for (ProcessorNumber = 0; ProcessorNumber < NumberOfCpus; ProcessorNumber++) { Location = &CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.ProcessorInfo.Location; - if (Location->Package == First) { + + if (Location->Package == FirstPackage) { CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.First.Package = 1; } - } - // - // Set First.Die/Tile/Module for each thread assuming: - // single Die under each package, single Tile under each Die, single Module under each Tile - // - for (ProcessorNumber = 0; ProcessorNumber < NumberOfCpus; ProcessorNumber++) { + // + // Set First.Die/Tile/Module for each thread assuming: + // single Die under each package, single Tile under each Die, single Module under each Tile + // CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.First.Die = 1; CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.First.Tile = 1; CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.First.Module = 1; - } - for (PackageIndex = 0; PackageIndex < CpuStatus->PackageCount; PackageIndex++) { - // - // Set First.Core for each thread in the first core of each package. - // - First = MAX_UINT32; - for (ProcessorNumber = 0; ProcessorNumber < NumberOfCpus; ProcessorNumber++) { - Location = &CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.ProcessorInfo.Location; - if (Location->Package == PackageIndex) { - First = MIN (Location->Core, First); - } + if (Location->Core == FirstCore[Location->Package]) { + CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.First.Core = 1; } - - for (ProcessorNumber = 0; ProcessorNumber < NumberOfCpus; ProcessorNumber++) { - Location = &CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.ProcessorInfo.Location; - if (Location->Package == PackageIndex && Location->Core == First) { - CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.First.Core = 1; - } + if (Location->Thread == FirstThread[Location->Package * CpuStatus->MaxCoreCount + Location->Core]) { + CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.First.Thread = 1; } } - for (PackageIndex = 0; PackageIndex < CpuStatus->PackageCount; PackageIndex++) { - for (CoreIndex = 0; CoreIndex < CpuStatus->MaxCoreCount; CoreIndex++) { - // - // Set First.Thread for the first thread of each core. - // - First = MAX_UINT32; - for (ProcessorNumber = 0; ProcessorNumber < NumberOfCpus; ProcessorNumber++) { - Location = &CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.ProcessorInfo.Location; - if (Location->Package == PackageIndex && Location->Core == CoreIndex) { - First = MIN (Location->Thread, First); - } - } - - for (ProcessorNumber = 0; ProcessorNumber < NumberOfCpus; ProcessorNumber++) { - Location = &CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.ProcessorInfo.Location; - if (Location->Package == PackageIndex && Location->Core == CoreIndex && Location->Thread == First) { - CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.First.Thread = 1; - } - } - } - } + FreePages (FirstCore, Pages); } /** -- 2.27.0.windows.1 ^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH V2] UefiCpuPkg/CpuFeature: reduce time complexty to calc CpuInfo.First 2020-12-11 10:47 [PATCH V2] UefiCpuPkg/CpuFeature: reduce time complexty to calc CpuInfo.First Ni, Ray @ 2020-12-14 0:40 ` Dong, Eric 2020-12-14 3:18 ` Zeng, Star 0 siblings, 1 reply; 3+ messages in thread From: Dong, Eric @ 2020-12-14 0:40 UTC (permalink / raw) To: Ni, Ray, devel@edk2.groups.io; +Cc: Zeng, Star, Lou, Yun, Laszlo Ersek Reviewed-by: Eric Dong <eric.dong@intel.com> -----Original Message----- From: Ni, Ray <ray.ni@intel.com> Sent: Friday, December 11, 2020 6:48 PM To: devel@edk2.groups.io Cc: Dong, Eric <eric.dong@intel.com>; Zeng, Star <star.zeng@intel.com>; Lou, Yun <yun.lou@intel.com>; Laszlo Ersek <lersek@redhat.com> Subject: [PATCH V2] UefiCpuPkg/CpuFeature: reduce time complexty to calc CpuInfo.First CpuInfo.First stores whether the current thread belongs to the first package in the platform, first core in a package, first thread in a core. But the time complexity of original algorithm to calculate the CpuInfo.First is O (n) * O (p) * O (c). n: number of processors p: number of packages c: number of cores per package The patch trades time with space by storing the first package, first core per package, first thread per core in an array. The time complexity becomes O (n). Signed-off-by: Ray Ni <ray.ni@intel.com> Cc: Eric Dong <eric.dong@intel.com> Cc: Star Zeng <star.zeng@intel.com> Cc: Yun Lou <yun.lou@intel.com> Cc: Laszlo Ersek <lersek@redhat.com> --- .../CpuFeaturesInitialize.c | 96 +++++++++---------- 1 file changed, 47 insertions(+), 49 deletions(-) diff --git a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c index d4a576385f..a1e972b1a2 100644 --- a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c +++ b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c @@ -105,7 +105,10 @@ CpuInitDataInitialize ( EFI_CPU_PHYSICAL_LOCATION *Location; UINT32 PackageIndex; UINT32 CoreIndex;- UINT32 First;+ UINTN Pages;+ UINT32 FirstPackage;+ UINT32 *FirstCore;+ UINT32 *FirstThread; ACPI_CPU_DATA *AcpiCpuData; CPU_STATUS_INFORMATION *CpuStatus; UINT32 *ThreadCountPerPackage;@@ -236,74 +239,69 @@ CpuInitDataInitialize ( // // Initialize CpuFeaturesData->InitOrder[].CpuInfo.First+ // Use AllocatePages () instead of AllocatePool () because pool cannot be freed in PEI phase but page can. //+ Pages = EFI_SIZE_TO_PAGES (CpuStatus->PackageCount * sizeof (UINT32) + CpuStatus->PackageCount * CpuStatus->MaxCoreCount * sizeof (UINT32));+ FirstCore = AllocatePages (Pages);+ ASSERT (FirstCore != NULL);+ FirstThread = FirstCore + CpuStatus->PackageCount; //- // Set First.Package for each thread belonging to the first package.+ // Set FirstPackage, FirstCore[], FirstThread[] to maximum package ID, core ID, thread ID. //- First = MAX_UINT32;+ FirstPackage = MAX_UINT32;+ SetMem32 (FirstCore, CpuStatus->PackageCount * sizeof (UINT32), MAX_UINT32);+ SetMem32 (FirstThread, CpuStatus->PackageCount * CpuStatus->MaxCoreCount * sizeof (UINT32), MAX_UINT32);+ for (ProcessorNumber = 0; ProcessorNumber < NumberOfCpus; ProcessorNumber++) { Location = &CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.ProcessorInfo.Location;- First = MIN (Location->Package, First);++ //+ // Save the minimum package ID in the platform.+ //+ FirstPackage = MIN (Location->Package, FirstPackage);+ + //+ // Save the minimum core ID per package.+ //+ FirstCore[Location->Package] = MIN (Location->Core, FirstCore[Location->Package]);+ + //+ // Save the minimum thread ID per core.+ //+ FirstThread[Location->Package * CpuStatus->MaxCoreCount + Location->Core] = MIN (+ Location->Thread,+ FirstThread[Location->Package * CpuStatus->MaxCoreCount + Location->Core]+ ); }++ //+ // Update the First field.+ // for (ProcessorNumber = 0; ProcessorNumber < NumberOfCpus; ProcessorNumber++) { Location = &CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.ProcessorInfo.Location;- if (Location->Package == First) {++ if (Location->Package == FirstPackage) { CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.First.Package = 1; }- } - //- // Set First.Die/Tile/Module for each thread assuming:- // single Die under each package, single Tile under each Die, single Module under each Tile- //- for (ProcessorNumber = 0; ProcessorNumber < NumberOfCpus; ProcessorNumber++) {+ //+ // Set First.Die/Tile/Module for each thread assuming:+ // single Die under each package, single Tile under each Die, single Module under each Tile+ // CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.First.Die = 1; CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.First.Tile = 1; CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.First.Module = 1;- } - for (PackageIndex = 0; PackageIndex < CpuStatus->PackageCount; PackageIndex++) {- //- // Set First.Core for each thread in the first core of each package.- //- First = MAX_UINT32;- for (ProcessorNumber = 0; ProcessorNumber < NumberOfCpus; ProcessorNumber++) {- Location = &CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.ProcessorInfo.Location;- if (Location->Package == PackageIndex) {- First = MIN (Location->Core, First);- }+ if (Location->Core == FirstCore[Location->Package]) {+ CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.First.Core = 1; }-- for (ProcessorNumber = 0; ProcessorNumber < NumberOfCpus; ProcessorNumber++) {- Location = &CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.ProcessorInfo.Location;- if (Location->Package == PackageIndex && Location->Core == First) {- CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.First.Core = 1;- }+ if (Location->Thread == FirstThread[Location->Package * CpuStatus->MaxCoreCount + Location->Core]) {+ CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.First.Thread = 1; } } - for (PackageIndex = 0; PackageIndex < CpuStatus->PackageCount; PackageIndex++) {- for (CoreIndex = 0; CoreIndex < CpuStatus->MaxCoreCount; CoreIndex++) {- //- // Set First.Thread for the first thread of each core.- //- First = MAX_UINT32;- for (ProcessorNumber = 0; ProcessorNumber < NumberOfCpus; ProcessorNumber++) {- Location = &CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.ProcessorInfo.Location;- if (Location->Package == PackageIndex && Location->Core == CoreIndex) {- First = MIN (Location->Thread, First);- }- }-- for (ProcessorNumber = 0; ProcessorNumber < NumberOfCpus; ProcessorNumber++) {- Location = &CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.ProcessorInfo.Location;- if (Location->Package == PackageIndex && Location->Core == CoreIndex && Location->Thread == First) {- CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.First.Thread = 1;- }- }- }- }+ FreePages (FirstCore, Pages); } /**-- 2.27.0.windows.1 ^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH V2] UefiCpuPkg/CpuFeature: reduce time complexty to calc CpuInfo.First 2020-12-14 0:40 ` Dong, Eric @ 2020-12-14 3:18 ` Zeng, Star 0 siblings, 0 replies; 3+ messages in thread From: Zeng, Star @ 2020-12-14 3:18 UTC (permalink / raw) To: Dong, Eric, Ni, Ray, devel@edk2.groups.io Cc: Lou, Yun, Laszlo Ersek, Zeng, Star Reviewed-by: Star Zeng <star.zeng@intel.com> -----Original Message----- From: Dong, Eric <eric.dong@intel.com> Sent: Monday, December 14, 2020 8:41 AM To: Ni, Ray <ray.ni@intel.com>; devel@edk2.groups.io Cc: Zeng, Star <star.zeng@intel.com>; Lou, Yun <yun.lou@intel.com>; Laszlo Ersek <lersek@redhat.com> Subject: RE: [PATCH V2] UefiCpuPkg/CpuFeature: reduce time complexty to calc CpuInfo.First Reviewed-by: Eric Dong <eric.dong@intel.com> -----Original Message----- From: Ni, Ray <ray.ni@intel.com> Sent: Friday, December 11, 2020 6:48 PM To: devel@edk2.groups.io Cc: Dong, Eric <eric.dong@intel.com>; Zeng, Star <star.zeng@intel.com>; Lou, Yun <yun.lou@intel.com>; Laszlo Ersek <lersek@redhat.com> Subject: [PATCH V2] UefiCpuPkg/CpuFeature: reduce time complexty to calc CpuInfo.First CpuInfo.First stores whether the current thread belongs to the first package in the platform, first core in a package, first thread in a core. But the time complexity of original algorithm to calculate the CpuInfo.First is O (n) * O (p) * O (c). n: number of processors p: number of packages c: number of cores per package The patch trades time with space by storing the first package, first core per package, first thread per core in an array. The time complexity becomes O (n). Signed-off-by: Ray Ni <ray.ni@intel.com> Cc: Eric Dong <eric.dong@intel.com> Cc: Star Zeng <star.zeng@intel.com> Cc: Yun Lou <yun.lou@intel.com> Cc: Laszlo Ersek <lersek@redhat.com> --- .../CpuFeaturesInitialize.c | 96 +++++++++---------- 1 file changed, 47 insertions(+), 49 deletions(-) diff --git a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c index d4a576385f..a1e972b1a2 100644 --- a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c +++ b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c @@ -105,7 +105,10 @@ CpuInitDataInitialize ( EFI_CPU_PHYSICAL_LOCATION *Location; UINT32 PackageIndex; UINT32 CoreIndex;- UINT32 First;+ UINTN Pages;+ UINT32 FirstPackage;+ UINT32 *FirstCore;+ UINT32 *FirstThread; ACPI_CPU_DATA *AcpiCpuData; CPU_STATUS_INFORMATION *CpuStatus; UINT32 *ThreadCountPerPackage;@@ -236,74 +239,69 @@ CpuInitDataInitialize ( // // Initialize CpuFeaturesData->InitOrder[].CpuInfo.First+ // Use AllocatePages () instead of AllocatePool () because pool cannot be freed in PEI phase but page can. //+ Pages = EFI_SIZE_TO_PAGES (CpuStatus->PackageCount * sizeof (UINT32) + CpuStatus->PackageCount * CpuStatus->MaxCoreCount * sizeof (UINT32));+ FirstCore = AllocatePages (Pages);+ ASSERT (FirstCore != NULL);+ FirstThread = FirstCore + CpuStatus->PackageCount; //- // Set First.Package for each thread belonging to the first package.+ // Set FirstPackage, FirstCore[], FirstThread[] to maximum package ID, core ID, thread ID. //- First = MAX_UINT32;+ FirstPackage = MAX_UINT32;+ SetMem32 (FirstCore, CpuStatus->PackageCount * sizeof (UINT32), MAX_UINT32);+ SetMem32 (FirstThread, CpuStatus->PackageCount * CpuStatus->MaxCoreCount * sizeof (UINT32), MAX_UINT32);+ for (ProcessorNumber = 0; ProcessorNumber < NumberOfCpus; ProcessorNumber++) { Location = &CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.ProcessorInfo.Location;- First = MIN (Location->Package, First);++ //+ // Save the minimum package ID in the platform.+ //+ FirstPackage = MIN (Location->Package, FirstPackage);+ + //+ // Save the minimum core ID per package.+ //+ FirstCore[Location->Package] = MIN (Location->Core, FirstCore[Location->Package]);+ + //+ // Save the minimum thread ID per core.+ //+ FirstThread[Location->Package * CpuStatus->MaxCoreCount + Location->Core] = MIN (+ Location->Thread,+ FirstThread[Location->Package * CpuStatus->MaxCoreCount + Location->Core]+ ); }++ //+ // Update the First field.+ // for (ProcessorNumber = 0; ProcessorNumber < NumberOfCpus; ProcessorNumber++) { Location = &CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.ProcessorInfo.Location;- if (Location->Package == First) {++ if (Location->Package == FirstPackage) { CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.First.Package = 1; }- } - //- // Set First.Die/Tile/Module for each thread assuming:- // single Die under each package, single Tile under each Die, single Module under each Tile- //- for (ProcessorNumber = 0; ProcessorNumber < NumberOfCpus; ProcessorNumber++) {+ //+ // Set First.Die/Tile/Module for each thread assuming:+ // single Die under each package, single Tile under each Die, single Module under each Tile+ // CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.First.Die = 1; CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.First.Tile = 1; CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.First.Module = 1;- } - for (PackageIndex = 0; PackageIndex < CpuStatus->PackageCount; PackageIndex++) {- //- // Set First.Core for each thread in the first core of each package.- //- First = MAX_UINT32;- for (ProcessorNumber = 0; ProcessorNumber < NumberOfCpus; ProcessorNumber++) {- Location = &CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.ProcessorInfo.Location;- if (Location->Package == PackageIndex) {- First = MIN (Location->Core, First);- }+ if (Location->Core == FirstCore[Location->Package]) {+ CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.First.Core = 1; }-- for (ProcessorNumber = 0; ProcessorNumber < NumberOfCpus; ProcessorNumber++) {- Location = &CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.ProcessorInfo.Location;- if (Location->Package == PackageIndex && Location->Core == First) {- CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.First.Core = 1;- }+ if (Location->Thread == FirstThread[Location->Package * CpuStatus->MaxCoreCount + Location->Core]) {+ CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.First.Thread = 1; } } - for (PackageIndex = 0; PackageIndex < CpuStatus->PackageCount; PackageIndex++) {- for (CoreIndex = 0; CoreIndex < CpuStatus->MaxCoreCount; CoreIndex++) {- //- // Set First.Thread for the first thread of each core.- //- First = MAX_UINT32;- for (ProcessorNumber = 0; ProcessorNumber < NumberOfCpus; ProcessorNumber++) {- Location = &CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.ProcessorInfo.Location;- if (Location->Package == PackageIndex && Location->Core == CoreIndex) {- First = MIN (Location->Thread, First);- }- }-- for (ProcessorNumber = 0; ProcessorNumber < NumberOfCpus; ProcessorNumber++) {- Location = &CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.ProcessorInfo.Location;- if (Location->Package == PackageIndex && Location->Core == CoreIndex && Location->Thread == First) {- CpuFeaturesData->InitOrder[ProcessorNumber].CpuInfo.First.Thread = 1;- }- }- }- }+ FreePages (FirstCore, Pages); } /**-- 2.27.0.windows.1 ^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2020-12-14 3:18 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2020-12-11 10:47 [PATCH V2] UefiCpuPkg/CpuFeature: reduce time complexty to calc CpuInfo.First Ni, Ray 2020-12-14 0:40 ` Dong, Eric 2020-12-14 3:18 ` Zeng, Star
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox