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
|
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
|
||||||
|
|||||||
@@ -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
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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; }
|
||||||
|
|||||||
@@ -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());
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user