hw: communicate UTCB dataspace through start info

To remap its UTCB to its context area later, a main thread needs
to know the according dataspace capability. This is done through
the start-info it receives from its creator at startup.

ref #989
This commit is contained in:
Martin Stein 2013-12-05 00:08:09 +01:00 committed by Norman Feske
parent 42f51cd802
commit 6aa0ab1bf9
3 changed files with 12 additions and 5 deletions

View File

@ -234,7 +234,8 @@ class Genode::Start_info
{
private:
Native_thread_id _thread_id;
Native_thread_id _thread_id;
Native_capability _utcb_ds;
public:
@ -243,7 +244,12 @@ class Genode::Start_info
*
* \param thread_id kernel name of the thread that is started
*/
void init(Native_thread_id const thread_id) { _thread_id = thread_id; }
void init(Native_thread_id const thread_id,
Native_capability const & utcb_ds)
{
_thread_id = thread_id;
_utcb_ds = utcb_ds;
}
/***************
@ -251,6 +257,7 @@ class Genode::Start_info
***************/
Native_thread_id thread_id() const { return _thread_id; }
Native_capability utcb_ds() const { return _utcb_ds; }
};
class Genode::Native_utcb
@ -285,7 +292,7 @@ namespace Genode
};
/**
* Return virtual UTCB location of main threads
* Return virtual UTCB location of main threads
*/
inline Native_utcb * main_thread_utcb()
{

View File

@ -250,7 +250,7 @@ extern "C" void kernel()
static Native_utcb utcb;
static Thread t(Priority::MAX, "core");
_main_thread_utcb = &utcb;
_main_thread_utcb->start_info()->init(t.id());
_main_thread_utcb->start_info()->init(t.id(), Genode::Native_capability());
t.ip = (addr_t)CORE_MAIN;;
t.sp = (addr_t)s + STACK_SIZE;
t.init(0, core_id(), &utcb, 1);

View File

@ -189,7 +189,7 @@ int Platform_thread::start(void * const ip, void * const sp,
return -1;
}
/* start executing new thread */
_utcb_phys->start_info()->init(_id);
_utcb_phys->start_info()->init(_id, _utcb);
_tlb = Kernel::start_thread(_id, cpu_id, _pd_id, _utcb_phys);
if (!_tlb) {
PERR("failed to start thread");