Skip to content

Commit 5f9e80f

Browse files
committed
Windows kinda working
Signed-off-by: Ludvig Liljenberg <[email protected]>
1 parent e0a5254 commit 5f9e80f

File tree

8 files changed

+406
-726
lines changed

8 files changed

+406
-726
lines changed

src/hyperlight_host/src/hypervisor/hyperlight_vm.rs

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,19 +27,23 @@ use super::handlers::DbgMemAccessHandlerWrapper;
2727
use super::handlers::{
2828
MemAccessHandlerCaller, MemAccessHandlerWrapper, OutBHandlerCaller, OutBHandlerWrapper,
2929
};
30+
#[cfg(mshv)]
3031
use super::hyperv_linux::MshvVm;
3132
#[cfg(kvm)]
3233
use super::kvm::KvmVm;
3334
use super::regs::{
3435
CommonFpu, CommonRegisters, FP_CONTROL_WORD_DEFAULT, FP_TAG_WORD_DEFAULT, MXCSR_DEFAULT,
3536
};
3637
use super::vm::Vm;
38+
use super::wrappers::HandleWrapper;
3739
use super::{
3840
HyperlightExit, HyperlightVm, CR0_AM, CR0_ET, CR0_MP, CR0_NE, CR0_PE, CR0_PG, CR0_WP,
3941
CR4_OSFXSR, CR4_OSXMMEXCPT, CR4_PAE, EFER_LMA, EFER_LME, EFER_NX, EFER_SCE,
4042
};
4143
#[cfg(crashdump)]
4244
use crate::hypervisor::crashdump;
45+
#[cfg(target_os = "windows")]
46+
use crate::hypervisor::hyperv_windows::WhpVm;
4347
use crate::hypervisor::hypervisor_handler::HypervisorHandler;
4448
use crate::mem::memory_region::{MemoryRegion, MemoryRegionFlags};
4549
use crate::mem::ptr::{GuestPtr, RawPtr};
@@ -324,13 +328,16 @@ impl HyperlightSandbox {
324328
entrypoint: u64,
325329
rsp: u64,
326330
#[cfg(gdb)] gdb_conn: Option<DebugCommChannel<DebugResponse, DebugMsg>>,
331+
handle: HandleWrapper,
327332
) -> Result<Self> {
328333
#[allow(unused_mut)] // needs to be mutable when gdb is enabled
329334
let mut vm: Box<dyn Vm> = match hv {
330335
#[cfg(kvm)]
331336
HypervisorType::Kvm => Box::new(KvmVm::new()?),
332337
#[cfg(mshv)]
333338
HypervisorType::Mshv => Box::new(MshvVm::new()?),
339+
#[cfg(target_os = "windows")]
340+
HypervisorType::Whp => Box::new(WhpVm::new(handle)?),
334341
};
335342

336343
// Safety: We haven't called this before and the regions are valid
@@ -344,6 +351,8 @@ impl HyperlightSandbox {
344351
sregs.cr0 = CR0_PE | CR0_MP | CR0_ET | CR0_NE | CR0_AM | CR0_PG | CR0_WP;
345352
sregs.efer = EFER_LME | EFER_LMA | EFER_SCE | EFER_NX;
346353
sregs.cs.l = 1; // required for 64-bit mode
354+
sregs.cs.present = 1;
355+
sregs.cs.s = 1;
347356
vm.set_sregs(&sregs)?;
348357

349358
#[cfg(gdb)]
@@ -392,6 +401,8 @@ impl HyperlightVm for HyperlightSandbox {
392401
None => self.get_max_log_level().into(),
393402
};
394403

404+
println!("Entrypoint: {:#x}", self.entrypoint);
405+
395406
let regs = CommonRegisters {
396407
rip: self.entrypoint,
397408
rsp: self.orig_rsp.absolute()?,
@@ -401,7 +412,7 @@ impl HyperlightVm for HyperlightSandbox {
401412
rdx: seed,
402413
r8: page_size.into(),
403414
r9: max_guest_log_level,
404-
415+
rflags: 1 << 1,
405416
..Default::default()
406417
};
407418
self.vm.set_regs(&regs)?;
@@ -430,7 +441,7 @@ impl HyperlightVm for HyperlightSandbox {
430441
let regs = CommonRegisters {
431442
rip: dispatch_func_addr.into(),
432443
rsp: self.orig_rsp.absolute()?,
433-
rflags: 2,
444+
rflags: 1 << 1,
434445
..Default::default()
435446
};
436447
self.vm.set_regs(&regs)?;
@@ -532,7 +543,7 @@ impl HyperlightVm for HyperlightSandbox {
532543
})?
533544
.call()?;
534545

535-
log_then_return!("MMIO access address {:#x}", addr);
546+
log_then_return!("MMIO READ access address {:#x}", addr);
536547
}
537548
}
538549
}
@@ -564,7 +575,7 @@ impl HyperlightVm for HyperlightSandbox {
564575
})?
565576
.call()?;
566577

567-
log_then_return!("MMIO access address {:#x}", addr);
578+
log_then_return!("MMIO WRITE access address {:#x}", addr);
568579
}
569580
}
570581
}
@@ -648,6 +659,11 @@ impl HyperlightVm for HyperlightSandbox {
648659

649660
Ok(())
650661
}
662+
663+
#[cfg(target_os = "windows")]
664+
fn get_partition_handle(&self) -> windows::Win32::System::Hypervisor::WHV_PARTITION_HANDLE {
665+
self.vm.get_partition_handle()
666+
}
651667
}
652668

653669
/// The vCPU tried to access the given addr, b

0 commit comments

Comments
 (0)