Skip to content

whp: implement safe wrappers for VM, vCPU, and instruction emulation#665

Open
lstocchi wants to merge 1 commit intocontainers:mainfrom
lstocchi:whp_crate
Open

whp: implement safe wrappers for VM, vCPU, and instruction emulation#665
lstocchi wants to merge 1 commit intocontainers:mainfrom
lstocchi:whp_crate

Conversation

@lstocchi
Copy link
Copy Markdown
Contributor

@lstocchi lstocchi commented May 5, 2026

This commit introduces the foundational Rust abstractions for the Windows Hypervisor Platform (WHP) backend. I took inspiration from the hvf crate (you'll find WhpVm, WhpVcpu, and WhpEmulator).

Key features include:

  • Partition & vCPU Management: Safe wrappers for partition configuration, CPUID masking, memory mapping, and WHvRunVirtualProcessor exit routing.
  • 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.

In a follow-up PR i'll add the hyper-v enlightements as this is already a big one.

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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant