diff mbox series

[v2,23/31] OvmfPkg/XenPlatformPei: Reserve VGA memory region, to boot Linux

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

Commit Message

Anthony PERARD April 9, 2019, 11:08 a.m. UTC
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(+)

Comments

Laszlo Ersek April 15, 2019, 1:21 p.m. UTC | #1
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 mbox series

Patch

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);