Applied, thanks! Samuel
David Bidner, le lun. 12 oct. 2026 20:27:24 +0200, a ecrit: > GNU/Hurd's netdde can stop completely under load: TCP and ARP stop > responding while the machine and the serial console stay alive. Both > bugs are in the DDE softirq layer. > > 1. __do_softirq() runs a bounded retry loop and returns while softirqs > are still pending. Linux wakes ksoftirqd there; DDE has no such > helper, so the softirq thread blocks again on dde_softirq_sem and the > pending work is never done. This is reachable from net_rx_action()'s > softnet_break, which re-raises NET_RX_SOFTIRQ with > __raise_softirq_irqoff(), a macro that only sets the pending bit and > does not post the semaphore. With e1000 the interrupt stays masked, so > no later interrupt arrives to wake the thread. > > 2. DDE runs each Linux "cpu" as CPU 0 in separate threads and > local_irq_save() only disables interrupts on the current thread, so the > one softirq pending word (irq_stat[0].__softirq_pending) is shared > without real exclusion. It is updated with a plain read-modify-write, > so a raise can be lost between the softirq thread's read and its clear. > > Patch 1 mirrors mainline's wakeup_softirqd(): if softirqs are still > pending after the retry budget, post dde_softirq_sem before returning. > Patch 2 makes the raise and the read-and-clear atomic > (__sync_fetch_and_or(), __sync_lock_test_and_set(..., 0)). > > David Bidner (2): > libdde_linux26: Wake the softirq thread when __do_softirq gives up > libdde_linux26: Make the softirq pending word updates atomic > > .../contrib/include/linux/interrupt.h | 7 ++++++- > libdde_linux26/lib/src/arch/l4/softirq.c | 18 ++++++++++++++---- > 2 files changed, 20 insertions(+), 5 deletions(-) > > -- > 2.47.3 > > -- Samuel <i8b4uUnderground> d-_-b <BonyNoMore> how u make that inverted b? <BonyNoMore> wait <BonyNoMore> never mind
