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


Reply via email to