hoitaja: Upon starting a new child component, create a cell for it at the hypervisor.

This commit is contained in:
Michael Mueller
2024-01-30 18:08:17 +01:00
parent 90fd2368d0
commit 79bdea2977
2 changed files with 20 additions and 5 deletions

View File

@@ -576,7 +576,7 @@ class Sandbox::Child : Child_policy, Routed_service::Wakeup
Cap_quota cap_quota() const { return _resources.assigned_cap_quota; }
Cpu_quota cpu_quota() const { return _effective_cpu_quota; }
void try_start()
virtual void try_start()
{
if (_state == State::INITIAL) {
_child.initiate_env_pd_session();

View File

@@ -55,8 +55,7 @@ class Hoitaja::Cell : public ::Sandbox::Child
{
_priority = ::Sandbox::priority_from_xml(start_node, prio_levels);
_priority = (_priority == 0) ? 1 : _priority;
env.pd().create_cell(_priority, location);
Genode::log("Creating new cell at Hoitaja <", name(), ">");
}
virtual ~Cell() { };
@@ -75,6 +74,12 @@ class Hoitaja::Cell : public ::Sandbox::Child
}
}
void create_at_tukija()
{
Genode::log("Creating new cell <", name(), "> at Tukija at ", _resources.affinity.location());
_child.pd().create_cell(_priority, _resources.affinity.location());
}
void exit(int exit_value) override
{
::Sandbox::Child::exit(exit_value);
@@ -82,10 +87,20 @@ class Hoitaja::Cell : public ::Sandbox::Child
}
void shrink_cores(Genode::Affinity::Location &cores) {
_env.pd().shrink_cell(cores);
if (_child.active())
_child.pd().update_cell(cores);
}
void grow_cores(Genode::Affinity::Location &cores) {
_env.pd().grow_cell(cores);
if (_child.active())
_child.pd().update_cell(cores);
}
void try_start() override
{
::Sandbox::Child::try_start();
while (!(_child.active()))
__builtin_ia32_pause();
create_at_tukija();
}
};