On 2015-10-21 01:44:39, Laszlo Ersek wrote:
> On 10/20/15 22:09, Janusz wrote:
> > W dniu 20.10.2015 o 21:27, Laszlo Ersek pisze:
> >> Due to Linux kernel commit b18d5431acc7 ("KVM: x86: fix CR0.CD
> >> virtualization"), vCPUs need more time to start up, because:
> >>
> >> - KVM now zaps all the mappings for the guest memory in EPT or shadow page
> >>   table, hence more VM exits are required to rebuild the mappings for all
> >>   memory accesses.
> >>
> >> - If a physical device has been assigned to the guest, and the IOMMU lacks
> >>   the snoop control feature, guest memory will become uncacheable after
> >>   CR0.CD is set to 1.
> >>
> >> UefiCpuPkg/UefiCpuPkg.dec sets the timeout to 50ms; startup failures with
> >> 100ms have been reported. Xiao Guangrong suggested 1s, and helped word the
> >> commit message.
> >>
> >> Cc: Xiao Guangrong <guangrong.x...@linux.intel.com>
> >> Cc: Jordan Justen <jordan.l.jus...@intel.com>
> >> Cc: Janusz Mocek <janusz...@gmail.com>
> >> Cc: Alex Williamson <alex.william...@redhat.com>
> >> Reported-by: Janusz Mocek <janusz...@gmail.com>
> >> Suggested-by: Xiao Guangrong <guangrong.x...@linux.intel.com>
> >> Contributed-under: TianoCore Contribution Agreement 1.0
> >> Signed-off-by: Laszlo Ersek <ler...@redhat.com>
> >> ---
> >>  OvmfPkg/OvmfPkgIa32.dsc    | 6 ++++++
> >>  OvmfPkg/OvmfPkgIa32X64.dsc | 8 +++++++-
> >>  OvmfPkg/OvmfPkgX64.dsc     | 6 ++++++
> >>  3 files changed, 19 insertions(+), 1 deletion(-)
> >>
> >> diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc
> >> index 0d044c2..670a80f 100644
> >> --- a/OvmfPkg/OvmfPkgIa32.dsc
> >> +++ b/OvmfPkg/OvmfPkgIa32.dsc
> >> @@ -358,6 +358,12 @@ [PcdsFixedAtBuild]
> >>    gEfiSourceLevelDebugPkgTokenSpaceGuid.PcdDebugLoadImageMethod|0x2
> >>  !endif
> >>  
> >> +  # Initial AP detection may take a long time on KVM; dependent on device
> >> +  # assignment, IOMMU features, VCPU count, and more. Allow a generous 
> >> interval
> >> +  # for the MP services initialization in UefiCpuPkg/CpuDxe to count the 
> >> APs,
> >> +  # and to wait until they become idle again.
> >> +  gUefiCpuPkgTokenSpaceGuid.PcdCpuApInitTimeOutInMicroSeconds|1000000
> >> +
> >>  !ifndef $(USE_OLD_SHELL)
> >>    gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdShellFile|{ 0x83, 0xA5, 
> >> 0x04, 0x7C, 0x3E, 0x9E, 0x1C, 0x4F, 0xAD, 0x65, 0xE0, 0x52, 0x68, 0xD0, 
> >> 0xB4, 0xD1 }
> >>  !endif
> >> diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc
> >> index 19d2221..8c00096 100644
> >> --- a/OvmfPkg/OvmfPkgIa32X64.dsc
> >> +++ b/OvmfPkg/OvmfPkgIa32X64.dsc
> >> @@ -51,7 +51,7 @@ [BuildOptions]
> >>  
> >>  [BuildOptions.common.EDKII.DXE_RUNTIME_DRIVER]
> >>    GCC:*_*_*_DLINK_FLAGS = -z common-page-size=0x1000
> >> -  
> >> +
> >>  
> >> ################################################################################
> >>  #
> >>  # SKU Identification section - list of all SKU IDs supported by this 
> >> Platform.
> >> @@ -363,6 +363,12 @@ [PcdsFixedAtBuild]
> >>    gEfiSourceLevelDebugPkgTokenSpaceGuid.PcdDebugLoadImageMethod|0x2
> >>  !endif
> >>  
> >> +  # Initial AP detection may take a long time on KVM; dependent on device
> >> +  # assignment, IOMMU features, VCPU count, and more. Allow a generous 
> >> interval
> >> +  # for the MP services initialization in UefiCpuPkg/CpuDxe to count the 
> >> APs,
> >> +  # and to wait until they become idle again.
> >> +  gUefiCpuPkgTokenSpaceGuid.PcdCpuApInitTimeOutInMicroSeconds|1000000
> >> +
> >>  !ifndef $(USE_OLD_SHELL)
> >>    gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdShellFile|{ 0x83, 0xA5, 
> >> 0x04, 0x7C, 0x3E, 0x9E, 0x1C, 0x4F, 0xAD, 0x65, 0xE0, 0x52, 0x68, 0xD0, 
> >> 0xB4, 0xD1 }
> >>  !endif
> >> diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc
> >> index b8df1dc..eb4da4f 100644
> >> --- a/OvmfPkg/OvmfPkgX64.dsc
> >> +++ b/OvmfPkg/OvmfPkgX64.dsc
> >> @@ -363,6 +363,12 @@ [PcdsFixedAtBuild]
> >>    gEfiSourceLevelDebugPkgTokenSpaceGuid.PcdDebugLoadImageMethod|0x2
> >>  !endif
> >>  
> >> +  # Initial AP detection may take a long time on KVM; dependent on device
> >> +  # assignment, IOMMU features, VCPU count, and more. Allow a generous 
> >> interval
> >> +  # for the MP services initialization in UefiCpuPkg/CpuDxe to count the 
> >> APs,
> >> +  # and to wait until they become idle again.
> >> +  gUefiCpuPkgTokenSpaceGuid.PcdCpuApInitTimeOutInMicroSeconds|1000000
> >> +
> >>  !ifndef $(USE_OLD_SHELL)
> >>    gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdShellFile|{ 0x83, 0xA5, 
> >> 0x04, 0x7C, 0x3E, 0x9E, 0x1C, 0x4F, 0xAD, 0x65, 0xE0, 0x52, 0x68, 0xD0, 
> >> 0xB4, 0xD1 }
> >>  !endif
> > Tested-by: Janusz Mocek <janusz...@gmail.com>
> > 
> > Thanks
> > 
> 
> Thanks for testing it. We'll need a better design (see the discussion
> with Jordan), but until we implement that in upstream, we can perhaps
> ask Gerd to add this patch to his RPMs -- this should work as a
> short-term band-aid for assigned GPU users.

I'm not against increasing the timeout, but 1 second (an increase of
10 ~ 20x) seems excessive. You said Xiao suggested 1s, but I can't
find that discussion.

I'd like to agree on a more reasonable timeout for now, and then leave
the short-circuiting AP startup task for the future.

-Jordan

> For upstream, Jordan's suggestion is clearly superior, so we shall do
> that; once ready, this patch can be backed out of Gerd's build.
> 
> Thanks
> Laszlo
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to