Index: kernel/generic/include/synch/semaphore.h
===================================================================
--- kernel/generic/include/synch/semaphore.h	(revision b7398c034409791e32e89439b6f1e7e895d99e10)
+++ kernel/generic/include/synch/semaphore.h	(revision 5df79286ec53ba587ac1719375829cb7f78acfe9)
@@ -56,4 +56,5 @@
 extern int _semaphore_down_timeout(semaphore_t *, uint32_t, unsigned int);
 extern void semaphore_up(semaphore_t *);
+extern int semaphore_count_get(semaphore_t *);
 
 #endif
Index: kernel/generic/src/synch/semaphore.c
===================================================================
--- kernel/generic/src/synch/semaphore.c	(revision b7398c034409791e32e89439b6f1e7e895d99e10)
+++ kernel/generic/src/synch/semaphore.c	(revision 5df79286ec53ba587ac1719375829cb7f78acfe9)
@@ -54,8 +54,5 @@
 {
 	waitq_initialize(&sem->wq);
-	
-	irq_spinlock_lock(&sem->wq.lock, true);
-	sem->wq.missed_wakeups = val;
-	irq_spinlock_unlock(&sem->wq.lock, true);
+	waitq_count_set(&sem->wq, val);
 }
 
@@ -92,4 +89,15 @@
 }
 
+/** Get the semaphore counter value.
+ *
+ * @param sem		Semaphore.
+ * @return		The number of threads that can down the semaphore
+ * 			without blocking.
+ */
+int semaphore_count_get(semaphore_t *sem)
+{
+	return waitq_count_get(&sem->wq);
+}
+
 /** @}
  */
