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