All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] x86: drop use of E801 memory "map" (and alike)
@ 2021-01-05 15:26 Jan Beulich
  0 siblings, 0 replies; only message in thread
From: Jan Beulich @ 2021-01-05 15:26 UTC (permalink / raw)
  To: xen-devel; +Cc: Andrew Cooper, Wei Liu, Roger Pau Monné

ACPI mandates use of E820 (or newer, e.g. EFI), and in fact firmware
has been observed to include E820_ACPI ranges in what E801 reports as
available (really "configured") memory. Since all 64-bit systems ought
to support ACPI, drop our use of older BIOS and boot loader interfaces.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
---
v2: Drop all use of E801 (and older).

--- a/xen/arch/x86/boot/mem.S
+++ b/xen/arch/x86/boot/mem.S
@@ -4,8 +4,6 @@
 #define E820_BIOS_MAX 128
 
 get_memory_map:
-
-.Lmeme820:
         xorl    %ebx, %ebx                      # continuation counter
         movw    $bootsym(bios_e820map), %di     # point into the whitelist
                                                 # so we can have the bios
@@ -17,14 +15,14 @@ get_memory_map:
         pushw   %ds                             # data record.
         popw    %es
         int     $0x15
-        jc      .Lmem88
+        jc      .Ldone
 
         cmpl    $SMAP,%eax                      # check the return is `SMAP'
-        jne     .Lmem88
+        jne     .Ldone
 
         incw    bootsym(bios_e820nr)
         cmpw    $E820_BIOS_MAX, bootsym(bios_e820nr) # up to this many entries
-        jae     .Lmem88
+        jae     .Ldone
 
         movw    %di,%ax
         addw    $20,%ax
@@ -32,38 +30,7 @@ get_memory_map:
         testl   %ebx,%ebx                       # check to see if
         jnz     1b                              # %ebx is set to EOF
 
-.Lmem88:
-        movb    $0x88, %ah
-        int     $0x15
-        movw    %ax,bootsym(highmem_kb)
-
-.Lmeme801:
-        stc                                     # fix to work around buggy
-        xorw    %cx,%cx                         # BIOSes which don't clear/set
-        xorw    %dx,%dx                         # carry on pass/error of
-                                                # e801h memory size call
-                                                # or merely pass cx,dx though
-                                                # without changing them.
-        movw    $0xe801, %ax
-        int     $0x15
-        jc      .Lint12
-
-        testw   %cx, %cx                        # Kludge to handle BIOSes
-        jnz     1f                              # which report their extended
-        testw   %dx, %dx                        # memory in AX/BX rather than
-        jnz     1f                              # CX/DX.  The spec I have read
-        movw    %ax, %cx                        # seems to indicate AX/BX 
-        movw    %bx, %dx                        # are more reasonable anyway...
-1:      movzwl  %dx, %edx
-        shll    $6,%edx                         # and go from 64k to 1k chunks
-        movzwl  %cx, %ecx
-        addl    %ecx, %edx                      # add in lower memory
-        movl    %edx,bootsym(highmem_kb)        # store extended memory size
-
-.Lint12:
-        int     $0x12
-        movw    %ax,bootsym(lowmem_kb)
-
+.Ldone:
         ret
 
         .align  4
@@ -71,7 +38,3 @@ GLOBAL(bios_e820map)
         .fill   E820_BIOS_MAX*20,1,0
 GLOBAL(bios_e820nr)
         .long   0
-GLOBAL(lowmem_kb)
-        .long   0
-GLOBAL(highmem_kb)
-        .long   0
--- a/xen/arch/x86/setup.c
+++ b/xen/arch/x86/setup.c
@@ -1059,28 +1059,6 @@ void __init noreturn __start_xen(unsigne
             bytes += map->size + 4;
         }
     }
-    else if ( bootsym(lowmem_kb) )
-    {
-        memmap_type = "Xen-e801";
-        e820_raw.map[0].addr = 0;
-        e820_raw.map[0].size = bootsym(lowmem_kb) << 10;
-        e820_raw.map[0].type = E820_RAM;
-        e820_raw.map[1].addr = 0x100000;
-        e820_raw.map[1].size = bootsym(highmem_kb) << 10;
-        e820_raw.map[1].type = E820_RAM;
-        e820_raw.nr_map = 2;
-    }
-    else if ( mbi->flags & MBI_MEMLIMITS )
-    {
-        memmap_type = "Multiboot-e801";
-        e820_raw.map[0].addr = 0;
-        e820_raw.map[0].size = mbi->mem_lower << 10;
-        e820_raw.map[0].type = E820_RAM;
-        e820_raw.map[1].addr = 0x100000;
-        e820_raw.map[1].size = mbi->mem_upper << 10;
-        e820_raw.map[1].type = E820_RAM;
-        e820_raw.nr_map = 2;
-    }
     else
         panic("Bootloader provided no memory information\n");
 
--- a/xen/include/asm-x86/e820.h
+++ b/xen/include/asm-x86/e820.h
@@ -36,7 +36,6 @@ extern struct e820map e820;
 extern struct e820map e820_raw;
 
 /* These symbols live in the boot trampoline. */
-extern unsigned int lowmem_kb, highmem_kb;
 extern struct e820map bios_e820map[];
 extern unsigned int bios_e820nr;
 


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-01-05 15:26 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-05 15:26 [PATCH v2] x86: drop use of E801 memory "map" (and alike) Jan Beulich

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.