SCP syscalls can be aborted
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 5 Jun 2014 22:20:41 +0000 (15:20 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 5 Jun 2014 22:20:41 +0000 (15:20 -0700)
Thanks to Drew for this patch.

user/parlib/uthread.c

index 31284cb..4ca8234 100644 (file)
@@ -403,7 +403,12 @@ void __ros_mcp_syscall_blockon(struct syscall *sysc)
 {
        /* even if we are in 'vcore context', an _S can block */
        if (!in_multi_mode()) {
+               /* the SCP could have an alarm set to abort this sysc.  When we have a
+                * uth blocked on a sysc, we want this pointer set up (like we do below
+                * for MCP)s */
+               current_uthread->sysc = sysc;
                __ros_scp_syscall_blockon(sysc);
+               current_uthread->sysc = 0;
                return;
        }
        /* MCP vcore's don't know what to do yet, so we have to spin */