Index: kernel/generic/include/synch/spinlock.h
===================================================================
--- kernel/generic/include/synch/spinlock.h	(revision 55821eead31822cd7053e1f55e528a9ba9197182)
+++ kernel/generic/include/synch/spinlock.h	(revision 13108f24b5d03e6fd6e35534dd89da620a897b88)
@@ -77,5 +77,6 @@
 	}
 
-#define spinlock_lock(lock)  spinlock_lock_debug(lock)
+#define spinlock_lock(lock)	spinlock_lock_debug((lock))
+#define spinlock_unlock(lock)	spinlock_unlock_debug((lock))
 
 #else
@@ -91,5 +92,6 @@
 	}
 
-#define spinlock_lock(lock)  atomic_lock_arch(&(lock)->val)
+#define spinlock_lock(lock)	atomic_lock_arch(&(lock)->val)
+#define spinlock_unlock(lock)	spinlock_unlock_nondebug((lock))
 
 #endif
@@ -104,15 +106,14 @@
 extern int spinlock_trylock(spinlock_t *lock);
 extern void spinlock_lock_debug(spinlock_t *lock);
+extern void spinlock_unlock_debug(spinlock_t *lock);
 
 /** Unlock spinlock
  *
- * Unlock spinlock.
+ * Unlock spinlock for non-debug kernels.
  *
  * @param sl Pointer to spinlock_t structure.
  */
-static inline void spinlock_unlock(spinlock_t *lock)
+static inline void spinlock_unlock_nondebug(spinlock_t *lock)
 {
-	ASSERT(atomic_get(&lock->val) != 0);
-	
 	/*
 	 * Prevent critical section code from bleeding out this way down.
Index: kernel/generic/src/synch/spinlock.c
===================================================================
--- kernel/generic/src/synch/spinlock.c	(revision 55821eead31822cd7053e1f55e528a9ba9197182)
+++ kernel/generic/src/synch/spinlock.c	(revision 13108f24b5d03e6fd6e35534dd89da620a897b88)
@@ -120,4 +120,23 @@
 }
 
+/** Unlock spinlock
+ *
+ * Unlock spinlock.
+ *
+ * @param sl Pointer to spinlock_t structure.
+ */
+void spinlock_unlock_debug(spinlock_t *lock)
+{
+	ASSERT(atomic_get(&lock->val) != 0);
+	
+	/*
+	 * Prevent critical section code from bleeding out this way down.
+	 */
+	CS_LEAVE_BARRIER();
+	
+	atomic_set(&lock->val, 0);
+	preemption_enable();
+}
+
 #endif
 
