mirror of
https://github.com/genodelabs/genode.git
synced 2025-02-20 17:52:52 +00:00
base: extend cap_session with memory allocator
Required to allocate memory to remember per session created capabilities. During session destruction all capabilities have to be freed up.
This commit is contained in:
parent
f9b82a7b8e
commit
8c4e1b7eb0
@ -16,6 +16,7 @@
|
||||
|
||||
/* Genode includes */
|
||||
#include <base/rpc_server.h>
|
||||
#include <base/allocator.h>
|
||||
|
||||
namespace Genode {
|
||||
|
||||
@ -27,6 +28,8 @@ namespace Genode {
|
||||
|
||||
public:
|
||||
|
||||
Cap_session_component(Allocator *md_alloc, const char *args) {}
|
||||
|
||||
Native_capability alloc(Native_capability ep);
|
||||
|
||||
void free(Native_capability cap);
|
||||
|
@ -33,6 +33,8 @@ namespace Genode {
|
||||
|
||||
public:
|
||||
|
||||
Cap_session_component(Allocator *md_alloc, const char *args) {}
|
||||
|
||||
Native_capability alloc(Native_capability ep)
|
||||
{
|
||||
Lock::Guard lock_guard(_lock());
|
||||
|
@ -160,6 +160,7 @@ namespace Genode {
|
||||
Platform_env_base(Ram_session_capability(),
|
||||
Cpu_session_capability(),
|
||||
Pd_session_capability()),
|
||||
_cap_session(platform()->core_mem_alloc(), "ram_quota=4K"),
|
||||
_entrypoint(&_cap_session),
|
||||
_ram_session(&_entrypoint, &_entrypoint,
|
||||
platform()->ram_alloc(), platform()->core_mem_alloc(),
|
||||
|
@ -37,6 +37,16 @@ namespace Genode {
|
||||
|
||||
public:
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
Cap_session_component(Allocator *md_alloc, const char *args) { }
|
||||
|
||||
/**
|
||||
* Destructor
|
||||
*/
|
||||
~Cap_session_component() { }
|
||||
|
||||
Native_capability alloc(Native_capability ep,
|
||||
addr_t entry,
|
||||
addr_t mtd)
|
||||
|
@ -24,10 +24,13 @@ namespace Genode {
|
||||
|
||||
class Cap_root : public Root_component<Cap_session_component>
|
||||
{
|
||||
private:
|
||||
Allocator *_md_alloc;
|
||||
|
||||
protected:
|
||||
|
||||
Cap_session_component *_create_session(const char *args) {
|
||||
return new (md_alloc()) Cap_session_component(); }
|
||||
return new (md_alloc()) Cap_session_component(_md_alloc, args); }
|
||||
|
||||
public:
|
||||
|
||||
@ -40,7 +43,9 @@ namespace Genode {
|
||||
Cap_root(Rpc_entrypoint *session_ep,
|
||||
Allocator *md_alloc)
|
||||
:
|
||||
Root_component<Cap_session_component>(session_ep, md_alloc) { }
|
||||
Root_component<Cap_session_component>(session_ep, md_alloc),
|
||||
_md_alloc(md_alloc)
|
||||
{ }
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -33,6 +33,8 @@ namespace Genode {
|
||||
|
||||
public:
|
||||
|
||||
Cap_session_component(Allocator *md_alloc, const char *args) {}
|
||||
|
||||
Native_capability alloc(Native_capability ep)
|
||||
{
|
||||
Lock::Guard lock_guard(_lock());
|
||||
|
@ -129,6 +129,7 @@ namespace Genode {
|
||||
* Constructor
|
||||
*/
|
||||
Core_env() :
|
||||
_cap_session(platform()->core_mem_alloc(), "ram_quota=4K"),
|
||||
_entrypoint(&_cap_session, ENTRYPOINT_STACK_SIZE, "entrypoint"),
|
||||
_rm_session(&_entrypoint),
|
||||
_ram_session(&_entrypoint, &_entrypoint,
|
||||
|
Loading…
x
Reference in New Issue
Block a user