linux/drivers/infiniband/ulp/ipoib
Eli Cohen 57ce41d1d1 IB/ipoib: Fix transmit queue stalling forever
Commit f56bcd80 ("IPoIB: Use separate CQ for UD send completions")
introduced a bug where the transmit queue could get stopped and never
woken up.  The problem is that send completions are only polled at the
end of the xmit function, so if the send queue fills up and the xmit
path stops the queue, then there is no way for send completions to
ever get polled, and so the transmit queue stays stopped forever.

Fix this by arming the send CQ just before posting the last send
request that fills the send queue.  Then, when the completion event
handler is called, drain the send CQ.  Since it is possible that not
enough send completions are in the CQ, verify that the the net queue
has been woken up after draining the send CQ, and if not arm a timer
and drain again at the timer function.

Signed-off-by: Roland Dreier <rolandd@cisco.com>
2008-04-30 20:02:45 -07:00
..
Kconfig IB: Use menuconfig for InfiniBand menu 2007-07-09 20:12:26 -07:00
Makefile IPoIB: Add basic ethtool support 2008-04-16 21:09:32 -07:00
ipoib.h IB/ipoib: Fix transmit queue stalling forever 2008-04-30 20:02:45 -07:00
ipoib_cm.c IPoIB: Use separate CQ for UD send completions 2008-04-29 13:46:53 -07:00
ipoib_ethtool.c IPoIB: Use separate CQ for UD send completions 2008-04-29 13:46:53 -07:00
ipoib_fs.c IPoIB: Constify seq_operations function pointer tables 2008-01-25 14:17:46 -08:00
ipoib_ib.c IB/ipoib: Fix transmit queue stalling forever 2008-04-30 20:02:45 -07:00
ipoib_main.c IPoIB: Use separate CQ for UD send completions 2008-04-29 13:46:53 -07:00
ipoib_multicast.c IPoIB: Handle 4K IB MTU for UD (datagram) mode 2008-04-23 11:55:45 -07:00
ipoib_verbs.c IB/ipoib: Fix transmit queue stalling forever 2008-04-30 20:02:45 -07:00
ipoib_vlan.c IPoIB: Copy child MTU from parent 2008-04-29 13:46:53 -07:00