UefiCpuPkg/Library/MpInitLib/MpLib.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
Current function has low performance because it calls GetApicId
many times.
New logic call GetApicId once and base on this value to search
the processor.
V2 changes:
Rollback V1 change which base on stack info to get AP index because
this solution may return error AP index if stack buffer overflow.
Cc: Ruiyu Ni <ruiyu.ni@intel.com>
Cc: Jeff Fan <vanjeff_919@hotmail.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Eric Dong <eric.dong@intel.com>
---
UefiCpuPkg/Library/MpInitLib/MpLib.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.c b/UefiCpuPkg/Library/MpInitLib/MpLib.c
index 722db2a01f..0bb0582985 100644
--- a/UefiCpuPkg/Library/MpInitLib/MpLib.c
+++ b/UefiCpuPkg/Library/MpInitLib/MpLib.c
@@ -435,16 +435,19 @@ GetProcessorNumber (
UINTN TotalProcessorNumber;
UINTN Index;
CPU_INFO_IN_HOB *CpuInfoInHob;
+ UINT32 CurrentApicId;
CpuInfoInHob = (CPU_INFO_IN_HOB *) (UINTN) CpuMpData->CpuInfoInHob;
TotalProcessorNumber = CpuMpData->CpuCount;
+ CurrentApicId = GetApicId ();
for (Index = 0; Index < TotalProcessorNumber; Index ++) {
- if (CpuInfoInHob[Index].ApicId == GetApicId ()) {
+ if (CpuInfoInHob[Index].ApicId == CurrentApicId) {
*ProcessorNumber = Index;
return EFI_SUCCESS;
}
}
+
return EFI_NOT_FOUND;
}
--
2.15.0.windows.1
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Reviewed-by: Ruiyu Ni <Ruiyu.ni@intel.com> Thanks/Ray > -----Original Message----- > From: Dong, Eric > Sent: Wednesday, July 18, 2018 1:19 PM > To: edk2-devel@lists.01.org > Cc: Ni, Ruiyu <ruiyu.ni@intel.com>; Jeff Fan <vanjeff_919@hotmail.com>; > Laszlo Ersek <lersek@redhat.com> > Subject: [Patch v2] UefiCpuPkg/MpInitLib: Optimize get processor number > performance. > > Current function has low performance because it calls GetApicId many times. > > New logic call GetApicId once and base on this value to search the processor. > > V2 changes: > Rollback V1 change which base on stack info to get AP index because this > solution may return error AP index if stack buffer overflow. > > Cc: Ruiyu Ni <ruiyu.ni@intel.com> > Cc: Jeff Fan <vanjeff_919@hotmail.com> > Cc: Laszlo Ersek <lersek@redhat.com> > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Eric Dong <eric.dong@intel.com> > --- > UefiCpuPkg/Library/MpInitLib/MpLib.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.c > b/UefiCpuPkg/Library/MpInitLib/MpLib.c > index 722db2a01f..0bb0582985 100644 > --- a/UefiCpuPkg/Library/MpInitLib/MpLib.c > +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.c > @@ -435,16 +435,19 @@ GetProcessorNumber ( > UINTN TotalProcessorNumber; > UINTN Index; > CPU_INFO_IN_HOB *CpuInfoInHob; > + UINT32 CurrentApicId; > > CpuInfoInHob = (CPU_INFO_IN_HOB *) (UINTN) CpuMpData- > >CpuInfoInHob; > > TotalProcessorNumber = CpuMpData->CpuCount; > + CurrentApicId = GetApicId (); > for (Index = 0; Index < TotalProcessorNumber; Index ++) { > - if (CpuInfoInHob[Index].ApicId == GetApicId ()) { > + if (CpuInfoInHob[Index].ApicId == CurrentApicId) { > *ProcessorNumber = Index; > return EFI_SUCCESS; > } > } > + > return EFI_NOT_FOUND; > } > > -- > 2.15.0.windows.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
On 07/18/18 07:19, Eric Dong wrote: > Current function has low performance because it calls GetApicId > many times. > > New logic call GetApicId once and base on this value to search > the processor. > > V2 changes: > Rollback V1 change which base on stack info to get AP index because > this solution may return error AP index if stack buffer overflow. > > Cc: Ruiyu Ni <ruiyu.ni@intel.com> > Cc: Jeff Fan <vanjeff_919@hotmail.com> > Cc: Laszlo Ersek <lersek@redhat.com> > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Eric Dong <eric.dong@intel.com> > --- > UefiCpuPkg/Library/MpInitLib/MpLib.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.c b/UefiCpuPkg/Library/MpInitLib/MpLib.c > index 722db2a01f..0bb0582985 100644 > --- a/UefiCpuPkg/Library/MpInitLib/MpLib.c > +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.c > @@ -435,16 +435,19 @@ GetProcessorNumber ( > UINTN TotalProcessorNumber; > UINTN Index; > CPU_INFO_IN_HOB *CpuInfoInHob; > + UINT32 CurrentApicId; > > CpuInfoInHob = (CPU_INFO_IN_HOB *) (UINTN) CpuMpData->CpuInfoInHob; > > TotalProcessorNumber = CpuMpData->CpuCount; > + CurrentApicId = GetApicId (); > for (Index = 0; Index < TotalProcessorNumber; Index ++) { > - if (CpuInfoInHob[Index].ApicId == GetApicId ()) { > + if (CpuInfoInHob[Index].ApicId == CurrentApicId) { > *ProcessorNumber = Index; > return EFI_SUCCESS; > } > } > + > return EFI_NOT_FOUND; > } > > Nice and clean. Reviewed-by: Laszlo Ersek <lersek@redhat.com> Sorry about the delay in my getting to this patch. Laszlo _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
© 2016 - 2024 Red Hat, Inc.