x86: drop use of E801 memory "map" (and alike)

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>
Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
This commit is contained in:
Jan Beulich committed 2021-01-07 15:09:47 +01:00
1 parent 1977cd74ff
commit 925fdb0870
3 files changed
+4 -64

No files matched your search

+4 -41
View File
@@ -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
-22
View File
@@ -1059,28 +1059,6 @@ void __init noreturn __start_xen(unsigned long mbi_p)
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");
-1
View File
@@ -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;
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.