Adds kill to the monitor
[akaros.git] / kern / src / arsc.c
index 533e65d..acda958 100644 (file)
@@ -24,7 +24,7 @@
 
 
 struct proc_list arsc_proc_list = TAILQ_HEAD_INITIALIZER(arsc_proc_list);
-spinlock_t arsc_proc_lock = SPINLOCK_INITIALIZER;
+spinlock_t arsc_proc_lock = SPINLOCK_INITIALIZER_IRQSAVE;
 
 intreg_t inline syscall_async(struct proc *p, syscall_req_t *call)
 {
@@ -60,7 +60,7 @@ syscall_sring_t* sys_init_arsc(struct proc *p)
        return (syscall_sring_t*)va;
 }
 
-void arsc_server(struct trapframe *tf)
+void arsc_server(uint32_t srcid, long a0, long a1, long a2)
 {
        struct proc *p = NULL;
        TAILQ_INIT(&arsc_proc_list);
@@ -68,7 +68,7 @@ void arsc_server(struct trapframe *tf)
                while (TAILQ_EMPTY(&arsc_proc_list))
                        cpu_relax();
                
-               TAILQ_FOREACH(p, &arsc_proc_list, proc_link) {
+               TAILQ_FOREACH(p, &arsc_proc_list, proc_arsc_link) {
                        /* Probably want to try to process a dying process's syscalls.  If
                         * not, just move it to an else case */
                        process_generic_syscalls (p, MAX_ASRC_BATCH); 
@@ -111,7 +111,7 @@ static intreg_t process_generic_syscalls(struct proc *p, size_t max)
                // this assumes we get our answer immediately for the syscall.
                syscall_req_t* req = RING_GET_REQUEST(sysbr, ++sysbr->req_cons);
                
-               pcpui->cur_sysc = req->sc;
+               pcpui->cur_kthread->sysc = req->sc;
                run_local_syscall(req->sc); // TODO: blocking call will block arcs as well.
                
                // need to keep the slot in the ring buffer if it is blocked