From 7a127d54028a6c751f604db487fcea80ec45c5ed Mon Sep 17 00:00:00 2001 From: Michael Mueller Date: Tue, 10 Oct 2023 16:39:59 +0200 Subject: [PATCH] Moved code into a header file. --- repos/os/src/hoitaja/suoritin/component.cc | 131 --------------------- 1 file changed, 131 deletions(-) delete mode 100644 repos/os/src/hoitaja/suoritin/component.cc diff --git a/repos/os/src/hoitaja/suoritin/component.cc b/repos/os/src/hoitaja/suoritin/component.cc deleted file mode 100644 index 0c2096776d..0000000000 --- a/repos/os/src/hoitaja/suoritin/component.cc +++ /dev/null @@ -1,131 +0,0 @@ -/* Genode includes */ -#include -#include -#include -#include -#include - -#include -#include -#include - - - -namespace Tukija { - namespace Suoritin { - class Session_component; - template class Allocator; - } -} - -template -class Tukija::Suoritin::Allocator : public Genode::Allocator -{ - using size_t = Genode::size_t; - -private: - Genode::Region_map::Local_addr _dataspace{}; - size_t _interface_size; - Genode::Region_map::Local_addr _pos {_dataspace}; - -public: - Allocator(Genode::Env &env, Genode::Ram_dataspace_capability *_interface_cap, size_t interface_size) : _interface_size(interface_size) - { - *_interface_cap = env.ram().alloc(interface_size); - _dataspace = static_cast(env.rm().attach(*_interface_cap)); - } - - Alloc_result try_alloc(size_t) override - { - T *pos = _pos; - if (pos >= static_cast(_dataspace) + _interface_size) - return Alloc_result(Genode::Ram_allocator::Alloc_error::OUT_OF_RAM); - - pos++; - return Alloc_result(static_cast(pos)); - } - - void free(void *, size_t) override - { } - - size_t overhead(size_t) const override { return 0; } - - bool need_size_for_free() const override { return false; } - - T *interface() { return _dataspace; } -}; - -class Tukija::Suoritin::Session_component : public Genode::Session_object -{ - private: - Genode::Affinity _affinity; - Genode::Env &_env; - Genode::Ram_dataspace_capability _workers_interface_cap{}; - Genode::Ram_dataspace_capability _channels_interface_cap{}; - - Allocator> _worker_allocator; - Allocator> _channel_allocator; - - unsigned long no_channels{0}; - unsigned long no_workers{0}; - - template - void construct(FUNC const &fn, Allocator> &alloc, Genode::Registry> ®istry) { - T* object = nullptr; - - try { - try { - object = new (alloc) Genode::Registered(registry); - fn(object); - } catch (Genode::Allocator::Out_of_memory) { - Genode::error("Out of RAM on registering worker."); - throw; - } - } catch (...) { - if (object) - destroy(alloc, object); - Genode::error("Exception caught registering worker"); - throw; - } - } - - - public: - Session_component(Genode::Rpc_entrypoint &session_ep, - Genode::Session::Resources const &resources, - Genode::Session::Label const &label, - Genode::Session::Diag const &diag, - Genode::Env &env, - Genode::Affinity &affinity) - : Session_object(session_ep, resources, label, diag), _affinity(affinity.space().total() ? affinity : Genode::Affinity(Genode::Affinity::Space(1,1), Genode::Affinity::Location(0,0,1,1))), - _env(env), _worker_allocator(env, &_workers_interface_cap, _affinity.space().total()*sizeof(Genode::Registered)), - _channel_allocator(env, &_channels_interface_cap, _affinity.space().total()*sizeof(Genode::Registered)) - { - } - - void create_channel() override - { - try { - construct([&](Channel *) {}, _channel_allocator, _channels); - } - catch (...) - { - Genode::error("Faild to create channel"); - } - } - void register_worker(Genode::Thread::Name const &name, Genode::Thread_capability cap) override { - try { - construct([&](Worker *worker) - { worker->_cap = cap; - worker->_name = name; }, _worker_allocator, _workers); - } - catch (...) - { - Genode::error("Failed to register worker"); - } - } - - Capability interface_cap() override { - return Capability{_workers_interface_cap, _channels_interface_cap}; - } -}; \ No newline at end of file