vmd(8): provide a detailed e820 memory map.
authordv <dv@openbsd.org>
Mon, 26 Dec 2022 23:50:20 +0000 (23:50 +0000)
committerdv <dv@openbsd.org>
Mon, 26 Dec 2022 23:50:20 +0000 (23:50 +0000)
commitcf08ffabc25f963e835913e6fe6f473b987576f5
treeb667eda9a03f84a5b532137da91584fc73f85304
parent0ec63f83d9b3c734c2008e4fdf2f1f3927d6b788
vmd(8): provide a detailed e820 memory map.

When booting guests with SeaBIOS, vmd(8) supplied details about the
available guest memory via CMOS registers. Consequently, we've been
carrying some patches in the ports tree to SeaBIOS to fetch this
information like it's the 1990s.

When a vm initializes memory ranges, we now track what each range
represents. This information can be used to supply the e820 memory
map to SeaBIOS via the fw_cfg interface allowing it to properly
communicate memory ranges to a guest operating system. (This will
also allow us to drop some patches from the port.)

Given the ranges can now be marked with a purpose, this also allows
vmm(4) to switch from hard-coded mmio ranges and instead let the
information on the memory range dictate if vmm should be handling
a page fault or sending to vmd for a memory assist.

Tested by Mischa Peters and others. OK mlarkin@.
sys/arch/amd64/amd64/vmm.c
sys/arch/amd64/include/vmmvar.h
usr.sbin/vmd/fw_cfg.c
usr.sbin/vmd/loadfile_elf.c
usr.sbin/vmd/vm.c