Sent from my iPhone
> On Sep 22, 2014, at 8:34 PM, Fan, Jeff <[email protected]> wrote: > > Andrew, > > gBS->Stall () implementation has no bug. > > Actually, gBS->Stall () will consume EFI Metronome Arch Protocol that is > published by Metronome module. But Metronome module is dispatched after > CpuDxe module dispatched on Ovmf platform. > > Before Metronome module dispatched, gBS->Stall () is not available. > > EFI_STATUS > EFIAPI > CoreStall ( > IN UINTN Microseconds > ) > { > if (gMetronome == NULL) { > return EFI_NOT_AVAILABLE_YET; > } > } > > Since CpuDxe also needs to publish CPU Arch protocol, it cannot assume > gBS->Stall() is ready always. > > I suggest to use TimerLib Service instead of gBS->Stall in CpuDxe here. > > Another long term option, producing CPU MP protocol in another Cpu MP driver > instead of in CpuDxe driver that is produce CPU ARCH protocol only. > OK so it is a depex issue in the DXE driver. A register protocol notify would be another option. > Thanks! > Jeff > > -----Original Message----- > From: Andrew Fish [mailto:[email protected]] > Sent: Monday, September 22, 2014 11:58 PM > To: Fan, Jeff > Cc: Chen, Fan; [email protected]; Jordan Justen > Subject: Re: [RFC v3 00/19] Introduce Mp Service protocol to UefiCpuPkg > > >> On Sep 22, 2014, at 12:23 AM, Fan, Jeff <[email protected]> wrote: >> >> Yes. Timeout is root reason here. >> >> It seemed that gBS->Stall() does not delay enough time as expected. >> I used MicroSecondDelay (100 * 1000) to replace gBS->Stall() in >> StartApsStackless() to delay 100ms. >> >> The image ovmf.fd built by GCC could work on Windows Qemu now. >> C:\qemu\qemu-system-x86_64.exe -pflash OVMF64.fd -smp 4 -serial COM8 > > gBS->Stall() should always work. We should fix the bug in the gBS->Stall(). > > Thanks, > > Andrew Fish > >> I will do some verification more. Thanks! >> >> Jeff >> -----Original Message----- >> From: Chen, Fan [mailto:[email protected]] >> Sent: Monday, September 22, 2014 1:46 PM >> To: Fan, Jeff >> Cc: [email protected]; Jordan Justen; Andrew Fish >> Subject: Re: [RFC v3 00/19] Introduce Mp Service protocol to >> UefiCpuPkg >> >> Hi Jeff, >> >>> On Mon, 2014-09-22 at 05:12 +0000, Fan, Jeff wrote: >>> Chen, >>> >>> Thanks. I used the real platform to verify Cpu MP. It seemed that one AP is >>> good but 3 APs still failed. Do you know what else need to consider? >>> Or could you tell me your test environment? >>> >>> 1. -smp 4 faile, please see the attached log and console output $ >>> sudo >>> qemu-system-x86_64 -bios OVMF64.fd -smp 4 --enable-kvm -serial >>> file:ovmf64_4.log >> >> Thanks for your testing, from the log file I can think of is the more CPU >> would need more time to execute the start-up code, but MP just waited for >> 100ms, I encountered the same issue when I set the number of cpu more than >> 4. was the detect count of CPUs always two each time? >> >> I used OVMF to test: >> command line: >> ./OvmfPkg/build.sh qemu --enable-kvm -m 1024 -hda >> /home/data/ovmf-rhel6.3.img -debugcon file:debug.log -global >> isa-debugcon.iobase=0x402 -smp 4 >> >> # /bin/qemu-system-x86_64 --version >> QEMU emulator version 2.1.50 >> >> Thanks, >> Chen >> >> >>> 2. -smp 2 succeed, please see the attached log. >>> $ sudo qemu-system-x86_64 -bios OVMF64.fd -smp 2 --enable-kvm -serial >>> file:ovmf64_2.log >>> >>> For IA32 arch, I got the exact result. >>> >>> Thanks! >>> Jeff >>> -----Original Message----- >>> From: Chen, Fan [mailto:[email protected]] >>> Sent: Friday, September 19, 2014 5:24 PM >>> To: Fan, Jeff >>> Cc: [email protected]; Jordan Justen; Andrew Fish >>> Subject: Re: [RFC v3 00/19] Introduce Mp Service protocol to >>> UefiCpuPkg >>> >>>> On Fri, 2014-09-19 at 07:07 +0000, Fan, Jeff wrote: >>>> Chen & Jordan, >>>> >>>> I encountered on exception as blew on Ubuntu12.04 (on virtual machine by >>>> Virtual Box, VT-x enabled) with GCC46. Log is attached. Do you have any >>>> idea on it? >>>> >>>> $ qemu-system-i386 -smp 4 -serial file:ovmf.log >>>> >>>> Could not access KVM kernel module: No such file or directory failed >>>> to initialize KVM: No such file or directory >>> >>> I think you probably did not load the KVM modules. and used the qemu >>> command with --enable-kvm. >>> >>> Thanks, >>> Chen >>> >>> >>>> Back to tcg accelerator. >>>> qemu: fatal: Trying to execute code outside RAM or ROM at 0x000a0000 >>>> >>>> EAX=00000000 EBX=00000000 ECX=00000000 EDX=00000633 >>>> ESI=00000000 EDI=00001ff8 EBP=00000000 ESP=00000000 EIP=00000ffc >>>> EFL=00000002 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0 ES =0000 >>>> 00000000 0000ffff 00009300 CS =9f00 0009f000 0000ffff 00009b00 SS >>>> =0000 >>>> 00000000 0000ffff 00009300 DS =0000 00000000 0000ffff 00009300 FS >>>> =0000 00000000 0000ffff 00009300 GS =0000 00000000 0000ffff 00009300 >>>> LDT=0000 00000000 0000ffff 00008200 >>>> TR =0000 00000000 0000ffff 00008b00 >>>> GDT= 00000000 0000ffff >>>> IDT= 00000000 0000ffff >>>> CR0=60000010 CR2=00000000 CR3=00000000 CR4=00000000 >>>> DR0=00000000 DR1=00000000 DR2=00000000 DR3=00000000 >>>> DR6=ffff0ff0 DR7=00000400 >>>> CCS=00000000 CCD=00000000 CCO=SUBW >>>> EFER=0000000000000000 >>>> FCW=037f FSW=0000 [ST=0] FTW=00 MXCSR=00001f80 >>>> FPR0=0000000000000000 0000 FPR1=0000000000000000 0000 >>>> FPR2=0000000000000000 0000 FPR3=0000000000000000 0000 >>>> FPR4=0000000000000000 0000 FPR5=0000000000000000 0000 >>>> FPR6=0000000000000000 0000 FPR7=0000000000000000 0000 >>>> XMM00=00000000000000000000000000000000 >>>> XMM01=00000000000000000000000000000000 >>>> XMM02=00000000000000000000000000000000 >>>> XMM03=00000000000000000000000000000000 >>>> XMM04=00000000000000000000000000000000 >>>> XMM05=00000000000000000000000000000000 >>>> XMM06=00000000000000000000000000000000 >>>> XMM07=00000000000000000000000000000000 >>>> Aborted (core dumped) >>>> >>>> Thanks! >>>> Jeff >>>> -----Original Message----- >>>> From: Chen Fan [mailto:[email protected]] >>>> Sent: Thursday, September 18, 2014 11:12 AM >>>> To: [email protected] >>>> Cc: Jordan Justen; Fan, Jeff; Andrew Fish >>>> Subject: [RFC v3 00/19] 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 >>>> >>>> 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. >>>> >>>> TODO: >>>> 1) StartupThisAP/StartAllAps: when Timeout expires before AP returns >>>> from Procedure, constrainedly terminate the executed Procedure. >>>> >>>> Any Comment is welcome. >>>> >>>> Chen Fan (13): >>>> 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() >>>> UefiCpuPkg/CpuDxe: introduce CPU bus lock for sync data >>>> UefiCpuPkg/CpuDxe: implement Mp Services: StartupAllAPs() >>>> UefiCpuPkg/CpuDxe: implement Mp Services: SwitchBSP() >>>> UefiCpuPkg/CpuDxe: add Mp Service TestCase >>>> >>>> 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 | 209 ++++++ >>>> UefiCpuPkg/CpuDxe/CpuDxe.c | 5 + >>>> UefiCpuPkg/CpuDxe/CpuDxe.inf | 8 + >>>> UefiCpuPkg/CpuDxe/CpuGdt.c | 52 +- >>>> UefiCpuPkg/CpuDxe/CpuGdt.h | 72 ++ >>>> UefiCpuPkg/CpuDxe/CpuMp.c | 1349 >>>> +++++++++++++++++++++++++++++++++++++ >>>> UefiCpuPkg/CpuDxe/CpuMp.h | 643 ++++++++++++++++++ >>>> UefiCpuPkg/CpuDxe/CpuMpTest.c | 76 +++ >>>> UefiCpuPkg/CpuDxe/Ia32/MpAsm.S | 109 +++ >>>> UefiCpuPkg/CpuDxe/Ia32/MpAsm.nasm | 144 ++++ >>>> UefiCpuPkg/CpuDxe/X64/MpAsm.S | 111 +++ >>>> UefiCpuPkg/CpuDxe/X64/MpAsm.nasm | 142 ++++ >>>> 13 files changed, 2980 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.S create mode 100644 >>>> UefiCpuPkg/CpuDxe/Ia32/MpAsm.nasm create mode 100644 >>>> UefiCpuPkg/CpuDxe/X64/MpAsm.S create mode 100644 >>>> UefiCpuPkg/CpuDxe/X64/MpAsm.nasm >>>> >>>> -- >>>> 1.9.3 > ------------------------------------------------------------------------------ Meet PCI DSS 3.0 Compliance Requirements with EventLog Analyzer Achieve PCI DSS 3.0 Compliant Status with Out-of-the-box PCI DSS Reports Are you Audit-Ready for PCI DSS 3.0 Compliance? Download White paper Comply to PCI DSS 3.0 Requirement 10 and 11.5 with EventLog Analyzer http://pubads.g.doubleclick.net/gampad/clk?id=154622311&iu=/4140/ostg.clktrk _______________________________________________ edk2-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/edk2-devel
