OpenCloudOS-Kernel/drivers/net/ethernet/sun
Aaron Young 8778b27664 ldmvsw: tx queue stuck in stopped state after LDC reset
The following patch fixes an issue with the ldmvsw driver where
the network connection of a guest domain becomes non-functional after
the guest domain has panic'd and rebooted.

The root cause was determined to be from the following series of
events:

1. Guest domain panics - resulting in the guest no longer processing
   network packets (from ldmvsw driver)
2. The ldmvsw driver (in the control domain) eventually exerts flow
   control due to no more available tx drings and stops the tx queue
   for the guest domain
3. The LDC of the network connection for the guest is reset when
   the guest domain reboots after the panic.
4. The LDC reset event is received by the ldmvsw driver and the ldmvsw
   responds by clearing the tx queue for the guest.
5. ldmvsw waits indefinitely for a DATA ACK from the guest - which is
   the normal method to re-enable the tx queue. But the ACK never comes
   because the tx queue was cleared due to the LDC reset.

To fix this issue, in addition to clearing the tx queue, re-enable the
tx queue on a LDC reset. This prevents the ldmvsw from getting caught in
this deadlocked state of waiting for a DATA ACK which will never come.

Signed-off-by: Aaron Young <Aaron.Young@oracle.com>
Acked-by: Sowmini Varadhan <sowmini.varadhan@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-10-31 15:20:29 -04:00
..
Kconfig ldmvsw: Add ldmvsw.c driver code 2016-03-18 19:33:00 -04:00
Makefile ldmvsw: Add ldmvsw.c driver code 2016-03-18 19:33:00 -04:00
cassini.c ethernet/sun: use core min/max MTU checking 2016-10-18 11:34:20 -04:00
cassini.h ethernet: Fix FSF address in file headers 2013-12-06 12:37:55 -05:00
ldmvsw.c ethernet/sun: use core min/max MTU checking 2016-10-18 11:34:20 -04:00
niu.c ethernet/sun: use core min/max MTU checking 2016-10-18 11:34:20 -04:00
niu.h
sunbmac.c net: deprecate eth_change_mtu, remove usage 2016-10-13 09:36:57 -04:00
sunbmac.h
sungem.c ethernet/sun: use core min/max MTU checking 2016-10-18 11:34:20 -04:00
sungem.h
sunhme.c net: deprecate eth_change_mtu, remove usage 2016-10-13 09:36:57 -04:00
sunhme.h sunhme: stop using net_device.{base_addr, irq}. 2012-04-07 11:47:03 +02:00
sunqe.c net: deprecate eth_change_mtu, remove usage 2016-10-13 09:36:57 -04:00
sunqe.h
sunvnet.c ethernet/sun: use core min/max MTU checking 2016-10-18 11:34:20 -04:00
sunvnet_common.c ldmvsw: tx queue stuck in stopped state after LDC reset 2016-10-31 15:20:29 -04:00
sunvnet_common.h ethernet/sun: use core min/max MTU checking 2016-10-18 11:34:20 -04:00