Avoids deadlock in cases where interrupts enabled
authorKevin Klues <klueska@ros-dev.(none)>
Thu, 1 Apr 2010 00:38:46 +0000 (17:38 -0700)
committerKevin Klues <klueska@cs.berkeley.edu>
Thu, 3 Nov 2011 00:35:39 +0000 (17:35 -0700)
If a system call is made on the same core the NIC is running on,
then deadlock might occur if irqsave is used.

kern/src/frontend.c

index e3fccb2..d6fa403 100644 (file)
@@ -235,7 +235,7 @@ int32_t frontend_syscall(pid_t pid, int32_t syscall_num,
        // only one frontend request at a time.
        // interrupts could try to do frontend requests,
        // which would deadlock, so disable them
-       spin_lock_irqsave(&lock);
+       spin_lock(&lock);
 
        // write syscall into magic memory
        magic_mem[7] = 0;
@@ -255,7 +255,7 @@ int32_t frontend_syscall(pid_t pid, int32_t syscall_num,
        if(errno)
                *errno = magic_mem[2];
 
-       spin_unlock_irqsave(&lock);
+       spin_unlock(&lock);
 
        return ret;
 }