From 0ee0844c595e56bb7fdc61bde39bfb3414f7c871 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Mon, 27 Aug 2018 13:58:32 +0200 Subject: [PATCH] vbox5: revoke VM memory during VM reset Avoids reboot issues seen with Windows VMs. Fixes #2946 --- repos/ports/src/virtualbox5/accloff/sup.cc | 5 +++++ repos/ports/src/virtualbox5/dummies.cc | 1 - repos/ports/src/virtualbox5/hm.cc | 6 ++++++ repos/ports/src/virtualbox5/spec/nova/sup.cc | 6 ++++++ 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/repos/ports/src/virtualbox5/accloff/sup.cc b/repos/ports/src/virtualbox5/accloff/sup.cc index 45aa8dc30e..fc234927b0 100644 --- a/repos/ports/src/virtualbox5/accloff/sup.cc +++ b/repos/ports/src/virtualbox5/accloff/sup.cc @@ -149,3 +149,8 @@ extern "C" bool PGMUnmapMemoryGenode(void *, ::size_t) Genode::error(__func__, " unimplemented"); return VERR_GENERAL_FAILURE; } + +extern "C" void PGMFlushVMMemory() +{ + Genode::error(__func__, " unimplemented"); +} diff --git a/repos/ports/src/virtualbox5/dummies.cc b/repos/ports/src/virtualbox5/dummies.cc index d45eec2637..5360009e8e 100644 --- a/repos/ports/src/virtualbox5/dummies.cc +++ b/repos/ports/src/virtualbox5/dummies.cc @@ -130,7 +130,6 @@ int GIMR3InitCompleted(PVM pVM) void HMR3Relocate(PVM) TRACE() -void HMR3Reset(PVM pVM) TRACE() int SELMR3Init(PVM) TRACE(VINF_SUCCESS) int SELMR3Term(PVM) TRACE(VINF_SUCCESS) diff --git a/repos/ports/src/virtualbox5/hm.cc b/repos/ports/src/virtualbox5/hm.cc index a189ee3c36..cb826817b0 100644 --- a/repos/ports/src/virtualbox5/hm.cc +++ b/repos/ports/src/virtualbox5/hm.cc @@ -157,6 +157,12 @@ VMMR3_INT_DECL(void) HMR3ResetCpu(PVMCPU pVCpu) pVCpu->hm.s.fActive = false; } +extern "C" void PGMFlushVMMemory(); +VMMR3_INT_DECL(void) HMR3Reset(PVM pVM) +{ + PGMFlushVMMemory(); +} + VMMR3_INT_DECL(void) HMR3PagingModeChanged(PVM pVM, PVMCPU pVCpu, PGMMODE enmShadowMode, PGMMODE enmGuestMode) { } diff --git a/repos/ports/src/virtualbox5/spec/nova/sup.cc b/repos/ports/src/virtualbox5/spec/nova/sup.cc index 93e5c92a61..ad09ed0111 100644 --- a/repos/ports/src/virtualbox5/spec/nova/sup.cc +++ b/repos/ports/src/virtualbox5/spec/nova/sup.cc @@ -48,6 +48,7 @@ extern "C" bool PGMUnmapMemoryGenode(void *, ::size_t); +extern "C" void PGMFlushVMMemory(); /* @@ -757,6 +758,11 @@ bool PGMUnmapMemoryGenode(void * vmm_local, ::size_t size) return true; } +extern "C" void PGMFlushVMMemory() +{ + PGMUnmapMemoryGenode((void *)vm_memory().local_addr(0), MAX_VM_MEMORY); +} + extern "C" int sched_yield(void) {