Chen, Thanks your updating. I attached one addition updating based on you're the latest patches. Please evaluate and sync it into your patches.
BTW, please delete ApStartup.asm from CpuDxe, it seems to be one dummy file. Thanks! Jeff -----Original Message----- From: Chen Fan [mailto:chen.fan.f...@cn.fujitsu.com] Sent: Tuesday, November 04, 2014 5:59 PM To: edk2-devel@lists.sourceforge.net Cc: Jordan Justen; Fan, Jeff; izumi.t...@jp.fujitsu.com Subject: [RFC PATCH V7 00/27] Introduce Mp Service protocol to UefiCpuPkg This series patchsets 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 tested the Mp protocol with the test code, and all cases passed. v6-v7: 1. fix some trivial bugs pointed out by Jeff. 2. free unused cpu buffer data. 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. 3. 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: free the unused cpu data buffer 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 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 | 3 + UefiCpuPkg/CpuDxe/CpuDxe.h | 1 + UefiCpuPkg/CpuDxe/CpuDxe.inf | 17 + UefiCpuPkg/CpuDxe/CpuGdt.c | 52 +- UefiCpuPkg/CpuDxe/CpuGdt.h | 72 ++ UefiCpuPkg/CpuDxe/CpuMp.c | 1534 +++++++++++++++++++++++++++++++++++++ UefiCpuPkg/CpuDxe/CpuMp.h | 642 ++++++++++++++++ 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 | 7 + UefiCpuPkg/UefiCpuPkg.dsc | 1 + 15 files changed, 2930 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.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 -- 1.9.3
CpuDxe_v2.patch
Description: CpuDxe_v2.patch
------------------------------------------------------------------------------
_______________________________________________ edk2-devel mailing list edk2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/edk2-devel