Commit 08ec97b
committed
whp: implement safe wrappers for VM, vCPU, and instruction emulation
This commit introduces the foundational Rust abstractions for the Windows
Hypervisor Platform (WHP) backend. It encapsulates the raw C FFI bindings
into safe, idiomatic Rust structs (`WhpVm`, `WhpVcpu`, and `WhpEmulator`).
Key features include:
- Partition & vCPU Management: Safe wrappers for partition configuration,
CPUID masking, memory mapping, and `WHvRunVirtualProcessor` exit routing.
- High-Performance Register I/O: Introduces const-generic helpers
(`get_registers<N>` and `set_registers<N>`) to guarantee stack-allocated,
zero-overhead register reads/writes on the VM-exit hot path.
- Robust TSC Calibration: Implements accurate host TSC frequency detection
via CPUID 0x15/0x16, with a reliable `QueryPerformanceCounter` (QPC)
calibration fallback for AMD/older hardware.
- Emulation: Integrates WHP's built-in x86 emulator for MMIO and PIO handling.
- Undocumented WHP Workarounds: Implements the `clear_halt_suspend` workaround
using `WHvRegisterInternalActivityState`. This ports a known QEMU/crosvm fix
that manually clears the `HaltSuspend` bit, preventing vCPUs from freezing
when interrupts are injected via `WHvRequestInterrupt` while in a HLT state.
Signed-off-by: lstocchi <lstocchi@redhat.com>1 parent 391409d commit 08ec97b
4 files changed
Lines changed: 954 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
15 | 15 | | |
16 | 16 | | |
17 | 17 | | |
| 18 | + | |
18 | 19 | | |
19 | 20 | | |
20 | 21 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
0 commit comments