Browse Source

RDMA/nes: Fix hang with modified FIN handling on A0 cards

Changing state to CLOSING when FIN is received causes A0 cards to
hang.  Fix this by checking for A0 cards in FIN handling.

Signed-off-by: Faisal Latif <faisal.latif@intel.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
Faisal Latif 14 years ago
parent
commit
29da03b9d1
2 changed files with 3 additions and 1 deletions
  1. 2 1
      drivers/infiniband/hw/nes/nes_hw.c
  2. 1 0
      drivers/infiniband/hw/nes/nes_hw.h

+ 2 - 1
drivers/infiniband/hw/nes/nes_hw.c

@@ -3469,7 +3469,8 @@ static void nes_process_iwarp_aeqe(struct nes_device *nesdev,
 
 
 			if (atomic_inc_return(&nesqp->close_timer_started) == 1) {
 			if (atomic_inc_return(&nesqp->close_timer_started) == 1) {
 				if ((tcp_state == NES_AEQE_TCP_STATE_CLOSE_WAIT) &&
 				if ((tcp_state == NES_AEQE_TCP_STATE_CLOSE_WAIT) &&
-					(nesqp->ibqp_state == IB_QPS_RTS)) {
+					(nesqp->ibqp_state == IB_QPS_RTS) &&
+					((nesadapter->eeprom_version >> 16) != NES_A0)) {
 					spin_lock_irqsave(&nesqp->lock, flags);
 					spin_lock_irqsave(&nesqp->lock, flags);
 					nesqp->hw_iwarp_state = iwarp_state;
 					nesqp->hw_iwarp_state = iwarp_state;
 					nesqp->hw_tcp_state = tcp_state;
 					nesqp->hw_tcp_state = tcp_state;

+ 1 - 0
drivers/infiniband/hw/nes/nes_hw.h

@@ -45,6 +45,7 @@
 #define NES_PHY_TYPE_KR	       9
 #define NES_PHY_TYPE_KR	       9
 
 
 #define NES_MULTICAST_PF_MAX 8
 #define NES_MULTICAST_PF_MAX 8
+#define NES_A0 3
 
 
 enum pci_regs {
 enum pci_regs {
 	NES_INT_STAT = 0x0000,
 	NES_INT_STAT = 0x0000,