commit - 836647ae0821cc54f898ee48617f06de87d6a654
commit + b5a77f73fc3eda6264c0524368eec0c870e25e86
blob - 005090e453a921b37ccd862f12c01917bc1db58b
blob + 9aa8273115bae10fb61c4e9c83f4e8b19803944b
--- kernel/sys/syscall.c
+++ kernel/sys/syscall.c
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);