Chen,
Thanks your patches, this is very good start for UefiCpuPkg to add PI MP
services.
My questions as below for your V2 patch.
What means " do not call anything EFI API from APs."? Does it mean APs will
not call any BS services?
If yes, this is correct. APs routine cannot invoke any BS services.
Why did you get rid of sending IPI to wake up APs? Do you encounter any issue
with it?
>From your patch, I don't know why StarupThisAP () cannot work correctly.
>Could you send me your AP routine test code and test procedure?
The following are my comments on your MP service implementation for UefiCpuPkg.
1. There is no implementation of StartupAllAps (). It's required for PI MP
service from PI Spec.
2. There is no implementation of SwitchBsp(). It's not required from PI spec.
So, you could write one SwitchBsp function and return EFI_UNSUPPORTED simply
instead of NULL function pointer in MP service structure.
3. Why free AP stack at end of code InitializeMpSupport()? I think AP stack
should be used by APs during whole POST phase.
FreePages (mCommonStack, EFI_SIZE_TO_PAGES (AP_STACK_SIZE));
4. There is no .ASM implementation, we need to check-in code in UefiCpuPkg to
support both MSFT and GCC. Maybe .nasm is good start to support both at one
time for such new assembly code. :-)
5. Please follow EDKII coding style document to add function headers and
refine your code. Please refer to
https://sourceforge.net/projects/edk2/files/General%20Documentation/EDK%20II%20C%20Coding%20Standards%20Specification.pdf/download
BTW: What platform do you use for testing?
Best Regards,
Jeff
-----Original Message-----
From: Chen Fan [mailto:[email protected]]
Sent: Wednesday, September 10, 2014 6:22 PM
To: [email protected]
Cc: Jordan Justen; Fan, Jeff
Subject: [RFC v2 00/15] Introduce Mp Service protocol to UefiCpuPkg
This series patchset try to implement Mp Service protocol in UefiCpuPkg, Jordan
had implemented the startup APs code, and I try to add more initialization code
to let all APs work up, this Mp Service protocol's implementation used
EmulatorPkg/MpService for reference.
this patches works on my github:
https://github.com/ChenFanFnst/edk2/tree/cpu-mp-service
V1-V2:
1. do not call anything EFI API from APs.
2. add AP busy-wait for task assignment from BSP and get rid of
IPI sent mechanism.
NOTE: the last patch implemented StartupThisAP() could not run correctly.
the Ap run loop will cause IoRead32() assert in
MdePkg/Library/BaseIoLibIntrinsic/IoLibGcc.c: (163)
I can't find the root reason. please help me.
TODO:
1) StartupThisAP/StartAllAps: when Timeout expires before AP returns
from Procedure, constrainedly terminate the executed Procedure.
2) Support SwitchBSP(). (Or it is unnecessary)
Any Comment is welcome.
Chen Fan (9):
UefiCpuPkg/CpuDxe: Introduce AsmApDoneWithCommonStack
UefiCpuPkg/CpuDxe: Waiting for Aps initialization done
UefiCpuPkg/CpuDxe: Switch Ap CommonStack with NewStack
UefiCpuPkg/CpuDxe: install Mp Service protocol
UefiCpuPkg/CpuDxe: implement Mp Protocol: GetNumberOfProcessors()
UefiCpuPkg/CpuDxe: implement Mp Protocol: WhoAmI()
UefiCpuPkg/CpuDxe: implement Mp Services: GetProcessorInfo()
UefiCpuPkg/CpuDxe: implement Mp Protocol: EnableDisableAP()
UefiCpuPkg/CpuDxe: implement Mp Protocol: StartupThisAP()
Jordan Justen (6):
UefiCpuPkg/CpuDxe: Add no-op InitializeMpSupport
UefiCpuPkg/CpuDxe: Add ApEntryPointInC
UefiCpuPkg/CpuDxe: Add stackless assembly AP entry points
UefiCpuPkg/CpuDxe: Move GDT structures into CpuGdt.h
UefiCpuPkg/CpuDxe: Add StartApsStackless routine
UefiCpuPkg/CpuDxe: Startup APs
UefiCpuPkg/CpuDxe/ApStartup.asm | 111 ++++++
UefiCpuPkg/CpuDxe/ApStartup.c | 189 ++++++++++
UefiCpuPkg/CpuDxe/CpuDxe.c | 3 +
UefiCpuPkg/CpuDxe/CpuDxe.inf | 7 +
UefiCpuPkg/CpuDxe/CpuGdt.c | 52 +--
UefiCpuPkg/CpuDxe/CpuGdt.h | 72 ++++
UefiCpuPkg/CpuDxe/CpuMp.c | 756 ++++++++++++++++++++++++++++++++++++++++
UefiCpuPkg/CpuDxe/CpuMp.h | 152 ++++++++
UefiCpuPkg/CpuDxe/Ia32/MpAsm.S | 114 ++++++
UefiCpuPkg/CpuDxe/X64/MpAsm.S | 125 +++++++
10 files changed, 1530 insertions(+), 51 deletions(-) create mode 100644
UefiCpuPkg/CpuDxe/ApStartup.asm create mode 100644
UefiCpuPkg/CpuDxe/ApStartup.c create mode 100644 UefiCpuPkg/CpuDxe/CpuGdt.h
create mode 100644 UefiCpuPkg/CpuDxe/CpuMp.c create mode 100644
UefiCpuPkg/CpuDxe/CpuMp.h create mode 100644 UefiCpuPkg/CpuDxe/Ia32/MpAsm.S
create mode 100644 UefiCpuPkg/CpuDxe/X64/MpAsm.S
--
1.9.3
------------------------------------------------------------------------------
Want excitement?
Manually upgrade your production database.
When you want reliability, choose Perforce
Perforce version control. Predictably reliable.
http://pubads.g.doubleclick.net/gampad/clk?id=157508191&iu=/4140/ostg.clktrk
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel