base: use 'Quota_transfer::Account' for 'Service'

This patch makes use of the new 'Quota_transfer::Account' by the service
types in base/service.h and uses 'Quota_transfer' objects in
base/child.cc and init/server.cc.

Furthermore, it decouples the notion of an 'Async_service' from
'Child_service'. Init's 'Routed_service' is no longer a 'Child_service'
but is based on the new 'Async_service' instead.

With this patch in place, quota transfers do no longer implicitly use
'Ram_session_client' objects. So transfers can in principle originate
from component-local 'Ram_session_component' objects, e.g., as used by
noux. Therefore, this patch removes a strumbling block for turning noux
into a single threaded component in the future.

Issue #2398
This commit is contained in:
Norman Feske
2017-05-08 16:49:00 +02:00
committed by Christian Helmuth
parent 5c43074bc6
commit 3670f7735d
19 changed files with 281 additions and 233 deletions

View File

@ -196,10 +196,12 @@ class Launcher::Fading_dialog : private Input_event_handler
_fader_slave_ep(&env.pd(), _fader_slave_ep_stack_size, "nit_fader"),
_nitpicker_connection(env, "menu"),
_nitpicker_session(env, _nitpicker_connection, env.ep(), _fader_slave_ep, *this),
_nit_fader_slave(_fader_slave_ep, env.rm(), env.ram_session_cap(),
_nit_fader_slave(_fader_slave_ep, env.rm(),
env.ram(), env.ram_session_cap(),
_nitpicker_service),
_nit_fader_connection(env.rm(), _nit_fader_slave.policy(), Slave::Args("label=menu")),
_menu_view_slave(env.pd(), env.rm(), env.ram_session_cap(),
_menu_view_slave(env.pd(), env.rm(),
env.ram(), env.ram_session_cap(),
_nit_fader_connection,
_dialog_rom, _hover_report, initial_position)
{

View File

@ -43,7 +43,8 @@ struct Launcher::Main
"</config>";
Report_rom_slave _report_rom_slave {
_env.pd(), _env.rm(), _env.ram_session_cap(), _report_rom_config };
_env.pd(), _env.rm(), _env.ram(), _env.ram_session_cap(),
_report_rom_config };
/**
* Nitpicker session used to perform session-control operations on the

View File

@ -80,13 +80,15 @@ class Launcher::Menu_view_slave
Policy(Genode::Rpc_entrypoint &ep,
Genode::Region_map &rm,
Genode::Ram_session_capability ram,
Genode::Ram_session &ref_ram,
Genode::Ram_session_capability ref_ram_cap,
Capability<Nitpicker::Session> nitpicker_session,
Capability<Rom_session> dialog_rom_session,
Capability<Report::Session> hover_report_session,
Position position)
:
Genode::Slave::Policy(_name(), _name(), *this, ep, rm, ram, _quota()),
Genode::Slave::Policy(_name(), _name(), *this, ep, rm,
ref_ram, ref_ram_cap, _quota()),
_nitpicker(rm, nitpicker_session),
_dialog_rom(dialog_rom_session),
_hover_report(hover_report_session),
@ -127,14 +129,16 @@ class Launcher::Menu_view_slave
*/
Menu_view_slave(Genode::Pd_session &pd,
Genode::Region_map &rm,
Genode::Ram_session_capability ram,
Genode::Ram_session &ref_ram,
Genode::Ram_session_capability ref_ram_cap,
Capability<Nitpicker::Session> nitpicker_session,
Capability<Rom_session> dialog_rom_session,
Capability<Report::Session> hover_report_session,
Position initial_position)
:
_ep(&pd, _ep_stack_size, "nit_fader"),
_policy(_ep, rm, ram, nitpicker_session, dialog_rom_session,
_policy(_ep, rm, ref_ram, ref_ram_cap,
nitpicker_session, dialog_rom_session,
hover_report_session, initial_position),
_child(rm, _ep, _policy)
{ }

View File

@ -52,10 +52,12 @@ class Launcher::Nit_fader_slave
Policy(Rpc_entrypoint &ep,
Region_map &rm,
Ram_session_capability ram,
Ram_session &ref_ram,
Ram_session_capability ref_ram_cap,
Genode::Service &nitpicker_service)
:
Genode::Slave::Policy(_name(), _name(), *this, ep, rm, ram, _quota()),
Genode::Slave::Policy(_name(), _name(), *this, ep, rm,
ref_ram, ref_ram_cap, _quota()),
_nitpicker_service(nitpicker_service)
{
visible(false);
@ -87,16 +89,17 @@ class Launcher::Nit_fader_slave
/**
* Constructor
*
* \param ep entrypoint used for nitpicker child thread
* \param ram RAM session used to allocate the configuration
* dataspace
* \param ep entrypoint used for nitpicker child thread
* \param ref_ram RAM session used to allocate the configuration
* dataspace and child memory
*/
Nit_fader_slave(Rpc_entrypoint &ep,
Genode::Region_map &rm,
Ram_session_capability ram,
Ram_session &ref_ram,
Ram_session_capability ref_ram_cap,
Genode::Service &nitpicker_service)
:
_policy(ep, rm, ram, nitpicker_service),
_policy(ep, rm, ref_ram, ref_ram_cap, nitpicker_service),
_child(rm, ep, _policy)
{
visible(false);