mirror of
https://github.com/mmueller41/genode.git
synced 2026-01-21 12:32:56 +01:00
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:
@@ -33,6 +33,11 @@ namespace Genode {
|
||||
|
||||
struct Genode::Pd_account : Interface, Noncopyable
|
||||
{
|
||||
/**
|
||||
* \noapi
|
||||
*/
|
||||
static const char *service_name() { return "PD"; }
|
||||
|
||||
enum class Transfer_result { OK, EXCEEDED, INVALID };
|
||||
|
||||
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
|
||||
{
|
||||
/**
|
||||
* \noapi
|
||||
*/
|
||||
static const char *service_name() { return "PD"; }
|
||||
|
||||
/*
|
||||
* A PD session consumes a dataspace capability for the session-object
|
||||
* allocation, a capability for the 'Native_pd' RPC interface, its
|
||||
|
||||
@@ -215,8 +215,10 @@ class Test_child_policy : public Child_policy
|
||||
|
||||
Binary_name binary_name() const override { return "test-rm_fault"; }
|
||||
|
||||
Pd_session &ref_pd() override { return _env.pd(); }
|
||||
Pd_session_capability ref_pd_cap() const override { return _env.pd_session_cap(); }
|
||||
Ram_allocator &session_md_ram() override { return _env.pd(); }
|
||||
|
||||
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
|
||||
{
|
||||
|
||||
@@ -135,8 +135,10 @@ class Launchpad_child : public Genode::Child_policy,
|
||||
|
||||
Binary_name binary_name() const override { return _elf_name; }
|
||||
|
||||
Genode::Pd_session &ref_pd() override { return _env.pd(); }
|
||||
Genode::Pd_session_capability ref_pd_cap() const override { return _env.pd_session_cap(); }
|
||||
Genode::Ram_allocator &session_md_ram() override { return _env.pd(); }
|
||||
|
||||
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,
|
||||
Genode::Pd_session_capability cap) override
|
||||
|
||||
@@ -135,12 +135,14 @@ struct Sequence::Child : Genode::Child_policy
|
||||
return route(service);
|
||||
}
|
||||
|
||||
Ram_allocator &session_md_ram() override { return _env.pd(); }
|
||||
|
||||
/**
|
||||
* Only a single child is managed at a time so
|
||||
* no additional PD management is required.
|
||||
*/
|
||||
Pd_session &ref_pd() 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(); }
|
||||
|
||||
/**
|
||||
* Always queue a reload signal and store the exit value. The
|
||||
@@ -175,9 +177,9 @@ struct Sequence::Child : Genode::Child_policy
|
||||
if (ram.value) {
|
||||
Ram_quota avail = _env.pd().avail_ram();
|
||||
if (avail.value > ram.value) {
|
||||
ref_pd().transfer_quota(pd_cap, ram);
|
||||
ref_account().transfer_quota(pd_cap, ram);
|
||||
} 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);
|
||||
}
|
||||
}
|
||||
@@ -185,9 +187,9 @@ struct Sequence::Child : Genode::Child_policy
|
||||
if (caps.value) {
|
||||
Cap_quota avail = _env.pd().avail_caps();
|
||||
if (avail.value > caps.value) {
|
||||
ref_pd().transfer_quota(pd_cap, caps);
|
||||
ref_account().transfer_quota(pd_cap, caps);
|
||||
} 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);
|
||||
}
|
||||
}
|
||||
@@ -201,9 +203,9 @@ struct Sequence::Child : Genode::Child_policy
|
||||
*/
|
||||
void init(Pd_session &pd, Pd_session_capability pd_cap) override
|
||||
{
|
||||
pd.ref_account(ref_pd_cap());
|
||||
ref_pd().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});
|
||||
pd.ref_account(ref_account_cap());
|
||||
ref_account().transfer_quota(pd_cap, Cap_quota{_env.pd().avail_caps().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; }
|
||||
|
||||
@@ -99,8 +99,10 @@ class Test_child : public Genode::Child_policy
|
||||
|
||||
Binary_name binary_name() const override { return _binary_name; }
|
||||
|
||||
Pd_session &ref_pd() override { return _env.pd(); }
|
||||
Pd_session_capability ref_pd_cap() const override { return _env.pd_session_cap(); }
|
||||
Ram_allocator &session_md_ram() override { return _env.pd(); }
|
||||
|
||||
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
|
||||
{
|
||||
@@ -110,9 +112,9 @@ class Test_child : public Genode::Child_policy
|
||||
|
||||
void init(Pd_session &pd, Pd_session_capability pd_cap) override
|
||||
{
|
||||
pd.ref_account(ref_pd_cap());
|
||||
ref_pd().transfer_quota(pd_cap, _cap_quota);
|
||||
ref_pd().transfer_quota(pd_cap, _ram_quota);
|
||||
pd.ref_account(ref_account_cap());
|
||||
ref_account().transfer_quota(pd_cap, _cap_quota);
|
||||
ref_account().transfer_quota(pd_cap, _ram_quota);
|
||||
|
||||
/* register handler for unresolvable page faults */
|
||||
Region_map_client address_space(pd.address_space());
|
||||
|
||||
@@ -304,7 +304,7 @@ class Test::Parent
|
||||
} _config_producer { };
|
||||
|
||||
Dynamic_rom_session _config_session { _env.ep().rpc_ep(),
|
||||
ref_pd(), _env.rm(),
|
||||
_env.pd(), _env.rm(),
|
||||
_config_producer };
|
||||
|
||||
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; }
|
||||
|
||||
Pd_session &ref_pd() override { return _env.pd(); }
|
||||
Pd_session_capability ref_pd_cap() const override { return _env.pd_session_cap(); }
|
||||
Ram_allocator &session_md_ram() override { return _env.pd(); }
|
||||
|
||||
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
|
||||
{
|
||||
pd.ref_account(ref_pd_cap());
|
||||
ref_pd().transfer_quota(pd_cap, _cap_quota);
|
||||
ref_pd().transfer_quota(pd_cap, _ram_quota);
|
||||
pd.ref_account(ref_account_cap());
|
||||
ref_account().transfer_quota(pd_cap, _cap_quota);
|
||||
ref_account().transfer_quota(pd_cap, _ram_quota);
|
||||
}
|
||||
|
||||
Route resolve_session_request(Service::Name const &service_name,
|
||||
|
||||
Reference in New Issue
Block a user