DDE's __do_softirq() runs a bounded retry loop and returns when the
softirq pending bits are still set after MAX_SOFTIRQ_RETRIES. Linux
wakes ksoftirqd at that point; DDE has no such helper, so the softirq
thread immediately blocks again on dde_softirq_sem and the pending work
is never processed.
Post dde_softirq_sem before returning when softirqs are still pending,
mirroring mainline's wakeup_softirqd().
* libdde_linux26/lib/src/arch/l4/softirq.c (__do_softirq): Wake the
softirq thread if pending work remains.
---
libdde_linux26/lib/src/arch/l4/softirq.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/libdde_linux26/lib/src/arch/l4/softirq.c
b/libdde_linux26/lib/src/arch/l4/softirq.c
index d93bfaf..2efa24e 100644
--- a/libdde_linux26/lib/src/arch/l4/softirq.c
+++ b/libdde_linux26/lib/src/arch/l4/softirq.c
@@ -217,6 +217,9 @@ void __do_softirq(void)
* (e.g., an IRQ thread or another tasklet). */
} while (local_softirq_pending() && --retries);
+ if (local_softirq_pending())
+ ddekit_sem_up(dde_softirq_sem);
+
}
--
2.47.3