Page MenuHomeFreeBSD

Allow guest device MMIO access from bootmem memory segments.
ClosedPublic

Authored by grehan on Aug 5 2020, 11:25 AM.
Tags
None
Referenced Files
Unknown Object (File)
Mon, Feb 2, 6:49 AM
Unknown Object (File)
Sun, Jan 25, 2:52 AM
Unknown Object (File)
Sun, Jan 25, 1:23 AM
Unknown Object (File)
Sun, Jan 25, 1:21 AM
Unknown Object (File)
Sat, Jan 24, 9:25 AM
Unknown Object (File)
Fri, Jan 23, 5:40 AM
Unknown Object (File)
Dec 14 2025, 6:44 PM
Unknown Object (File)
Nov 20 2025, 9:16 PM

Details

Summary

Recent versions of UEFI have moved local APIC timer initialization into
the early SEC phase which runs out of ROM, prior to self-relocating
into RAM. This results in a hypervisor exit.

Currently bhyve prevents instruction emulation from segments that aren't
marked as "sysmem" aka guest RAM, with the vm_gpa_hold() routine failing.
However, there is no reason for this restriction: the hypervisor already
controls whether EPT mappings are marked as executable.

Fix by dropping the redundant check of sysmem.

(Note: this problem was first seen by D Scott Phillips and worked around in
UEFI by moving APIC initialization to the later PEI phase
github.com/freebsd/uefi-edk2/pull/7/commits/e8c6872573cd6c8642b0ed2fbeb5c08433dba21b

Test Plan

Boot the most recent bcran UEFI snapshot.

Diff Detail

Repository
rS FreeBSD src repository - subversion
Lint
Lint Passed
Unit
No Test Coverage
Build Status
Buildable 32767
Build 30202: arc lint + arc unit