fixup "base: split Pd_account from Pd_session" (test/rm_fault, test/resource_yield, cpu_balancer build, sequence, test/fault_detection, launchpad)

This commit is contained in:
Norman Feske
2024-12-19 11:11:30 +01:00
parent e72915c13e
commit 3531bfc4c7
6 changed files with 39 additions and 29 deletions

View File

@@ -33,6 +33,11 @@ namespace Genode {
struct Genode::Pd_account : Interface, Noncopyable struct Genode::Pd_account : Interface, Noncopyable
{ {
/**
* \noapi
*/
static const char *service_name() { return "PD"; }
enum class Transfer_result { OK, EXCEEDED, INVALID }; enum class Transfer_result { OK, EXCEEDED, INVALID };
virtual Transfer_result transfer_quota(Capability<Pd_account>, Cap_quota) = 0; virtual Transfer_result transfer_quota(Capability<Pd_account>, Cap_quota) = 0;
@@ -48,11 +53,6 @@ struct Genode::Pd_account : Interface, Noncopyable
struct Genode::Pd_session : Session, Pd_account, Ram_allocator struct Genode::Pd_session : Session, Pd_account, Ram_allocator
{ {
/**
* \noapi
*/
static const char *service_name() { return "PD"; }
/* /*
* A PD session consumes a dataspace capability for the session-object * A PD session consumes a dataspace capability for the session-object
* allocation, a capability for the 'Native_pd' RPC interface, its * allocation, a capability for the 'Native_pd' RPC interface, its

View File

@@ -215,8 +215,10 @@ class Test_child_policy : public Child_policy
Binary_name binary_name() const override { return "test-rm_fault"; } Binary_name binary_name() const override { return "test-rm_fault"; }
Pd_session &ref_pd() override { return _env.pd(); } Ram_allocator &session_md_ram() override { return _env.pd(); }
Pd_session_capability ref_pd_cap() const override { return _env.pd_session_cap(); }
Pd_account &ref_account() override { return _env.pd(); }
Capability<Pd_account> ref_account_cap() const override { return _env.pd_session_cap(); }
void init(Pd_session &session, Pd_session_capability cap) override void init(Pd_session &session, Pd_session_capability cap) override
{ {

View File

@@ -135,8 +135,10 @@ class Launchpad_child : public Genode::Child_policy,
Binary_name binary_name() const override { return _elf_name; } Binary_name binary_name() const override { return _elf_name; }
Genode::Pd_session &ref_pd() override { return _env.pd(); } Genode::Ram_allocator &session_md_ram() override { return _env.pd(); }
Genode::Pd_session_capability ref_pd_cap() const override { return _env.pd_session_cap(); }
Genode::Pd_account &ref_account() override { return _env.pd(); }
Genode::Capability<Genode::Pd_account> ref_account_cap() const override { return _env.pd_session_cap(); }
void init(Genode::Pd_session &session, void init(Genode::Pd_session &session,
Genode::Pd_session_capability cap) override Genode::Pd_session_capability cap) override

View File

@@ -135,12 +135,14 @@ struct Sequence::Child : Genode::Child_policy
return route(service); return route(service);
} }
Ram_allocator &session_md_ram() override { return _env.pd(); }
/** /**
* Only a single child is managed at a time so * Only a single child is managed at a time so
* no additional PD management is required. * no additional PD management is required.
*/ */
Pd_session &ref_pd() override { return _env.pd(); } Pd_account &ref_account() override { return _env.pd(); }
Pd_session_capability ref_pd_cap() const override { return _env.pd_session_cap(); } Capability<Pd_account> ref_account_cap() const override { return _env.pd_session_cap(); }
/** /**
* Always queue a reload signal and store the exit value. The * Always queue a reload signal and store the exit value. The
@@ -175,9 +177,9 @@ struct Sequence::Child : Genode::Child_policy
if (ram.value) { if (ram.value) {
Ram_quota avail = _env.pd().avail_ram(); Ram_quota avail = _env.pd().avail_ram();
if (avail.value > ram.value) { if (avail.value > ram.value) {
ref_pd().transfer_quota(pd_cap, ram); ref_account().transfer_quota(pd_cap, ram);
} else { } else {
ref_pd().transfer_quota(pd_cap, Ram_quota{avail.value >> 1}); ref_account().transfer_quota(pd_cap, Ram_quota{avail.value >> 1});
_env.parent().resource_request(args); _env.parent().resource_request(args);
} }
} }
@@ -185,9 +187,9 @@ struct Sequence::Child : Genode::Child_policy
if (caps.value) { if (caps.value) {
Cap_quota avail = _env.pd().avail_caps(); Cap_quota avail = _env.pd().avail_caps();
if (avail.value > caps.value) { if (avail.value > caps.value) {
ref_pd().transfer_quota(pd_cap, caps); ref_account().transfer_quota(pd_cap, caps);
} else { } else {
ref_pd().transfer_quota(pd_cap, Cap_quota{avail.value >> 1}); ref_account().transfer_quota(pd_cap, Cap_quota{avail.value >> 1});
_env.parent().resource_request(args); _env.parent().resource_request(args);
} }
} }
@@ -201,9 +203,9 @@ struct Sequence::Child : Genode::Child_policy
*/ */
void init(Pd_session &pd, Pd_session_capability pd_cap) override void init(Pd_session &pd, Pd_session_capability pd_cap) override
{ {
pd.ref_account(ref_pd_cap()); pd.ref_account(ref_account_cap());
ref_pd().transfer_quota(pd_cap, Cap_quota{_env.pd().avail_caps().value >> 1}); ref_account().transfer_quota(pd_cap, Cap_quota{_env.pd().avail_caps().value >> 1});
ref_pd().transfer_quota(pd_cap, Ram_quota{_env.pd().avail_ram().value >> 1}); ref_account().transfer_quota(pd_cap, Ram_quota{_env.pd().avail_ram().value >> 1});
} }
Id_space<Parent::Server> &server_id_space() override { return _server_ids; } Id_space<Parent::Server> &server_id_space() override { return _server_ids; }

View File

@@ -99,8 +99,10 @@ class Test_child : public Genode::Child_policy
Binary_name binary_name() const override { return _binary_name; } Binary_name binary_name() const override { return _binary_name; }
Pd_session &ref_pd() override { return _env.pd(); } Ram_allocator &session_md_ram() override { return _env.pd(); }
Pd_session_capability ref_pd_cap() const override { return _env.pd_session_cap(); }
Pd_account &ref_account() override { return _env.pd(); }
Capability<Pd_account> ref_account_cap() const override { return _env.pd_session_cap(); }
void init(Cpu_session &cpu, Cpu_session_capability) override void init(Cpu_session &cpu, Cpu_session_capability) override
{ {
@@ -110,9 +112,9 @@ class Test_child : public Genode::Child_policy
void init(Pd_session &pd, Pd_session_capability pd_cap) override void init(Pd_session &pd, Pd_session_capability pd_cap) override
{ {
pd.ref_account(ref_pd_cap()); pd.ref_account(ref_account_cap());
ref_pd().transfer_quota(pd_cap, _cap_quota); ref_account().transfer_quota(pd_cap, _cap_quota);
ref_pd().transfer_quota(pd_cap, _ram_quota); ref_account().transfer_quota(pd_cap, _ram_quota);
/* register handler for unresolvable page faults */ /* register handler for unresolvable page faults */
Region_map_client address_space(pd.address_space()); Region_map_client address_space(pd.address_space());

View File

@@ -304,7 +304,7 @@ class Test::Parent
} _config_producer { }; } _config_producer { };
Dynamic_rom_session _config_session { _env.ep().rpc_ep(), Dynamic_rom_session _config_session { _env.ep().rpc_ep(),
ref_pd(), _env.rm(), _env.pd(), _env.rm(),
_config_producer }; _config_producer };
using Config_service = Genode::Local_service<Dynamic_rom_session>; using Config_service = Genode::Local_service<Dynamic_rom_session>;
@@ -323,14 +323,16 @@ class Test::Parent
Binary_name binary_name() const override { return _binary_name; } Binary_name binary_name() const override { return _binary_name; }
Pd_session &ref_pd() override { return _env.pd(); } Ram_allocator &session_md_ram() override { return _env.pd(); }
Pd_session_capability ref_pd_cap() const override { return _env.pd_session_cap(); }
Pd_account &ref_account() override { return _env.pd(); }
Capability<Pd_account> ref_account_cap() const override { return _env.pd_session_cap(); }
void init(Pd_session &pd, Pd_session_capability pd_cap) override void init(Pd_session &pd, Pd_session_capability pd_cap) override
{ {
pd.ref_account(ref_pd_cap()); pd.ref_account(ref_account_cap());
ref_pd().transfer_quota(pd_cap, _cap_quota); ref_account().transfer_quota(pd_cap, _cap_quota);
ref_pd().transfer_quota(pd_cap, _ram_quota); ref_account().transfer_quota(pd_cap, _ram_quota);
} }
Route resolve_session_request(Service::Name const &service_name, Route resolve_session_request(Service::Name const &service_name,