Cleanup: remove 'first' and 'next' of cpu_session

Fixes #10
This commit is contained in:
Alexander Boettcher 2012-10-10 13:59:32 +02:00 committed by Norman Feske
parent 105ff5dfed
commit 83039267fa
15 changed files with 38 additions and 101 deletions

View File

@ -34,12 +34,6 @@ namespace Genode {
void kill_thread(Thread_capability thread) {
call<Rpc_kill_thread>(thread); }
Thread_capability first() {
return call<Rpc_first>(); }
Thread_capability next(Thread_capability curr) {
return call<Rpc_next>(curr); }
int set_pager(Thread_capability thread, Pager_capability pager) {
return call<Rpc_set_pager>(thread, pager); }

View File

@ -38,11 +38,6 @@ namespace Genode {
void kill_thread(Thread_capability thread) {
call<Rpc_kill_thread>(thread); }
Thread_capability first() {
return call<Rpc_first>(); }
Thread_capability next(Thread_capability curr) {
return call<Rpc_next>(curr); }
int set_pager(Thread_capability thread, Pager_capability pager) {
return call<Rpc_set_pager>(thread, pager); }

View File

@ -126,7 +126,7 @@ void Thread_base::start()
throw Cpu_session::Thread_creation_failed();
/* request native EC thread cap */
Genode::Nova_cpu_connection cpu;
Genode::Cpu_session_client cpu(env()->cpu_session_cap());
Native_capability ec_cap = cpu.native_cap(_thread_cap);
if (!ec_cap.valid())
throw Cpu_session::Thread_creation_failed();

View File

@ -131,8 +131,6 @@ namespace Genode {
Ram_dataspace_capability utcb(Thread_capability thread);
void kill_thread(Thread_capability);
Thread_capability first();
Thread_capability next(Thread_capability);
int set_pager(Thread_capability, Pager_capability);
int start(Thread_capability, addr_t, addr_t);
void pause(Thread_capability thread_cap);

View File

@ -33,12 +33,6 @@ namespace Genode {
void kill_thread(Thread_capability thread) {
call<Rpc_kill_thread>(thread); }
Thread_capability first() {
return call<Rpc_first>(); }
Thread_capability next(Thread_capability curr) {
return call<Rpc_next>(curr); }
int set_pager(Thread_capability thread, Pager_capability pager) {
return call<Rpc_set_pager>(thread, pager); }

View File

@ -82,16 +82,6 @@ namespace Genode {
*/
virtual void kill_thread(Thread_capability thread) = 0;
/**
* Retrieve thread list of CPU session
*
* The next() function returns an invalid capability if the
* specified thread does not exists or if it is the last one
* of the CPU session.
*/
virtual Thread_capability first() = 0;
virtual Thread_capability next(Thread_capability curr) = 0;
/**
* Set paging capabilities for thread
*
@ -213,8 +203,6 @@ namespace Genode {
Name const &, addr_t);
GENODE_RPC(Rpc_utcb, Ram_dataspace_capability, utcb, Thread_capability);
GENODE_RPC(Rpc_kill_thread, void, kill_thread, Thread_capability);
GENODE_RPC(Rpc_first, Thread_capability, first,);
GENODE_RPC(Rpc_next, Thread_capability, next, Thread_capability);
GENODE_RPC(Rpc_set_pager, int, set_pager, Thread_capability, Pager_capability);
GENODE_RPC(Rpc_start, int, start, Thread_capability, addr_t, addr_t);
GENODE_RPC(Rpc_pause, void, pause, Thread_capability);
@ -238,8 +226,6 @@ namespace Genode {
typedef Meta::Type_tuple<Rpc_create_thread,
Meta::Type_tuple<Rpc_utcb,
Meta::Type_tuple<Rpc_kill_thread,
Meta::Type_tuple<Rpc_first,
Meta::Type_tuple<Rpc_next,
Meta::Type_tuple<Rpc_set_pager,
Meta::Type_tuple<Rpc_start,
Meta::Type_tuple<Rpc_pause,
@ -251,7 +237,7 @@ namespace Genode {
Meta::Type_tuple<Rpc_num_cpus,
Meta::Type_tuple<Rpc_affinity,
Meta::Empty>
> > > > > > > > > > > > > > Rpc_functions;
> > > > > > > > > > > > Rpc_functions;
};
}

View File

@ -25,7 +25,8 @@
using namespace Genode;
Thread_capability Cpu_session_component::create_thread(Name const &name, addr_t utcb)
Thread_capability Cpu_session_component::create_thread(Name const &name,
addr_t utcb)
{
Lock::Guard thread_list_lock_guard(_thread_list_lock);
Lock::Guard slab_lock_guard(_thread_alloc_lock);
@ -70,28 +71,6 @@ void Cpu_session_component::kill_thread(Thread_capability thread_cap)
}
Thread_capability Cpu_session_component::first()
{
Lock::Guard lock_guard(_thread_list_lock);
return _thread_list.first() ? _thread_list.first()->cap()
: Thread_capability();
}
Thread_capability Cpu_session_component::next(Thread_capability thread_cap)
{
Lock::Guard lock_guard(_thread_list_lock);
Cpu_thread_component *thread = _lookup_thread(thread_cap);
if (!thread || !thread->next())
return Thread_capability();
return Thread_capability(thread->next()->cap());
}
int Cpu_session_component::set_pager(Thread_capability thread_cap,
Pager_capability pager_cap)
{
@ -152,9 +131,9 @@ int Cpu_session_component::state(Thread_capability thread_cap,
return thread->platform_thread()->state(state_dst);
}
void Cpu_session_component::exception_handler(Thread_capability thread_cap,
Signal_context_capability sigh_cap)
void
Cpu_session_component::exception_handler(Thread_capability thread_cap,
Signal_context_capability sigh_cap)
{
Cpu_thread_component *thread = _lookup_thread(thread_cap);
if (!thread || !thread->platform_thread()->pager()) return;

View File

@ -159,19 +159,19 @@ namespace Genode {
Cpu_session *cpu_session()
{
PWRN("not implemented");
PWRN("%s:%u not implemented", __FILE__, __LINE__);
return 0;
}
Cpu_session_capability cpu_session_cap() {
PWRN("not implemented");
PWRN("%s:%u not implemented", __FILE__, __LINE__);
return Cpu_session_capability();
}
Pd_session *pd_session()
{
PWRN("not implemented");
PWRN("%s:%u not implemented", __FILE__, __LINE__);
return 0;
}
};

View File

@ -124,8 +124,6 @@ namespace Genode {
Thread_capability create_thread(Name const &, addr_t utcb);
Ram_dataspace_capability utcb(Thread_capability thread);
void kill_thread(Thread_capability);
Thread_capability first();
Thread_capability next(Thread_capability);
int set_pager(Thread_capability, Pager_capability);
int start(Thread_capability, addr_t, addr_t);
void pause(Thread_capability thread_cap);

View File

@ -164,9 +164,8 @@ int l4lx_irq_dev_set_affinity(struct irq_data *data,
if (target_cpu == p->cpu)
return 0;
unsigned long flags;
unsigned long flags = 0;
l4x_migrate_lock(&flags);
{
Linux::Irq_guard guard;
if (l4_error(l4_irq_detach(p->irq_cap)))

View File

@ -103,9 +103,11 @@ static void prepare_l4re_env()
{
using namespace Fiasco;
Genode::Foc_cpu_connection cpu;
static Genode::Native_capability main_thread_cap
= cpu.native_cap(Genode::env()->cpu_session()->first());
Genode::Foc_cpu_session_client cpu(Genode::env()->cpu_session_cap());
Genode::Thread_capability main_thread = Genode::env()->parent()->main_thread_cap();
static Genode::Native_capability main_thread_cap = cpu.native_cap(main_thread);
l4re_env_t *env = l4re_env();
env->first_free_utcb = (l4_addr_t)l4_utcb() + L4_UTCB_OFFSET;
env->utcb_area = l4_fpage((l4_addr_t)l4_utcb(),

View File

@ -108,7 +108,7 @@ extern "C" {
int genode_config_audio()
{
try {
Genode::Xml_node _node = node("audio");
node("audio");
return 1;
} catch (Genode::Xml_node::Invalid_syntax) {
PWRN("Malformed entry in Linux config.");
@ -121,7 +121,7 @@ extern "C" {
int genode_config_nic()
{
try {
Genode::Xml_node _node = node("nic");
node("nic");
return 1;
} catch (Genode::Xml_node::Invalid_syntax) {
PWRN("Malformed entry in Linux config.");
@ -133,7 +133,7 @@ extern "C" {
int genode_config_block()
{
try {
Genode::Xml_node _node = node("block");
node("block");
return 1;
} catch (Genode::Xml_node::Invalid_syntax) {
PWRN("Malformed entry in Linux config.");

View File

@ -35,29 +35,17 @@ static Thread_capability oklx_pager_cap; /* cap to the Linux main thread */
*/
static Thread_capability my_cap()
{
/*
* Get the thread-list of the cpu_session containing
* all OKLinux kernel threads
*/
Thread_capability invalid, cap =
Oklx_thread_list::thread_list()->cpu()->first();
Okl4::L4_Word_t tid = thread_myself();
/* Get the OKL4 thread id of the active thread */
Okl4::L4_Word_t tid = thread_myself();
Thread_state state;
/*
* Now, iterate through the thread-list and return the cap of the thread
* withe same OKL4 thread id as the active one
*/
while(cap.valid())
{
Oklx_thread_list::thread_list()->cpu()->state(cap, &state);
if(tid == state.tid.raw)
return cap;
cap = Oklx_thread_list::thread_list()->cpu()->next(cap);
Oklx_kernel_thread * thread = Genode::Oklx_thread_list::thread_list()->first();
while (thread) {
if (thread->tid().raw == tid)
return thread->cap();
thread = thread->next();
}
return invalid;
/* invalid cap */
return Thread_capability();
}
@ -91,6 +79,7 @@ L4_ThreadId_t Oklx_thread_list::add()
/* Get the OKL4 thread id of the new thread */
Thread_state state;
_cpu.state(cap,&state);
thd->set_tid(state.tid);
/* Acknowledge startup and return */
L4_Send(state.tid);

View File

@ -54,6 +54,8 @@ namespace Genode {
enum { STACK_SIZE=1024 };
Thread_capability _cap; /* Genodes thread capability */
Okl4::L4_ThreadId_t _tid;
char _stack[STACK_SIZE]; /* stack for startup code */
public:
@ -65,6 +67,11 @@ namespace Genode {
void* stack_addr() { return (void*)&_stack[STACK_SIZE-1]; };
static void entry();
void set_tid(Okl4::L4_ThreadId_t tid) { _tid = tid; }
Okl4::L4_ThreadId_t tid() { return _tid; }
};
@ -88,6 +95,8 @@ namespace Genode {
* Get the global list of OKLinux kernel threads
*/
static Oklx_thread_list *thread_list();
Oklx_kernel_thread * first() { return _threads.first(); }
};

View File

@ -93,12 +93,6 @@ namespace Noux {
void kill_thread(Thread_capability thread) {
_cpu.kill_thread(thread); }
Thread_capability first() {
return _cpu.first(); }
Thread_capability next(Thread_capability curr) {
return _cpu.next(curr); }
int set_pager(Thread_capability thread,
Pager_capability pager) {
return _cpu.set_pager(thread, pager); }