commit b5a77f73fc3eda6264c0524368eec0c870e25e86 from: int16h date: Fri Dec 5 13:01:16 2025 UTC Sched: reverted pause loop that was blocking input. WIP: polling-based IPC issues with sched_context_switches 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);