Index: libcfa/src/concurrency/io.cfa
===================================================================
--- libcfa/src/concurrency/io.cfa	(revision 7ef162b296a22a5053fda4315076997f08c2f5cd)
+++ libcfa/src/concurrency/io.cfa	(revision 6ddef36750abc1c69002b08f99e2656c46da4150)
@@ -502,39 +502,41 @@
 	}
 
-	bool __kernel_read(processor * proc, io_future_t & future, char buf[], int fd) {
-		$io_context * ctx = proc->io.ctx;
-		/* paranoid */ verify( ! __preemption_enabled() );
-		/* paranoid */ verify( proc == __cfaabi_tls.this_processor );
-		/* paranoid */ verify( ctx );
-
-		__u32 idx;
-		struct io_uring_sqe * sqe;
-
-		// We can proceed to the fast path
-		if( !__alloc(ctx, &idx, 1) ) return false;
-
-		// Allocation was successful
-		__fill( &sqe, 1, &idx, ctx );
-
-		sqe->opcode = IORING_OP_READ;
-		sqe->user_data = (uintptr_t)&future;
-		sqe->flags = 0;
-		sqe->ioprio = 0;
-		sqe->fd = 0;
-		sqe->off = 0;
-		sqe->fsync_flags = 0;
-		sqe->__pad2[0] = 0;
-		sqe->__pad2[1] = 0;
-		sqe->__pad2[2] = 0;
-		sqe->addr = (uintptr_t)buf;
-		sqe->len = sizeof(uint64_t);
-
-		asm volatile("": : :"memory");
-
-		/* paranoid */ verify( sqe->user_data == (uintptr_t)&future );
-		__submit( ctx, &idx, 1, true );
-
-		/* paranoid */ verify( proc == __cfaabi_tls.this_processor );
-		/* paranoid */ verify( ! __preemption_enabled() );
-	}
+	#if !defined(IO_URING_IDLE)
+		bool __kernel_read(processor * proc, io_future_t & future, char buf[], int fd) {
+			$io_context * ctx = proc->io.ctx;
+			/* paranoid */ verify( ! __preemption_enabled() );
+			/* paranoid */ verify( proc == __cfaabi_tls.this_processor );
+			/* paranoid */ verify( ctx );
+
+			__u32 idx;
+			struct io_uring_sqe * sqe;
+
+			// We can proceed to the fast path
+			if( !__alloc(ctx, &idx, 1) ) return false;
+
+			// Allocation was successful
+			__fill( &sqe, 1, &idx, ctx );
+
+			sqe->opcode = IORING_OP_READ;
+			sqe->user_data = (uintptr_t)&future;
+			sqe->flags = 0;
+			sqe->ioprio = 0;
+			sqe->fd = 0;
+			sqe->off = 0;
+			sqe->fsync_flags = 0;
+			sqe->__pad2[0] = 0;
+			sqe->__pad2[1] = 0;
+			sqe->__pad2[2] = 0;
+			sqe->addr = (uintptr_t)buf;
+			sqe->len = sizeof(uint64_t);
+
+			asm volatile("": : :"memory");
+
+			/* paranoid */ verify( sqe->user_data == (uintptr_t)&future );
+			__submit( ctx, &idx, 1, true );
+
+			/* paranoid */ verify( proc == __cfaabi_tls.this_processor );
+			/* paranoid */ verify( ! __preemption_enabled() );
+		}
+	#endif
 #endif
Index: libcfa/src/concurrency/kernel.cfa
===================================================================
--- libcfa/src/concurrency/kernel.cfa	(revision 7ef162b296a22a5053fda4315076997f08c2f5cd)
+++ libcfa/src/concurrency/kernel.cfa	(revision 6ddef36750abc1c69002b08f99e2656c46da4150)
@@ -135,5 +135,7 @@
 static inline bool __maybe_io_drain( processor * );
 
-extern bool __kernel_read(processor * proc, io_future_t & future, char buf[], int fd);
+#if defined(IO_URING_IDLE) && defined(CFA_HAVE_LINUX_IO_URING_H)
+	extern bool __kernel_read(processor * proc, io_future_t & future, char buf[], int fd);
+#endif
 
 extern void __disable_interrupts_hard();
