X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fgeekos%2Fkthread.c;h=6ecb30fd25e7a483adb5d74fa5a1c9a7c091b447;hb=856dabe4e139e3b42e2956f85e562aa922d66f2e;hp=0cba54608dc5098cb581a73ba4114c63abaa8d22;hpb=c1e082c26ab3f0b7cc183a7709f90ef4c3f7ad3d;p=palacios.git diff --git a/palacios/src/geekos/kthread.c b/palacios/src/geekos/kthread.c index 0cba546..6ecb30f 100644 --- a/palacios/src/geekos/kthread.c +++ b/palacios/src/geekos/kthread.c @@ -748,6 +748,30 @@ void Wake_Up_One(struct Thread_Queue* waitQueue) } } + + +/* + * Wake up a single thread waiting on given wait queue + * (if there are any threads waiting). Chooses the highest priority thread. + * Interrupts must be disabled! + */ +void Wake_Up_Thread(struct Thread_Queue* waitQueue, int pid) +{ + struct Kernel_Thread* thread = Lookup_Thread(pid);; + + KASSERT(!Interrupts_Enabled()); + + + if (thread != 0) { + Remove_Thread(waitQueue, thread); + Make_Runnable(thread); + /*Print("Wake_Up_One: waking up %x from %x\n", best, g_currentThread); */ + } +} + + + + /* * Allocate a key for accessing thread-local data. */