mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-22 23:12:24 +00:00
570156b38c
When L4Linux tries to allocate a dataspace of the size of its physical memory, this allocation can fail, because the 'l4re_ma_alloc()' function in the 'l4lx' library always tries to allocate a contiguous dataspace of the given size and there might be no contiguous free area left. With this patch, memory gets allocated in chunks: if the size to be allocated exceeds the configured chunk size, a managed dataspace gets created and filled with multiple memory chunks of at most the chunk size. The chunk size is 16M by default and can be configured in an l4linux config node: <config args="..."> <ram chunk_size="16M"/> </config> Fixes #695.
58 lines
1.5 KiB
C++
58 lines
1.5 KiB
C++
/*
|
|
* \brief Client-side region manager session interface
|
|
* \author Christian Helmuth
|
|
* \date 2006-07-11
|
|
*/
|
|
|
|
/*
|
|
* Copyright (C) 2006-2013 Genode Labs GmbH
|
|
*
|
|
* This file is part of the Genode OS framework, which is distributed
|
|
* under the terms of the GNU General Public License version 2.
|
|
*/
|
|
|
|
#ifndef _INCLUDE__RM_SESSION__CLIENT_H_
|
|
#define _INCLUDE__RM_SESSION__CLIENT_H_
|
|
|
|
#include <rm_session/capability.h>
|
|
#include <base/rpc_client.h>
|
|
|
|
namespace Genode {
|
|
|
|
struct Rm_session_client : Rpc_client<Rm_session>
|
|
{
|
|
explicit Rm_session_client(Rm_session_capability session)
|
|
: Rpc_client<Rm_session>(session) { }
|
|
|
|
Local_addr attach(Dataspace_capability ds, size_t size = 0,
|
|
off_t offset = 0, bool use_local_addr = false,
|
|
Local_addr local_addr = 0,
|
|
bool executable = false)
|
|
{
|
|
return call<Rpc_attach>(ds, size, offset,
|
|
use_local_addr, local_addr,
|
|
executable);
|
|
}
|
|
|
|
void detach(Local_addr local_addr) {
|
|
call<Rpc_detach>(local_addr); }
|
|
|
|
Pager_capability add_client(Thread_capability thread) {
|
|
return call<Rpc_add_client>(thread); }
|
|
|
|
void remove_client(Pager_capability pager) {
|
|
call<Rpc_remove_client>(pager); }
|
|
|
|
void fault_handler(Signal_context_capability handler) {
|
|
call<Rpc_fault_handler>(handler); }
|
|
|
|
State state() {
|
|
return call<Rpc_state>(); }
|
|
|
|
Dataspace_capability dataspace() {
|
|
return call<Rpc_dataspace>(); }
|
|
};
|
|
}
|
|
|
|
#endif /* _INCLUDE__RM_SESSION__CLIENT_H_ */
|