diff --git a/repos/base-linux/src/core/platform.cc b/repos/base-linux/src/core/platform.cc index d32695bfc..cd488eb78 100644 --- a/repos/base-linux/src/core/platform.cc +++ b/repos/base-linux/src/core/platform.cc @@ -187,15 +187,6 @@ size_t Region_map_mmap::_dataspace_size(Capability ds_cap) if (!ds_cap.valid()) return Local_capability::deref(ds_cap)->size(); - /* use RPC if called from a different thread */ - if (!core_env()->entrypoint()->is_myself()) { - /* release Region_map_mmap::_lock during RPC */ - _lock.unlock(); - Genode::size_t size = Dataspace_client(ds_cap).size(); - _lock.lock(); - return size; - } - /* use local function call if called from the entrypoint */ return core_env()->entrypoint()->apply(ds_cap, [] (Dataspace *ds) { return ds ? ds->size() : 0; }); @@ -204,15 +195,6 @@ size_t Region_map_mmap::_dataspace_size(Capability ds_cap) int Region_map_mmap::_dataspace_fd(Capability ds_cap) { - if (!core_env()->entrypoint()->is_myself()) { - /* release Region_map_mmap::_lock during RPC */ - _lock.unlock(); - Untyped_capability fd_cap = Linux_dataspace_client(ds_cap).fd(); - int socket = Capability_space::ipc_cap_data(fd_cap).dst.socket; - _lock.lock(); - return socket; - } - Capability lx_ds_cap = static_cap_cast(ds_cap); /* @@ -231,14 +213,6 @@ int Region_map_mmap::_dataspace_fd(Capability ds_cap) bool Region_map_mmap::_dataspace_writable(Dataspace_capability ds_cap) { - if (!core_env()->entrypoint()->is_myself()) { - /* release Region_map_mmap::_lock during RPC */ - _lock.unlock(); - bool writable = Dataspace_client(ds_cap).writable(); - _lock.lock(); - return writable; - } - return core_env()->entrypoint()->apply(ds_cap, [] (Dataspace *ds) { return ds ? ds->writable() : false; }); } diff --git a/repos/base-linux/src/include/base/internal/region_map_mmap.h b/repos/base-linux/src/include/base/internal/region_map_mmap.h index 29da3c4b3..37c0f79f8 100644 --- a/repos/base-linux/src/include/base/internal/region_map_mmap.h +++ b/repos/base-linux/src/include/base/internal/region_map_mmap.h @@ -35,7 +35,6 @@ class Genode::Region_map_mmap : public Region_map, public Dataspace { private: - Lock _lock; /* protect '_rmap' */ Region_registry _rmap; bool const _sub_rm; /* false if region map is root */ size_t const _size; diff --git a/repos/base-linux/src/lib/base/region_map_mmap.cc b/repos/base-linux/src/lib/base/region_map_mmap.cc index 6af7d6520..915dde73d 100644 --- a/repos/base-linux/src/lib/base/region_map_mmap.cc +++ b/repos/base-linux/src/lib/base/region_map_mmap.cc @@ -60,6 +60,16 @@ static bool is_sub_rm_session(Dataspace_capability ds) } +/** + * Lock for protecting mmap/unmap sequences and region-map meta data + */ +static Lock &lock() +{ + static Lock lock; + return lock; +} + + addr_t Region_map_mmap::_reserve_local(bool use_local_addr, addr_t local_addr, Genode::size_t size) @@ -164,7 +174,7 @@ Region_map::Local_addr Region_map_mmap::attach(Dataspace_capability ds, Region_map::Local_addr local_addr, bool executable) { - Lock::Guard lock_guard(_lock); + Lock::Guard lock_guard(lock()); /* only support attach_at for sub RM sessions */ if (_sub_rm && !use_local_addr) { @@ -306,7 +316,7 @@ Region_map::Local_addr Region_map_mmap::attach(Dataspace_capability ds, void Region_map_mmap::detach(Region_map::Local_addr local_addr) { - Lock::Guard lock_guard(_lock); + Lock::Guard lock_guard(lock()); /* * Cases diff --git a/repos/base/src/lib/base/thread.cc b/repos/base/src/lib/base/thread.cc index cfa662761..189f3ef1e 100644 --- a/repos/base/src/lib/base/thread.cc +++ b/repos/base/src/lib/base/thread.cc @@ -77,14 +77,6 @@ void Stack::size(size_t const size) Stack * Thread::_alloc_stack(size_t stack_size, char const *name, bool main_thread) { - /* - * Synchronize stack list when creating new threads from multiple threads - * - * XXX: remove interim fix - */ - static Lock alloc_lock; - Lock::Guard _lock_guard(alloc_lock); - /* allocate stack */ Stack *stack = Stack_allocator::stack_allocator().alloc(this, main_thread); if (!stack)