mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-24 07:46:42 +00:00
parent
0e83b0b093
commit
9e8255948d
@ -198,7 +198,8 @@ void Rpc_entrypoint::activate()
|
|||||||
|
|
||||||
|
|
||||||
Rpc_entrypoint::Rpc_entrypoint(Cap_session *cap_session, size_t stack_size,
|
Rpc_entrypoint::Rpc_entrypoint(Cap_session *cap_session, size_t stack_size,
|
||||||
const char *name, bool start_on_construction)
|
const char *name, bool start_on_construction,
|
||||||
|
unsigned affinity)
|
||||||
:
|
:
|
||||||
Thread_base(name, stack_size),
|
Thread_base(name, stack_size),
|
||||||
_curr_obj(start_on_construction ? 0 : (Rpc_object_base *)~0UL),
|
_curr_obj(start_on_construction ? 0 : (Rpc_object_base *)~0UL),
|
||||||
@ -221,6 +222,10 @@ Rpc_entrypoint::Rpc_entrypoint(Cap_session *cap_session, size_t stack_size,
|
|||||||
if (env()->cpu_session()->set_pager(_thread_cap, _pager_cap))
|
if (env()->cpu_session()->set_pager(_thread_cap, _pager_cap))
|
||||||
throw Cpu_session::Thread_creation_failed();
|
throw Cpu_session::Thread_creation_failed();
|
||||||
|
|
||||||
|
/* place new thread on the specified CPU - ~0UL means default CPU */
|
||||||
|
if (affinity != ~0UL)
|
||||||
|
env()->cpu_session()->affinity(_thread_cap, affinity);
|
||||||
|
|
||||||
addr_t thread_sp = (addr_t)&_context->stack[-4];
|
addr_t thread_sp = (addr_t)&_context->stack[-4];
|
||||||
|
|
||||||
Thread_state state;
|
Thread_state state;
|
||||||
@ -251,10 +256,11 @@ Rpc_entrypoint::Rpc_entrypoint(Cap_session *cap_session, size_t stack_size,
|
|||||||
if (!ec_cap.valid())
|
if (!ec_cap.valid())
|
||||||
throw Cpu_session::Thread_creation_failed();
|
throw Cpu_session::Thread_creation_failed();
|
||||||
_tid.ec_sel = ec_cap.local_name();
|
_tid.ec_sel = ec_cap.local_name();
|
||||||
}
|
|
||||||
else {
|
} else {
|
||||||
/* tell thread starting code to use boot CPU */
|
|
||||||
*reinterpret_cast<addr_t *>(stack_top()) = ~0UL;
|
/* tell thread starting code to use a specific CPU */
|
||||||
|
*reinterpret_cast<addr_t *>(stack_top()) = affinity;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Required for core threads (creates local EC)
|
* Required for core threads (creates local EC)
|
||||||
|
@ -318,7 +318,8 @@ namespace Genode {
|
|||||||
* \param name name of entrypoint thread
|
* \param name name of entrypoint thread
|
||||||
*/
|
*/
|
||||||
Rpc_entrypoint(Cap_session *cap_session, size_t stack_size,
|
Rpc_entrypoint(Cap_session *cap_session, size_t stack_size,
|
||||||
char const *name, bool start_on_construction = true);
|
char const *name, bool start_on_construction = true,
|
||||||
|
unsigned affinity = ~0U);
|
||||||
|
|
||||||
~Rpc_entrypoint();
|
~Rpc_entrypoint();
|
||||||
|
|
||||||
|
@ -98,7 +98,8 @@ bool Rpc_entrypoint::is_myself() const
|
|||||||
|
|
||||||
|
|
||||||
Rpc_entrypoint::Rpc_entrypoint(Cap_session *cap_session, size_t stack_size,
|
Rpc_entrypoint::Rpc_entrypoint(Cap_session *cap_session, size_t stack_size,
|
||||||
char const *name, bool start_on_construction)
|
char const *name, bool start_on_construction,
|
||||||
|
unsigned affinity)
|
||||||
:
|
:
|
||||||
Thread_base(name, stack_size),
|
Thread_base(name, stack_size),
|
||||||
_cap(Untyped_capability()),
|
_cap(Untyped_capability()),
|
||||||
|
Loading…
Reference in New Issue
Block a user