Hello, v2 of the pfinet backlog-locking patch, following your review. It drops the extra lock and uses net_bh_lock as you suggested: loopback_xmit() and dev_loopback_xmit() take net_bh_lock around netif_rx(), net_bh_worker() no longer takes global_lock, and net_bh() releases net_bh_lock and takes global_lock after skb_dequeue() from the backlog, then the converse before looking back at the queue. net_bh() never holds both locks, and the order is global_lock -> net_bh_lock everywhere. dev_clear_backlog() also takes net_bh_lock.
The hang that I hit when I first tested v2 was not a pfinet locking problem. It is two DDE softirq bugs in netdde, and I have sent the two fixes as a separate series. The concurrency between the receive path and the send path makes those DDE bugs much easier to hit. David Bidner (1): pfinet: Serialize the backlog queue with net_bh_lock pfinet/glue-include/linux/interrupt.h | 2 +- pfinet/linux-src/net/core/dev.c | 57 ++++++++++++++++----------- pfinet/loopback.c | 6 +-- pfinet/sched.c | 9 +++-- 4 files changed, 43 insertions(+), 31 deletions(-) -- 2.47.3
