mirror of
https://github.com/genodelabs/genode.git
synced 2025-06-22 08:50:09 +00:00
committed by
Christian Helmuth
parent
5a3a1c704b
commit
0167d5af50
@ -19,7 +19,6 @@
|
||||
#include <base/child.h>
|
||||
#include <util/arg_string.h>
|
||||
#include <init/child_policy.h>
|
||||
#include <ram_session/connection.h>
|
||||
#include <cpu_session/connection.h>
|
||||
#include <pd_session/connection.h>
|
||||
#include <region_map/client.h>
|
||||
@ -100,19 +99,11 @@ class Loader::Child : public Child_policy
|
||||
Pd_session &ref_pd() override { return _env.pd(); }
|
||||
Pd_session_capability ref_pd_cap() const override { return _env.pd_session_cap(); }
|
||||
|
||||
Ram_session &ref_ram() override { return _env.ram(); }
|
||||
Ram_session_capability ref_ram_cap() const override { return _env.ram_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);
|
||||
}
|
||||
|
||||
void init(Ram_session &ram, Ram_session_capability ram_cap) override
|
||||
{
|
||||
ram.ref_account(ref_ram_cap());
|
||||
ref_ram().transfer_quota(ram_cap, _ram_quota);
|
||||
ref_pd().transfer_quota(pd_cap, _ram_quota);
|
||||
}
|
||||
|
||||
Service &resolve_session_request(Service::Name const &name,
|
||||
|
@ -158,10 +158,10 @@ class Loader::Session_component : public Rpc_object<Session>
|
||||
|
||||
struct Local_nitpicker_factory : Local_service<Nitpicker::Session_component>::Factory
|
||||
{
|
||||
Entrypoint &_ep;
|
||||
Env &_env;
|
||||
Region_map &_rm;
|
||||
Ram_session &_ram;
|
||||
Entrypoint &_ep;
|
||||
Env &_env;
|
||||
Region_map &_rm;
|
||||
Ram_allocator &_ram;
|
||||
|
||||
Area _max_size;
|
||||
Nitpicker::View_capability _parent_view;
|
||||
@ -170,7 +170,8 @@ class Loader::Session_component : public Rpc_object<Session>
|
||||
|
||||
Constructible<Nitpicker::Session_component> session;
|
||||
|
||||
Local_nitpicker_factory(Entrypoint &ep, Env &env, Region_map &rm, Ram_session &ram)
|
||||
Local_nitpicker_factory(Entrypoint &ep, Env &env,
|
||||
Region_map &rm, Ram_allocator &ram)
|
||||
: _ep(ep), _env(env), _rm(rm), _ram(ram) { }
|
||||
|
||||
void constrain_geometry(Area size) { _max_size = size; }
|
||||
|
@ -152,7 +152,7 @@ class Nitpicker::Session_component : public Rpc_object<Session>
|
||||
Session_component(Entrypoint &ep,
|
||||
Env &env,
|
||||
Region_map &rm,
|
||||
Ram_session &ram,
|
||||
Ram_allocator &ram,
|
||||
Area max_size,
|
||||
Nitpicker::View_capability parent_view,
|
||||
Signal_context_capability view_ready_sigh,
|
||||
|
@ -15,37 +15,38 @@
|
||||
#define _RAM_SESSION_CLIENT_GUARD_H_
|
||||
|
||||
#include <base/lock.h>
|
||||
#include <base/printf.h>
|
||||
#include <base/log.h>
|
||||
#include <base/ram_allocator.h>
|
||||
#include <pd_session/client.h>
|
||||
#include <dataspace/client.h>
|
||||
#include <ram_session/client.h>
|
||||
|
||||
namespace Genode {
|
||||
|
||||
class Ram_session_client_guard : public Ram_session_client
|
||||
class Ram_session_client_guard : public Ram_allocator
|
||||
{
|
||||
private:
|
||||
|
||||
size_t const _amount; /* total amount */
|
||||
size_t _consumed; /* already consumed bytes */
|
||||
Lock mutable _consumed_lock;
|
||||
Pd_session_client _pd;
|
||||
size_t const _amount; /* total amount */
|
||||
size_t _consumed; /* already consumed bytes */
|
||||
Lock mutable _consumed_lock;
|
||||
|
||||
public:
|
||||
|
||||
Ram_session_client_guard(Ram_session_capability session, Ram_quota amount)
|
||||
: Ram_session_client(session), _amount(amount.value), _consumed(0) { }
|
||||
Ram_session_client_guard(Pd_session_capability session, Ram_quota amount)
|
||||
: _pd(session), _amount(amount.value), _consumed(0) { }
|
||||
|
||||
Ram_dataspace_capability alloc(size_t size, Cache_attribute cached) override
|
||||
{
|
||||
Lock::Guard _consumed_lock_guard(_consumed_lock);
|
||||
|
||||
if ((_amount - _consumed) < size) {
|
||||
PWRN("Quota exceeded! amount=%lu, size=%lu, consumed=%lu",
|
||||
_amount, size, _consumed);
|
||||
warning("quota exceeded! amount=", _amount, ", "
|
||||
"size=", size, ", consumed=", _consumed);
|
||||
return Ram_dataspace_capability();
|
||||
}
|
||||
|
||||
Ram_dataspace_capability cap =
|
||||
Ram_session_client::alloc(size, cached);
|
||||
Ram_dataspace_capability cap = _pd.alloc(size, cached);
|
||||
|
||||
_consumed += size;
|
||||
|
||||
@ -58,38 +59,14 @@ namespace Genode {
|
||||
|
||||
_consumed -= Dataspace_client(ds).size();
|
||||
|
||||
Ram_session_client::free(ds);
|
||||
_pd.free(ds);
|
||||
}
|
||||
|
||||
size_t dataspace_size(Ram_dataspace_capability ds) const override
|
||||
{
|
||||
return Ram_session_client::dataspace_size(ds);
|
||||
}
|
||||
|
||||
void transfer_quota(Ram_session_capability ram_session, Ram_quota amount) override
|
||||
{
|
||||
Lock::Guard _consumed_lock_guard(_consumed_lock);
|
||||
|
||||
if ((_amount - _consumed) < amount.value) {
|
||||
warning("Quota exceeded! amount=", _amount, ", "
|
||||
"size=", amount.value, ", "
|
||||
"consumed=", _consumed);
|
||||
throw Out_of_ram();
|
||||
}
|
||||
|
||||
Ram_session_client::transfer_quota(ram_session, amount);
|
||||
_consumed += amount.value;
|
||||
}
|
||||
|
||||
Ram_quota ram_quota() const override
|
||||
{
|
||||
return { _amount };
|
||||
}
|
||||
|
||||
Ram_quota used_ram() const override
|
||||
{
|
||||
Lock::Guard _consumed_lock_guard(_consumed_lock);
|
||||
return { _consumed };
|
||||
return _pd.dataspace_size(ds);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -31,7 +31,7 @@ namespace Genode {
|
||||
|
||||
Name const _name;
|
||||
|
||||
Ram_session &_ram;
|
||||
Ram_allocator &_ram;
|
||||
Attached_ram_dataspace _fg;
|
||||
Attached_ram_dataspace _bg;
|
||||
|
||||
@ -48,9 +48,9 @@ namespace Genode {
|
||||
enum Origin { PARENT_PROVIDED, SESSION_LOCAL };
|
||||
|
||||
Rom_module(Env &env, Xml_node config, Name const &name,
|
||||
Ram_session &ram_session, Origin origin)
|
||||
Ram_allocator &ram_allocator, Origin origin)
|
||||
:
|
||||
_name(name), _ram(ram_session),
|
||||
_name(name), _ram(ram_allocator),
|
||||
_fg(_ram, env.rm(), 0), _bg(_ram, env.rm(), 0),
|
||||
_bg_has_pending_data(false),
|
||||
_lock(Lock::LOCKED)
|
||||
@ -158,7 +158,7 @@ namespace Genode {
|
||||
Env &_env;
|
||||
Xml_node const _config;
|
||||
Lock _lock;
|
||||
Ram_session &_ram_session;
|
||||
Ram_allocator &_ram_allocator;
|
||||
Allocator &_md_alloc;
|
||||
List<Rom_module> _list;
|
||||
|
||||
@ -172,14 +172,15 @@ namespace Genode {
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* \param ram_session RAM session used as backing store for
|
||||
* module data
|
||||
* \param md_alloc backing store for ROM module meta data
|
||||
* \param ram_allocator RAM allocator used as backing store for
|
||||
* module data
|
||||
* \param md_alloc backing store for ROM module meta data
|
||||
*/
|
||||
Rom_module_registry(Env &env, Xml_node config, Ram_session &ram_session,
|
||||
Rom_module_registry(Env &env, Xml_node config,
|
||||
Ram_allocator &ram_allocator,
|
||||
Allocator &md_alloc)
|
||||
:
|
||||
_env(env), _config(config), _ram_session(ram_session),
|
||||
_env(env), _config(config), _ram_allocator(ram_allocator),
|
||||
_md_alloc(md_alloc)
|
||||
{ }
|
||||
|
||||
@ -226,7 +227,7 @@ namespace Genode {
|
||||
Lock::Guard guard(_lock);
|
||||
|
||||
Rom_module *module = new (&_md_alloc)
|
||||
Rom_module(_env, _config, name, _ram_session,
|
||||
Rom_module(_env, _config, name, _ram_allocator,
|
||||
Rom_module::SESSION_LOCAL);
|
||||
|
||||
Rom_module_lock_guard module_guard(*module);
|
||||
@ -247,7 +248,7 @@ namespace Genode {
|
||||
Lock::Guard guard(_lock);
|
||||
|
||||
Rom_module *module = new (&_md_alloc)
|
||||
Rom_module(_env, _config, name, _ram_session,
|
||||
Rom_module(_env, _config, name, _ram_allocator,
|
||||
Rom_module::PARENT_PROVIDED);
|
||||
|
||||
Rom_module_lock_guard module_guard(*module);
|
||||
|
@ -56,7 +56,7 @@ class Net::Stream_allocator
|
||||
Stream_allocator(Genode::Ram_session &ram,
|
||||
Genode::Region_map &rm,
|
||||
Genode::size_t amount)
|
||||
: _ram(ram, Genode::Ram_session_capability(), amount),
|
||||
: _ram(ram, amount),
|
||||
_heap(ram, rm),
|
||||
_range_alloc(&_heap) {}
|
||||
|
||||
|
@ -344,7 +344,7 @@ class Vfs_server::Session_component : public File_system::Session_rpc_object,
|
||||
bool writable)
|
||||
:
|
||||
Session_rpc_object(env.ram().alloc(tx_buf_size), env.rm(), env.ep().rpc_ep()),
|
||||
_ram(env.ram(), env.ram_session_cap(), ram_quota),
|
||||
_ram(env.ram(), ram_quota),
|
||||
_alloc(_ram, env.rm()),
|
||||
_process_packet_handler(env.ep(), *this, &Session_component::_process_packets),
|
||||
_vfs(vfs),
|
||||
|
Reference in New Issue
Block a user