diff --git a/kernel/syscall.c b/kernel/syscall.c index b8682fc4..b8ea8142 100644 --- a/kernel/syscall.c +++ b/kernel/syscall.c @@ -320,11 +320,11 @@ long do_syscall(struct syscall_request *req, int cpu, int pid) flags = cpu_disable_interrupt_save(); /* Try to sleep until notified */ - if (__sync_bool_compare_and_swap(&res.req_thread_status, - IHK_SCD_REQ_THREAD_SPINNING, - IHK_SCD_REQ_THREAD_DESCHEDULED)) { - - dkprintf("%s: tid %d waiting for syscall reply...\n", + if (res.req_thread_status == IHK_SCD_REQ_THREAD_DESCHEDULED || + __sync_bool_compare_and_swap(&res.req_thread_status, + IHK_SCD_REQ_THREAD_SPINNING, + IHK_SCD_REQ_THREAD_DESCHEDULED)) { + kprintf("%s: tid %d waiting for syscall reply...\n", __FUNCTION__, thread->tid); waitq_init(&thread->scd_wq); waitq_prepare_to_wait(&thread->scd_wq, &scd_wq_entry,