Index: kernel/generic/src/syscall/syscall.c
===================================================================
--- kernel/generic/src/syscall/syscall.c	(revision 40a0e50451980c686fa3c99657d4ee56de0ff066)
+++ kernel/generic/src/syscall/syscall.c	(revision 5b9d80c56d80e68effc3f00989122a73cffa4af0)
@@ -60,7 +60,17 @@
 {
 	unative_t rc;
+
+#ifdef CONFIG_UDEBUG
+	bool debug;
+
+	/*
+	 * Early check for undebugged tasks. We do not lock anything as this
+	 * test need not be precise in either way.
+	 */
+	debug = THREAD->udebug.active;
 	
-#ifdef CONFIG_UDEBUG
-	udebug_syscall_event(a1, a2, a3, a4, a5, a6, id, 0, false);
+	if (debug) {
+		udebug_syscall_event(a1, a2, a3, a4, a5, a6, id, 0, false);
+	}
 #endif
 	
@@ -77,12 +87,15 @@
 	
 #ifdef CONFIG_UDEBUG
-	udebug_syscall_event(a1, a2, a3, a4, a5, a6, id, rc, true);
+	if (debug) {
+		udebug_syscall_event(a1, a2, a3, a4, a5, a6, id, rc, true);
 	
-	/*
-	 * Stopping point needed for tasks that only invoke non-blocking
-	 * system calls.
-	 */
-	udebug_stoppable_begin();
-	udebug_stoppable_end();
+		/*
+		 * Stopping point needed for tasks that only invoke
+		 * non-blocking system calls. Not needed if the task
+		 * is not being debugged (it cannot block here).
+		 */
+		udebug_stoppable_begin();
+		udebug_stoppable_end();
+	}
 #endif
 	
Index: kernel/generic/src/udebug/udebug.c
===================================================================
--- kernel/generic/src/udebug/udebug.c	(revision 40a0e50451980c686fa3c99657d4ee56de0ff066)
+++ kernel/generic/src/udebug/udebug.c	(revision 5b9d80c56d80e68effc3f00989122a73cffa4af0)
@@ -99,25 +99,4 @@
 }
 
-/** Do a preliminary check that a debugging session is in progress.
- * 
- * This only requires the THREAD->udebug.lock mutex (and not TASK->udebug.lock
- * mutex). For an undebugged task, this will never block (while there could be
- * collisions by different threads on the TASK mutex), thus improving SMP
- * perormance for undebugged tasks.
- *
- * @return	True if the thread was in a debugging session when the function
- *		checked, false otherwise.
- */
-static bool udebug_thread_precheck(void)
-{
-	bool res;
-
-	mutex_lock(&THREAD->udebug.lock);
-	res = THREAD->udebug.active;
-	mutex_unlock(&THREAD->udebug.lock);
-
-	return res;
-}
-
 /** Start of stoppable section.
  *
@@ -245,9 +224,4 @@
 
 	etype = end_variant ? UDEBUG_EVENT_SYSCALL_E : UDEBUG_EVENT_SYSCALL_B;
-
-	/* Early check for undebugged tasks */
-	if (!udebug_thread_precheck()) {
-		return;
-	}
 
 	mutex_lock(&TASK->udebug.lock);
