Message ID | 20190409110844.14746-24-anthony.perard@citrix.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Specific platform to run OVMF in Xen PVH and HVM guests | expand |
On 04/09/19 13:08, Anthony PERARD wrote: > Linux panic if this region isn't reserved. Please expand "this" (just copy from the subject). with that, Acked-by: Laszlo Ersek <lersek@redhat.com> Thanks Laszlo > > When Linux is booted on EFI system, it expects the memory at 0xa0000 to > _not_ be conventional memory. Otherwise a variable isn't initialised > properly and Linux panic when a virtual console/terminal is asked to be > created. > > See for more detail: > https://lists.xenproject.org/archives/html/xen-devel/2019-03/msg02139.html > > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Anthony PERARD <anthony.perard@citrix.com> > --- > OvmfPkg/XenPlatformPei/Xen.c | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/OvmfPkg/XenPlatformPei/Xen.c b/OvmfPkg/XenPlatformPei/Xen.c > index 7b503f2c4e..25f12c2f9c 100644 > --- a/OvmfPkg/XenPlatformPei/Xen.c > +++ b/OvmfPkg/XenPlatformPei/Xen.c > @@ -294,6 +294,12 @@ XenPublishRamRegions ( > Status = XenGetE820Map (&E820Map, &E820EntriesCount); > ASSERT_EFI_ERROR (Status); > > + AddMemoryBaseSizeHob (0, 0xA0000); > + // > + // Video memory + Legacy BIOS region, to allow Linux to boot. > + // > + AddReservedMemoryBaseSizeHob (0xA0000, BASE_1MB - 0xA0000, TRUE); > + > for (Index = 0; Index < E820EntriesCount; Index++) { > UINT64 Base; > UINT64 End; > @@ -307,6 +313,16 @@ XenPublishRamRegions ( > Base = ALIGN_VALUE (Entry->BaseAddr, (UINT64)EFI_PAGE_SIZE); > End = (Entry->BaseAddr + Entry->Length) & ~(UINT64)EFI_PAGE_MASK; > > + // > + // Ignore the first 1MB, this is handled before the loop. > + // > + if (Base < BASE_1MB) { > + Base = BASE_1MB; > + } > + if (Base >= End) { > + continue; > + } > + > switch (Entry->Type) { > case EfiAcpiAddressRangeMemory: > AddMemoryRangeHob (Base, End); >
diff --git a/OvmfPkg/XenPlatformPei/Xen.c b/OvmfPkg/XenPlatformPei/Xen.c index 7b503f2c4e..25f12c2f9c 100644 --- a/OvmfPkg/XenPlatformPei/Xen.c +++ b/OvmfPkg/XenPlatformPei/Xen.c @@ -294,6 +294,12 @@ XenPublishRamRegions ( Status = XenGetE820Map (&E820Map, &E820EntriesCount); ASSERT_EFI_ERROR (Status); + AddMemoryBaseSizeHob (0, 0xA0000); + // + // Video memory + Legacy BIOS region, to allow Linux to boot. + // + AddReservedMemoryBaseSizeHob (0xA0000, BASE_1MB - 0xA0000, TRUE); + for (Index = 0; Index < E820EntriesCount; Index++) { UINT64 Base; UINT64 End; @@ -307,6 +313,16 @@ XenPublishRamRegions ( Base = ALIGN_VALUE (Entry->BaseAddr, (UINT64)EFI_PAGE_SIZE); End = (Entry->BaseAddr + Entry->Length) & ~(UINT64)EFI_PAGE_MASK; + // + // Ignore the first 1MB, this is handled before the loop. + // + if (Base < BASE_1MB) { + Base = BASE_1MB; + } + if (Base >= End) { + continue; + } + switch (Entry->Type) { case EfiAcpiAddressRangeMemory: AddMemoryRangeHob (Base, End);
Linux panic if this region isn't reserved. When Linux is booted on EFI system, it expects the memory at 0xa0000 to _not_ be conventional memory. Otherwise a variable isn't initialised properly and Linux panic when a virtual console/terminal is asked to be created. See for more detail: https://lists.xenproject.org/archives/html/xen-devel/2019-03/msg02139.html Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Anthony PERARD <anthony.perard@citrix.com> --- OvmfPkg/XenPlatformPei/Xen.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+)