typed PCI registers, virtio MAC randomization, SMP syscall trap#2367
typed PCI registers, virtio MAC randomization, SMP syscall trap#2367uadhran wants to merge 2 commits into
Conversation
…P syscall trap - Replace PCI config register #defines with typed enum classes (includeos#2333) - Randomize virtio-net host MAC bytes on init to avoid local collisions (includeos#1409) - Set up syscall trap on AP cores via shared init_syscall_trap() (includeos#2358)
Drivers initialize before RNG::init(), so rng_extract() was reading uninitialized state. Use RDRAND/RDSEED when available, with a pci_addr + clock fallback otherwise.
|
When looking statically PCI/enum and static casting seems fine. Syscall handler for SMP is very much wanted, but maybe the init function should be part of |
|
Thanks for the review @torgeiru . PCI enums — noted, glad the static casts look fine. SMP syscall trap — agree that Virtio MAC — addresses #1409: QEMU gives the same default virtio-net MAC for every instance, which breaks running multiple copies locally. After reading the MAC from virtio config we keep the prefix from the device and randomize the host-specific bytes ( Tests — unit tests pass here as well ( |
Tested:
nix-build unittests.nix— 85/85 unit tests passed (Nix 2.34.7, Linux).Not run yet:
./test/test.sh, integration/unikernel builds.Three small fixes:
PCI config registers (#2333)
PCI register offsets were plain #defines in the header. Moved them to
enum classes (
config_reg,command,cap_id) for type safety.Updates in
pci_device.cppandpci_msi.cpp.VirtioNet MAC (#1409)
QEMU hands out the same default MAC on every virtio-net device, which is
awkward when running multiple instances locally. After reading the MAC
from virtio config we randomize the host-specific bytes and set the
locally-administered bit. Uses RDRAND/RDSEED when available, with a
pci_addr + clock fallback (drivers init before
RNG::init()).SMP syscall trap (#2358)
Only CPU 0 had the syscall MSR set up. Pulled that into
init_syscall_trap()and call it from both the BSP libc init pathand
revenant_main. Handler still panics — syscalls aren'timplemented — but APs get a trap instead of nothing.
Related: #2333, #1409, #2358