How nguyentrongphuc552003/haven works
Haven is an ARM64 EL2 static-partitioning hypervisor: its principal workflow initializes isolation policy, configures hardware-backed memory, DMA, interrupt, and CPU-time controls, then transfers execution to partition guests. A separate research workflow reads enforced hardware state from outside Haven and compares it with a grant to detect drift. The graph preserves documented capabilities even where their implementation was not sampled; edges for those links rely on README statements rather than inspected call sites.
Main entry points: partition.c Partition launcher · readback.py Hardware read-back · smmu.c SMMUv3 DMA · init.c Hypervisor init
Components 20
Boot and platform
- EFI loader
boot/efi/boot.c - Platform setup
src/platform/qemu-virt/platform.c
Hypervisor enforcement
- Hypervisor init
src/core/init.c - Partition launcher
src/core/partition.c - Stage-2 isolation
src/core/mm/stage2.c - DMA policy
src/core/iommu/iommu_policy.c - SMMUv3 DMA
src/core/dma/smmu.c - SMMUv3 driver
drivers/iommu/smmu_v3.c - IRQ ownership
src/core/irq/ownership.c - Virtual interrupts
src/core/irq/vgic.c - GICv3 driver
drivers/irqchip/gic_v3.c - CPU budgets
src/core/sched/budget.c - EL2 timer
src/core/time/timer.c
Partition guests
- Partition A
src/guest/rtos/freertos_integration.c - Partition B
src/guest/rtos/freertos_integration.c
External verification
- Isolation grant
tools/readback/grant.py - Hardware read-back
tools/readback/readback.py - Drift comparison
tools/readback/readback.py
Other components
- UEFI firmware
- QEMU machine
Connections 21
- UEFI firmware → EFI loader: loads image
boot/efi/boot.c - EFI loader → Hypervisor init: enters EL2
boot/efi/boot.c - Platform setup → Hypervisor init: provides platform
- Hypervisor init → Partition launcher: launches partitions
src/core/partition.c - Partition launcher → Stage-2 isolation: sets memory
src/core/partition.c - Partition launcher → DMA policy: applies DMA grants
src/core/partition.c - DMA policy → SMMUv3 DMA: configures policy
- SMMUv3 DMA → SMMUv3 driver: programs hardware
- Partition launcher → IRQ ownership: sets IRQ ownership
src/core/partition.c - Partition launcher → CPU budgets: sets CPU budgets
src/core/partition.c - CPU budgets → EL2 timer: uses timer
- IRQ ownership → Virtual interrupts: delivers virtual IRQs
- Virtual interrupts → GICv3 driver: uses GICv3
- Partition launcher → Partition A: enters guest
src/core/partition.c - Partition launcher → Partition B: starts via PSCI
README.md - QEMU machine → Hardware read-back: exposes state
README.md - Isolation grant → Drift comparison: supplies expected state
README.md - Hardware read-back → Drift comparison: compares state
README.md - Stage-2 isolation → Hardware read-back: state is inspected
- SMMUv3 DMA → Hardware read-back: state is inspected
- GICv3 driver → Hardware read-back: state is inspected