On Mon, 2014-10-27 at 17:29 +0800, Chen Fan wrote: > 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 > > and made StartCorePkg app for testing Mp Service Protocol on: > https://github.com/ChenFanFnst/edk2/tree/startcore > > I had test Mp protocol, all passed.
I had added more test cases in StartCore App, and fixed some trivial bugs, and updated my MP and StartCore github. please use the latest code for test. Thanks, Chen > > v5-v6: > 1. using only one timer to check all APs status instead of timers for each > AP. > 2. cancel timer each time avoid timer handler reentrancy. > 2. some bug fix. > > v4-v5: > 1. introduce PcdCpuMaxLogicalProcessorNumber to pre-allocate > stack buffer before starting the APs. > 2. implement the function that if procedure routine timeout, > reset AP by sending init ipi. > 3. some bug fix. > > v3-v4: > 1. change the order of the patches. > 2. update some minor format suggested by Jeff. > 3. add a PCD value to configure StackSize. > 4. the last patch add assembly code for MSFT, but didn't > test. > > V3-V3.1: > 1. use AcquireSpinLockOrFail() intead of AcquireSpinLock() > to avoid ASSERT sugguested by Jeff. > > V2-V3: > 1. rebase codes due to Jordan'tree updated: > https://github.com/jljusten/edk2/tree/ap-startup-example > 2. add supported on Ia32 arch > 3. add a new Lock to replace present SpinLock mechanisms in mutilple > processors, maybe the SpinLock mechanisms is not MP safe. > 4. add function header > 5. add StartupAllAPs() supported > 6. add SwitchBSP() function, which is unsupported. > > 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. > > > Chen Fan (22): > UefiCpuPkg/CpuDxe: introduce two PCD value > UefiCpuPkg/CpuDxe: Switch Ap Stack to NewStack > UefiCpuPkg/CpuDxe: introduce EFI_MP_SERVICES_PROTOCOL > UefiCpuPkg/CpuDxe: introduce MP_SYSTEM_DATA for Mp Service Protocol > UefiCpuPkg/CpuDxe: implement Mp Protocol: WhoAmI() > UefiCpuPkg/CpuDxe: implement Mp Protocol:GetNumberOfProcessors() > UefiCpuPkg/CpuDxe: implement Mp Services:GetProcessorInfo() > UefiCpuPkg/CpuDxe: implement Mp Protocol:EnableDisableAP() > UefiCpuPkg/CpuDxe: implement Mp Protocol:StartupThisAP() > UefiCpuPkg/CpuDxe: implement Mp Services:StartupAllAPs() > UefiCpuPkg/CpuDxe: implement Mp Services:SwitchBSP() > UefiCpuPkg/CpuDxe: Ap do loop routine to execute procedure > UefiCpuPkg/MpService: move settimer out to InitMpSystemData > UefiCpuPkg/MpService: Simply Lock usage > UefiCpuPkg/MpService: avoid next timer getting into > CheckAllAPsStatus() > UefiCpuPkg/CpuDxe: split out StartupCode from StartApsStackless() > UefiCpuPkg/CpuDxe: introduce ResetApStackless() > UefiCpuPkg/MpService: avoid reset AP still hold a lock > UefiCpuPkg/MpService: avoid dead lock caused by CheckAllAPsStatus > UefiCpuPkg/CpuDxe: Startup APs > UefiCpuPkg/CpuDxe: install Mp Service protocol > UefiCpuPkg/CpuDxe: add Mp Service TestCase (!upstream) > > Jordan Justen (5): > 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/ApStartup.asm | 111 +++ > UefiCpuPkg/CpuDxe/ApStartup.c | 252 +++++++ > UefiCpuPkg/CpuDxe/CpuDxe.c | 5 + > UefiCpuPkg/CpuDxe/CpuDxe.h | 1 + > UefiCpuPkg/CpuDxe/CpuDxe.inf | 18 + > UefiCpuPkg/CpuDxe/CpuGdt.c | 52 +- > UefiCpuPkg/CpuDxe/CpuGdt.h | 72 ++ > UefiCpuPkg/CpuDxe/CpuMp.c | 1504 > +++++++++++++++++++++++++++++++++++++ > UefiCpuPkg/CpuDxe/CpuMp.h | 650 ++++++++++++++++ > UefiCpuPkg/CpuDxe/CpuMpTest.c | 97 +++ > UefiCpuPkg/CpuDxe/Ia32/MpAsm.asm | 75 ++ > UefiCpuPkg/CpuDxe/Ia32/MpAsm.nasm | 68 ++ > UefiCpuPkg/CpuDxe/X64/MpAsm.asm | 76 ++ > UefiCpuPkg/CpuDxe/X64/MpAsm.nasm | 70 ++ > UefiCpuPkg/UefiCpuPkg.dec | 6 + > UefiCpuPkg/UefiCpuPkg.dsc | 1 + > 16 files changed, 3007 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/CpuMpTest.c > create mode 100644 UefiCpuPkg/CpuDxe/Ia32/MpAsm.asm > create mode 100644 UefiCpuPkg/CpuDxe/Ia32/MpAsm.nasm > create mode 100644 UefiCpuPkg/CpuDxe/X64/MpAsm.asm > create mode 100644 UefiCpuPkg/CpuDxe/X64/MpAsm.nasm > ------------------------------------------------------------------------------ _______________________________________________ edk2-devel mailing list edk2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/edk2-devel