mirror of
https://github.com/genodelabs/genode.git
synced 2025-06-18 23:28:29 +00:00
base: remove local capability from generic base
* Instead of using local capabilities within core's context area implementation for stack allocation/attachment, simply do both operations while stack gets attached, thereby getting rid of the local capabilities in generic code * In base-hw the UTCB of core's main thread gets mapped directly instead of constructing a dataspace component out of it and hand over its local capability * Remove local capability implementation from all platforms except Linux Ref #1443
This commit is contained in:
committed by
Christian Helmuth
parent
a168c9d6ce
commit
b949489641
@ -33,7 +33,7 @@ Platform_env_base::Rm_session_mmap::_dataspace_size(Dataspace_capability ds)
|
||||
if (ds.valid())
|
||||
return Dataspace_client(ds).size();
|
||||
|
||||
return Dataspace_capability::deref(ds)->size();
|
||||
return Local_capability<Dataspace>::deref(ds)->size();
|
||||
}
|
||||
|
||||
|
||||
@ -78,7 +78,7 @@ Platform_env::Local_parent::session(Service_name const &service_name,
|
||||
Rm_session_mmap *rm = new (env()->heap())
|
||||
Rm_session_mmap(true, size);
|
||||
|
||||
return Session_capability::local_cap(rm);
|
||||
return Local_capability<Session>::local_cap(rm);
|
||||
}
|
||||
|
||||
return Expanding_parent_client::session(service_name, args, affinity);
|
||||
@ -100,7 +100,7 @@ void Platform_env::Local_parent::close(Session_capability session)
|
||||
*/
|
||||
Capability<Rm_session_mmap> rm = static_cap_cast<Rm_session_mmap>(session);
|
||||
|
||||
destroy(env()->heap(), Capability<Rm_session_mmap>::deref(rm));
|
||||
destroy(env()->heap(), Local_capability<Rm_session_mmap>::deref(rm));
|
||||
}
|
||||
|
||||
|
||||
|
7
repos/base-linux/src/base/env/platform_env.h
vendored
7
repos/base-linux/src/base/env/platform_env.h
vendored
@ -23,6 +23,7 @@
|
||||
|
||||
/* Genode includes */
|
||||
#include <util/misc_math.h>
|
||||
#include <base/local_capability.h>
|
||||
#include <base/heap.h>
|
||||
#include <linux_cpu_session/client.h>
|
||||
|
||||
@ -307,10 +308,8 @@ namespace Genode {
|
||||
* as argument to 'Rm_session_mmap::attach'. It is not a
|
||||
* real capability.
|
||||
*/
|
||||
Dataspace_capability dataspace()
|
||||
{
|
||||
return Dataspace_capability::local_cap(this);
|
||||
}
|
||||
Dataspace_capability dataspace() {
|
||||
return Local_capability<Dataspace>::local_cap(this); }
|
||||
};
|
||||
|
||||
private:
|
||||
|
@ -33,6 +33,7 @@
|
||||
*/
|
||||
|
||||
/* Genode includes */
|
||||
#include <base/local_capability.h>
|
||||
#include <base/thread.h>
|
||||
#include <linux_dataspace/client.h>
|
||||
#include <linux_syscalls.h>
|
||||
@ -49,7 +50,7 @@ static bool is_sub_rm_session(Dataspace_capability ds)
|
||||
if (ds.valid())
|
||||
return false;
|
||||
|
||||
return Dataspace_capability::deref(ds) != 0;
|
||||
return Local_capability<Dataspace>::deref(ds) != 0;
|
||||
}
|
||||
|
||||
|
||||
@ -231,7 +232,7 @@ Platform_env::Rm_session_mmap::attach(Dataspace_capability ds,
|
||||
|
||||
if (is_sub_rm_session(ds)) {
|
||||
|
||||
Dataspace *ds_if = Dataspace_capability::deref(ds);
|
||||
Dataspace *ds_if = Local_capability<Dataspace>::deref(ds);
|
||||
|
||||
Rm_session_mmap *rm = dynamic_cast<Rm_session_mmap *>(ds_if);
|
||||
|
||||
@ -355,7 +356,7 @@ void Platform_env::Rm_session_mmap::detach(Rm_session::Local_addr local_addr)
|
||||
*/
|
||||
if (is_sub_rm_session(region.dataspace())) {
|
||||
|
||||
Dataspace *ds_if = Dataspace_capability::deref(region.dataspace());
|
||||
Dataspace *ds_if = Local_capability<Dataspace>::deref(region.dataspace());
|
||||
Rm_session_mmap *rm = dynamic_cast<Rm_session_mmap *>(ds_if);
|
||||
if (rm)
|
||||
rm->_base = 0;
|
||||
|
Reference in New Issue
Block a user