Commit Diff


commit - 836647ae0821cc54f898ee48617f06de87d6a654
commit + b5a77f73fc3eda6264c0524368eec0c870e25e86
blob - 005090e453a921b37ccd862f12c01917bc1db58b
blob + 9aa8273115bae10fb61c4e9c83f4e8b19803944b
--- kernel/sys/syscall.c
+++ kernel/sys/syscall.c
@@ -4435,29 +4435,11 @@ sys_portal_recv_impl(uint64_t buf_addr, uint64_t len, 
 	task = sched_current_task();
 	sched_task_set_last_ipc_sender(task, NULL, IPC_PORTAL_INVALID_HANDLE);
 	deadlock_recv_start(task, 5000);  /* 5 second timeout */
-	{
-		uint32_t spins = 0;
-		for (;;) {
-			msg = ipc_mailbox_recv(mbox);
-			if (msg != NULL)
-				break;
-			/*
-			 * Exponential backoff to reduce CPU usage when idle:
-			 * - First 100 iterations: just yield
-			 * - Next 1000 iterations: yield + memory barrier
-			 * - After that: multiple yields per iteration
-			 */
-			spins++;
-			sched_yield();
-			if (spins > 100) {
-				__asm__ __volatile__("" ::: "memory");
-				if (spins > 1000) {
-					/* Extra yields to reduce poll rate when idle */
-					for (uint32_t i = 0; i < 10; i++)
-						sched_yield();
-				}
-			}
-		}
+	for (;;) {
+		msg = ipc_mailbox_recv(mbox);
+		if (msg != NULL)
+			break;
+		sched_yield();
 	}
 	deadlock_recv_end(task);