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


Reply via email to