diff --git a/repos/ports/include/vmm/log.h b/repos/ports/include/vmm/log.h
index 9b3e615db0..7cee9e8216 100644
--- a/repos/ports/include/vmm/log.h
+++ b/repos/ports/include/vmm/log.h
@@ -16,7 +16,6 @@
/* Genode includes */
#include
-#include
#include
/* NOVA includes */
@@ -34,10 +33,10 @@ namespace Vmm {
{
struct Utcb_backup { char buf[Nova::Utcb::size()]; };
- static Lock lock;
+ static Mutex mutex;
static Utcb_backup utcb_backup;
- Lock::Guard guard(lock);
+ Mutex::Guard guard(mutex);
utcb_backup = *(Utcb_backup *)Thread::myself()->utcb();
@@ -51,10 +50,10 @@ namespace Vmm {
{
struct Utcb_backup { char buf[Nova::Utcb::size()]; };
- static Lock lock;
+ static Mutex mutex;
static Utcb_backup utcb_backup;
- Lock::Guard guard(lock);
+ Mutex::Guard guard(mutex);
utcb_backup = *(Utcb_backup *)Thread::myself()->utcb();
@@ -68,10 +67,10 @@ namespace Vmm {
{
struct Utcb_backup { char buf[Nova::Utcb::size()]; };
- static Lock lock;
+ static Mutex mutex;
static Utcb_backup utcb_backup;
- Lock::Guard guard(lock);
+ Mutex::Guard guard(mutex);
utcb_backup = *(Utcb_backup *)Thread::myself()->utcb();
diff --git a/repos/ports/src/virtualbox5/devxhci.cc b/repos/ports/src/virtualbox5/devxhci.cc
index db385bf134..ca685a56a2 100644
--- a/repos/ports/src/virtualbox5/devxhci.cc
+++ b/repos/ports/src/virtualbox5/devxhci.cc
@@ -219,11 +219,11 @@ struct Timer_queue : public Qemu::Timer_queue
Qemu::int64_t get_ns() { return TMTimerGetNano(tm_timer); }
- Genode::Lock _timer_lock;
+ Genode::Mutex _timer_mutex { };
void register_timer(void *qtimer, void (*cb)(void*), void *data) override
{
- Genode::Lock::Guard lock_guard(_timer_lock);
+ Genode::Mutex::Guard guard(_timer_mutex);
if (verbose_timer)
Genode::log("qtimer: ", qtimer, " cb: ", cb, " data: ", data);
@@ -238,7 +238,7 @@ struct Timer_queue : public Qemu::Timer_queue
void delete_timer(void *qtimer) override
{
- Genode::Lock::Guard lock_guard(_timer_lock);
+ Genode::Mutex::Guard guard(_timer_mutex);
if (verbose_timer)
Genode::log("qtimer: ", qtimer);
@@ -256,7 +256,7 @@ struct Timer_queue : public Qemu::Timer_queue
void activate_timer(void *qtimer, long long int expire_abs) override
{
- Genode::Lock::Guard lock_guard(_timer_lock);
+ Genode::Mutex::Guard guard(_timer_mutex);
if (verbose_timer)
Genode::log("qtimer: ", qtimer, " expire: ", expire_abs);
@@ -274,7 +274,7 @@ struct Timer_queue : public Qemu::Timer_queue
void deactivate_timer(void *qtimer) override
{
- Genode::Lock::Guard lock_guard(_timer_lock);
+ Genode::Mutex::Guard guard(_timer_mutex);
if (verbose_timer)
Genode::log("qtimer: ", qtimer);
diff --git a/repos/ports/src/virtualbox5/dummies.cc b/repos/ports/src/virtualbox5/dummies.cc
index 5360009e8e..62278e8daa 100644
--- a/repos/ports/src/virtualbox5/dummies.cc
+++ b/repos/ports/src/virtualbox5/dummies.cc
@@ -12,6 +12,7 @@
*/
#include
+#include
#include /* libc memcpy */
@@ -163,8 +164,7 @@ char *pdmR3FileR3(const char * file, bool)
void RTAssertMsg2Add(const char *pszFormat, ...)
{
Genode::error(__func__, "not implemented");
- Genode::Lock lock(Genode::Lock::LOCKED);
- lock.lock();
+ Genode::sleep_forever();
}
const char * RTBldCfgRevisionStr(void)
diff --git a/repos/ports/src/virtualbox5/generic/sup_vmm.cc b/repos/ports/src/virtualbox5/generic/sup_vmm.cc
index aa0a638dff..36b259da24 100644
--- a/repos/ports/src/virtualbox5/generic/sup_vmm.cc
+++ b/repos/ports/src/virtualbox5/generic/sup_vmm.cc
@@ -17,6 +17,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -728,8 +729,7 @@ uint64_t genode_cpu_hz()
if (cpu_freq == 0) {
Genode::error("could not read out CPU frequency");
- Genode::Lock lock;
- lock.lock();
+ Genode::sleep_forever();
}
}
diff --git a/repos/ports/src/virtualbox5/mm.cc b/repos/ports/src/virtualbox5/mm.cc
index f6d617e2ee..8254fad781 100644
--- a/repos/ports/src/virtualbox5/mm.cc
+++ b/repos/ports/src/virtualbox5/mm.cc
@@ -48,14 +48,14 @@ static struct {
static Libc::Mem_alloc * heap_by_mmtag(MMTAG enmTag)
{
enum { REGION_SIZE = 4096 * 4096 };
- static Genode::Lock memory_init_lock;
+ static Genode::Mutex memory_init_mutex { };
Assert(enmTag < sizeof(memory_regions) / sizeof(memory_regions[0]));
if (memory_regions[enmTag].conn)
return memory_regions[enmTag].heap;
- Genode::Lock::Guard guard(memory_init_lock);
+ Genode::Mutex::Guard guard(memory_init_mutex);
if (memory_regions[enmTag].conn)
return memory_regions[enmTag].heap;
diff --git a/repos/ports/src/virtualbox5/network.cpp b/repos/ports/src/virtualbox5/network.cpp
index f743e64104..81c1c4901a 100644
--- a/repos/ports/src/virtualbox5/network.cpp
+++ b/repos/ports/src/virtualbox5/network.cpp
@@ -81,10 +81,10 @@ typedef struct DRVNIC
* Return lock to synchronize the destruction of the
* PDRVNIC, i.e., the Nic_client.
*/
-static Genode::Lock *destruct_lock()
+static Genode::Blockade &destruct_blockade()
{
- static Genode::Lock lock(Genode::Lock::LOCKED);
- return &lock;
+ static Genode::Blockade blockade { };
+ return blockade;
}
@@ -153,7 +153,7 @@ class Nic_client
_nic.rx_channel()->sigh_packet_avail(Genode::Signal_context_capability());
_nic.rx_channel()->sigh_ready_to_ack(Genode::Signal_context_capability());
- destruct_lock()->unlock();
+ destruct_blockade().wakeup();
}
void _tx_ack(bool block = false)
@@ -451,7 +451,7 @@ static DECLCALLBACK(void) drvNicDestruct(PPDMDRVINS pDrvIns)
Genode::Signal_transmitter(nic_client->dispatcher()).submit();
/* wait until the recv thread exits */
- destruct_lock()->lock();
+ destruct_blockade().block();
if (nic_client)
destroy(vmm_heap(), nic_client);
diff --git a/repos/ports/src/virtualbox5/rt.cc b/repos/ports/src/virtualbox5/rt.cc
index 291053ae31..ba0b9be312 100644
--- a/repos/ports/src/virtualbox5/rt.cc
+++ b/repos/ports/src/virtualbox5/rt.cc
@@ -189,7 +189,12 @@ class Avl_ds : public Genode::Avl_node
Genode::Avl_tree Avl_ds::_runtime_ds;
Genode::Avl_tree Avl_ds::_unused_ds;
-static Genode::Lock lock_ds;
+
+static Genode::Mutex & mutex_ds()
+{
+ static Genode::Mutex mutex { };
+ return mutex;
+}
Genode::addr_t Avl_ds::hit = 0;
Genode::addr_t Avl_ds::hit_coarse = 0;
@@ -209,7 +214,7 @@ static void *alloc_mem(size_t cb, const char *pszTag, bool executable = false)
if (cb % 0x1000)
cb = (cb & ~0xFFFUL) + 0x1000UL;
- Lock::Guard guard(lock_ds);
+ Mutex::Guard guard(mutex_ds());
if (Avl_ds * ds_free = Avl_ds::find_match(cb)) {
ds_free->used(cb);
@@ -281,7 +286,7 @@ void *RTMemPageAllocTag(size_t cb, const char *pszTag)
void RTMemPageFree(void *pv, size_t cb)
{
- Genode::Lock::Guard guard(lock_ds);
+ Genode::Mutex::Guard guard(mutex_ds());
Avl_ds::free_memory(pv, cb);
}
@@ -323,7 +328,7 @@ void * RTMemTCGAlloc(size_t cb)
return alloc_mem(cb, __func__);
{
- Genode::Lock::Guard guard(lock_ds);
+ Genode::Mutex::Guard guard(mutex_ds());
for (Tcg_slab * tcg = list.first(); tcg; tcg = tcg->next()) {
if (tcg->_full)
@@ -341,7 +346,7 @@ void * RTMemTCGAlloc(size_t cb)
Tcg_slab * tcg = new (vmm_heap()) Tcg_slab(alloc_mem(TCG_CACHE, __func__));
if (tcg && tcg->_base) {
{
- Genode::Lock::Guard guard(lock_ds);
+ Genode::Mutex::Guard guard(mutex_ds());
list.insert(tcg);
}
return RTMemTCGAlloc(cb);
@@ -367,7 +372,7 @@ void * RTMemTCGAllocZ(size_t cb)
void RTMemTCGFree(void *pv)
{
- Genode::Lock::Guard guard(lock_ds);
+ Genode::Mutex::Guard guard(mutex_ds());
Genode::addr_t const ptr = reinterpret_cast(pv);
for (Tcg_slab * tcg = list.first(); tcg; tcg = tcg->next()) {
@@ -393,7 +398,7 @@ void * RTMemTCGRealloc(void *ptr, size_t size)
Genode::addr_t max_size = 0;
{
- Genode::Lock::Guard guard(lock_ds);
+ Genode::Mutex::Guard guard(mutex_ds());
max_size = Avl_ds::max_size_at(ptr);
if (!max_size) {
diff --git a/repos/ports/src/virtualbox5/spec/nova/sup.cc b/repos/ports/src/virtualbox5/spec/nova/sup.cc
index 684e12b640..bd49fc9650 100644
--- a/repos/ports/src/virtualbox5/spec/nova/sup.cc
+++ b/repos/ports/src/virtualbox5/spec/nova/sup.cc
@@ -700,8 +700,7 @@ uint64_t genode_cpu_hz()
if (cpu_freq == 0) {
Genode::error("could not read out CPU frequency");
- Genode::Lock lock;
- lock.lock();
+ Genode::sleep_forever();
}
}
diff --git a/repos/ports/src/virtualbox5/spec/nova/vcpu.h b/repos/ports/src/virtualbox5/spec/nova/vcpu.h
index f45a5c3fd7..eee8c2d4a3 100644
--- a/repos/ports/src/virtualbox5/spec/nova/vcpu.h
+++ b/repos/ports/src/virtualbox5/spec/nova/vcpu.h
@@ -17,6 +17,7 @@
/* Genode includes */
#include
+#include
#include
#include
#include
@@ -858,8 +859,7 @@ class Vcpu_handler : public Vmm::Vcpu_dispatcher,
if (ec_ctrl(EC_RECALL, _ec_sel) != NOVA_OK) {
Genode::error("recall failed");
- Genode::Lock lock(Genode::Lock::LOCKED);
- lock.lock();
+ Genode::sleep_forever();
}
#if 0
diff --git a/repos/ports/src/virtualbox5/thread.cc b/repos/ports/src/virtualbox5/thread.cc
index 02eb9131e0..0cfee3c1f8 100644
--- a/repos/ports/src/virtualbox5/thread.cc
+++ b/repos/ports/src/virtualbox5/thread.cc
@@ -14,6 +14,7 @@
/* Genode */
#include
#include
+#include
#include
#include
@@ -60,11 +61,11 @@ static Genode::Cpu_connection * cpu_connection(RTTHREADTYPE type)
using namespace Genode;
static Cpu_connection * con[RTTHREADTYPE_END - 1];
- static Lock lock;
+ static Mutex mutex { };
Assert(type && type < RTTHREADTYPE_END);
- Lock::Guard guard(lock);
+ Mutex::Guard guard(mutex);
if (con[type - 1])
return con[type - 1];
@@ -168,8 +169,7 @@ extern "C" int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
}
Genode::error("could not create vbox pthread - halt");
- Genode::Lock lock(Genode::Lock::LOCKED);
- lock.lock();
+ Genode::sleep_forever();
return EAGAIN;
}
diff --git a/repos/ports/src/virtualbox5/vcpu.h b/repos/ports/src/virtualbox5/vcpu.h
index 2dfee83faf..37fc6bb350 100644
--- a/repos/ports/src/virtualbox5/vcpu.h
+++ b/repos/ports/src/virtualbox5/vcpu.h
@@ -66,12 +66,12 @@ class Vcpu_handler : public Genode::List::Element
protected:
Genode::Entrypoint _ep;
- Genode::Lock _lock_emt;
+ Genode::Blockade _blockade_emt { };
Genode::Semaphore _sem_handler;
Genode::Vm_state *_state { nullptr };
/* halt / wakeup handling with timeout support */
- Genode::Lock _r0_block_guard;
+ Genode::Mutex _r0_mutex;
Genode::Semaphore _r0_block;
Genode::uint64_t _r0_wakeup_abs { 0 };
@@ -152,7 +152,7 @@ class Vcpu_handler : public Genode::List::Element
_sem_handler.up();
/* wait for next exit */
- _lock_emt.lock();
+ _blockade_emt.block();
/* next time run - recall() may change this */
_next_state = RUN;
@@ -173,7 +173,7 @@ class Vcpu_handler : public Genode::List::Element
if (npt_ept_unmap) {
Genode::error("NPT/EPT unmap not supported - stop");
while (true) {
- _lock_emt.lock();
+ _blockade_emt.block();
}
}
@@ -204,7 +204,7 @@ class Vcpu_handler : public Genode::List::Element
_vm_state = PAUSED;
- _lock_emt.unlock();
+ _blockade_emt.wakeup();
}
bool _recall_handler()
@@ -479,7 +479,7 @@ class Vcpu_handler : public Genode::List::Element
_vm_exits ++;
_vm_state = IRQ_WIN;
- _lock_emt.unlock();
+ _blockade_emt.wakeup();
}
void _npt_ept()
@@ -491,7 +491,7 @@ class Vcpu_handler : public Genode::List::Element
_vm_exits ++;
_vm_state = NPT_EPT;
- _lock_emt.unlock();
+ _blockade_emt.wakeup();
}
void _irq_window_pthread()
@@ -725,7 +725,7 @@ class Vcpu_handler : public Genode::List::Element
void check_time()
{
{
- Genode::Lock_guard lock(_r0_block_guard);
+ Genode::Mutex::Guard guard(_r0_mutex);
const uint64_t u64NowGip = RTTimeNanoTS();
if (!_r0_wakeup_abs || _r0_wakeup_abs >= u64NowGip)
@@ -738,7 +738,7 @@ class Vcpu_handler : public Genode::List::Element
void halt(Genode::uint64_t rttime_abs)
{
{
- Genode::Lock_guard lock(_r0_block_guard);
+ Genode::Mutex::Guard guard(_r0_mutex);
_r0_wakeup_abs = rttime_abs;
}
@@ -748,7 +748,7 @@ class Vcpu_handler : public Genode::List::Element
void wake_up()
{
{
- Genode::Lock_guard lock(_r0_block_guard);
+ Genode::Mutex::Guard guard(_r0_mutex);
_r0_wakeup_abs = 0;
}
diff --git a/repos/ports/src/virtualbox5/vcpu_svm.h b/repos/ports/src/virtualbox5/vcpu_svm.h
index 4d5f66c838..3a93f4f7c5 100644
--- a/repos/ports/src/virtualbox5/vcpu_svm.h
+++ b/repos/ports/src/virtualbox5/vcpu_svm.h
@@ -94,7 +94,7 @@ class Vcpu_handler_svm : public Vcpu_handler
break;
case VCPU_STARTUP:
_svm_startup();
- _lock_emt.unlock();
+ _blockade_emt.wakeup();
/* pause - no resume */
break;
default:
@@ -170,13 +170,10 @@ class Vcpu_handler_svm : public Vcpu_handler
{
_state = _state_ds.local_addr();
- /* sync with initial startup exception */
- _lock_emt.lock();
-
_vm_session.run(_vcpu);
/* sync with initial startup exception */
- _lock_emt.lock();
+ _blockade_emt.block();
}
bool hw_save_state(Genode::Vm_state *state, VM * pVM, PVMCPU pVCpu) {
diff --git a/repos/ports/src/virtualbox5/vcpu_vmx.h b/repos/ports/src/virtualbox5/vcpu_vmx.h
index fe686f04ba..327a56d8e5 100644
--- a/repos/ports/src/virtualbox5/vcpu_vmx.h
+++ b/repos/ports/src/virtualbox5/vcpu_vmx.h
@@ -156,7 +156,7 @@ class Vcpu_handler_vmx : public Vcpu_handler
break;
case VCPU_STARTUP:
_vmx_startup();
- _lock_emt.unlock();
+ _blockade_emt.wakeup();
/* pause - no resume */
break;
default:
@@ -245,13 +245,10 @@ class Vcpu_handler_vmx : public Vcpu_handler
{
_state = _state_ds.local_addr();
- /* sync with initial startup exception */
- _lock_emt.lock();
-
_vm_session.run(_vcpu);
/* sync with initial startup exception */
- _lock_emt.lock();
+ _blockade_emt.block();
}
bool hw_save_state(Genode::Vm_state *state, VM * pVM, PVMCPU pVCpu) {