Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband:
IB/qib: Prevent double completions after a timeout or RNR error
IB/qib: Fix double add_timer()
RDMA/nes: Don't generate async events for unregistered devices

+24 -13
+20 -12
drivers/infiniband/hw/nes/nes_hw.c
··· 2610 netif_carrier_on(nesvnic->netdev); 2611 2612 spin_lock(&nesvnic->port_ibevent_lock); 2613 - if (nesdev->iw_status == 0) { 2614 - nesdev->iw_status = 1; 2615 - nes_port_ibevent(nesvnic); 2616 } 2617 spin_unlock(&nesvnic->port_ibevent_lock); 2618 } ··· 2644 netif_carrier_off(nesvnic->netdev); 2645 2646 spin_lock(&nesvnic->port_ibevent_lock); 2647 - if (nesdev->iw_status == 1) { 2648 - nesdev->iw_status = 0; 2649 - nes_port_ibevent(nesvnic); 2650 } 2651 spin_unlock(&nesvnic->port_ibevent_lock); 2652 } ··· 2707 netif_carrier_on(nesvnic->netdev); 2708 2709 spin_lock(&nesvnic->port_ibevent_lock); 2710 - if (nesdev->iw_status == 0) { 2711 - nesdev->iw_status = 1; 2712 - nes_port_ibevent(nesvnic); 2713 } 2714 spin_unlock(&nesvnic->port_ibevent_lock); 2715 } ··· 2729 netif_carrier_off(nesvnic->netdev); 2730 2731 spin_lock(&nesvnic->port_ibevent_lock); 2732 - if (nesdev->iw_status == 1) { 2733 - nesdev->iw_status = 0; 2734 - nes_port_ibevent(nesvnic); 2735 } 2736 spin_unlock(&nesvnic->port_ibevent_lock); 2737 }
··· 2610 netif_carrier_on(nesvnic->netdev); 2611 2612 spin_lock(&nesvnic->port_ibevent_lock); 2613 + if (nesvnic->of_device_registered) { 2614 + if (nesdev->iw_status == 0) { 2615 + nesdev->iw_status = 1; 2616 + nes_port_ibevent(nesvnic); 2617 + } 2618 } 2619 spin_unlock(&nesvnic->port_ibevent_lock); 2620 } ··· 2642 netif_carrier_off(nesvnic->netdev); 2643 2644 spin_lock(&nesvnic->port_ibevent_lock); 2645 + if (nesvnic->of_device_registered) { 2646 + if (nesdev->iw_status == 1) { 2647 + nesdev->iw_status = 0; 2648 + nes_port_ibevent(nesvnic); 2649 + } 2650 } 2651 spin_unlock(&nesvnic->port_ibevent_lock); 2652 } ··· 2703 netif_carrier_on(nesvnic->netdev); 2704 2705 spin_lock(&nesvnic->port_ibevent_lock); 2706 + if (nesvnic->of_device_registered) { 2707 + if (nesdev->iw_status == 0) { 2708 + nesdev->iw_status = 1; 2709 + nes_port_ibevent(nesvnic); 2710 + } 2711 } 2712 spin_unlock(&nesvnic->port_ibevent_lock); 2713 } ··· 2723 netif_carrier_off(nesvnic->netdev); 2724 2725 spin_lock(&nesvnic->port_ibevent_lock); 2726 + if (nesvnic->of_device_registered) { 2727 + if (nesdev->iw_status == 1) { 2728 + nesdev->iw_status = 0; 2729 + nes_port_ibevent(nesvnic); 2730 + } 2731 } 2732 spin_unlock(&nesvnic->port_ibevent_lock); 2733 }
+4 -1
drivers/infiniband/hw/qib/qib_rc.c
··· 1005 * there are still requests that haven't been acked. 1006 */ 1007 if ((psn & IB_BTH_REQ_ACK) && qp->s_acked != qp->s_tail && 1008 - !(qp->s_flags & (QIB_S_TIMER | QIB_S_WAIT_RNR | QIB_S_WAIT_PSN))) 1009 start_timer(qp); 1010 1011 while (qp->s_last != qp->s_acked) { ··· 1440 } 1441 1442 spin_lock_irqsave(&qp->s_lock, flags); 1443 1444 /* Ignore invalid responses. */ 1445 if (qib_cmp24(psn, qp->s_next_psn) >= 0)
··· 1005 * there are still requests that haven't been acked. 1006 */ 1007 if ((psn & IB_BTH_REQ_ACK) && qp->s_acked != qp->s_tail && 1008 + !(qp->s_flags & (QIB_S_TIMER | QIB_S_WAIT_RNR | QIB_S_WAIT_PSN)) && 1009 + (ib_qib_state_ops[qp->state] & QIB_PROCESS_RECV_OK)) 1010 start_timer(qp); 1011 1012 while (qp->s_last != qp->s_acked) { ··· 1439 } 1440 1441 spin_lock_irqsave(&qp->s_lock, flags); 1442 + if (!(ib_qib_state_ops[qp->state] & QIB_PROCESS_RECV_OK)) 1443 + goto ack_done; 1444 1445 /* Ignore invalid responses. */ 1446 if (qib_cmp24(psn, qp->s_next_psn) >= 0)