* [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.