mirror of
https://github.com/genodelabs/genode.git
synced 2025-06-01 07:00:55 +00:00
parent
d50996863b
commit
37a6f2a6b8
@ -199,7 +199,7 @@ namespace Genode {
|
|||||||
/**
|
/**
|
||||||
* Map dataspace into local address space
|
* Map dataspace into local address space
|
||||||
*/
|
*/
|
||||||
static void *_map_local(Dataspace_capability ds,
|
void *_map_local(Dataspace_capability ds,
|
||||||
Genode::size_t size,
|
Genode::size_t size,
|
||||||
addr_t offset,
|
addr_t offset,
|
||||||
bool use_local_addr,
|
bool use_local_addr,
|
||||||
@ -214,17 +214,17 @@ namespace Genode {
|
|||||||
* dataspace size is determined via an RPC to core
|
* dataspace size is determined via an RPC to core
|
||||||
* (calling 'Dataspace::size()').
|
* (calling 'Dataspace::size()').
|
||||||
*/
|
*/
|
||||||
static size_t _dataspace_size(Capability<Dataspace>);
|
size_t _dataspace_size(Capability<Dataspace>);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determine file descriptor of dataspace
|
* Determine file descriptor of dataspace
|
||||||
*/
|
*/
|
||||||
static int _dataspace_fd(Capability<Dataspace>);
|
int _dataspace_fd(Capability<Dataspace>);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determine whether dataspace is writable
|
* Determine whether dataspace is writable
|
||||||
*/
|
*/
|
||||||
static bool _dataspace_writable(Capability<Dataspace>);
|
bool _dataspace_writable(Capability<Dataspace>);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -111,8 +111,13 @@ Platform_env_base::Rm_session_mmap::_dataspace_size(Capability<Dataspace> ds_cap
|
|||||||
return Dataspace_capability::deref(ds_cap)->size();
|
return Dataspace_capability::deref(ds_cap)->size();
|
||||||
|
|
||||||
/* use RPC if called from a different thread */
|
/* use RPC if called from a different thread */
|
||||||
if (!core_env()->entrypoint()->is_myself())
|
if (!core_env()->entrypoint()->is_myself()) {
|
||||||
return Dataspace_client(ds_cap).size();
|
/* release Rm_session_mmap::_lock during RPC */
|
||||||
|
_lock.unlock();
|
||||||
|
Genode::size_t size = Dataspace_client(ds_cap).size();
|
||||||
|
_lock.lock();
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
/* use local function call if called from the entrypoint */
|
/* use local function call if called from the entrypoint */
|
||||||
Dataspace *ds = core_env()->entrypoint()->lookup(ds_cap);
|
Dataspace *ds = core_env()->entrypoint()->lookup(ds_cap);
|
||||||
@ -122,8 +127,13 @@ Platform_env_base::Rm_session_mmap::_dataspace_size(Capability<Dataspace> ds_cap
|
|||||||
|
|
||||||
int Platform_env_base::Rm_session_mmap::_dataspace_fd(Capability<Dataspace> ds_cap)
|
int Platform_env_base::Rm_session_mmap::_dataspace_fd(Capability<Dataspace> ds_cap)
|
||||||
{
|
{
|
||||||
if (!core_env()->entrypoint()->is_myself())
|
if (!core_env()->entrypoint()->is_myself()) {
|
||||||
return Linux_dataspace_client(ds_cap).fd().dst().socket;
|
/* release Rm_session_mmap::_lock during RPC */
|
||||||
|
_lock.unlock();
|
||||||
|
int socket = Linux_dataspace_client(ds_cap).fd().dst().socket;
|
||||||
|
_lock.lock();
|
||||||
|
return socket;
|
||||||
|
}
|
||||||
|
|
||||||
Capability<Linux_dataspace> lx_ds_cap = static_cap_cast<Linux_dataspace>(ds_cap);
|
Capability<Linux_dataspace> lx_ds_cap = static_cap_cast<Linux_dataspace>(ds_cap);
|
||||||
|
|
||||||
@ -135,8 +145,13 @@ int Platform_env_base::Rm_session_mmap::_dataspace_fd(Capability<Dataspace> ds_c
|
|||||||
|
|
||||||
bool Platform_env_base::Rm_session_mmap::_dataspace_writable(Dataspace_capability ds_cap)
|
bool Platform_env_base::Rm_session_mmap::_dataspace_writable(Dataspace_capability ds_cap)
|
||||||
{
|
{
|
||||||
if (!core_env()->entrypoint()->is_myself())
|
if (!core_env()->entrypoint()->is_myself()) {
|
||||||
return Dataspace_client(ds_cap).writable();
|
/* release Rm_session_mmap::_lock during RPC */
|
||||||
|
_lock.unlock();
|
||||||
|
bool writable = Dataspace_client(ds_cap).writable();
|
||||||
|
_lock.lock();
|
||||||
|
return writable;
|
||||||
|
}
|
||||||
|
|
||||||
Dataspace *ds = core_env()->entrypoint()->lookup(ds_cap);
|
Dataspace *ds = core_env()->entrypoint()->lookup(ds_cap);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user