forked from Minki/linux
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
This commit is contained in:
commit
dd8240bd3e
@ -2610,9 +2610,11 @@ static void nes_process_mac_intr(struct nes_device *nesdev, u32 mac_number)
|
||||
netif_carrier_on(nesvnic->netdev);
|
||||
|
||||
spin_lock(&nesvnic->port_ibevent_lock);
|
||||
if (nesdev->iw_status == 0) {
|
||||
nesdev->iw_status = 1;
|
||||
nes_port_ibevent(nesvnic);
|
||||
if (nesvnic->of_device_registered) {
|
||||
if (nesdev->iw_status == 0) {
|
||||
nesdev->iw_status = 1;
|
||||
nes_port_ibevent(nesvnic);
|
||||
}
|
||||
}
|
||||
spin_unlock(&nesvnic->port_ibevent_lock);
|
||||
}
|
||||
@ -2642,9 +2644,11 @@ static void nes_process_mac_intr(struct nes_device *nesdev, u32 mac_number)
|
||||
netif_carrier_off(nesvnic->netdev);
|
||||
|
||||
spin_lock(&nesvnic->port_ibevent_lock);
|
||||
if (nesdev->iw_status == 1) {
|
||||
nesdev->iw_status = 0;
|
||||
nes_port_ibevent(nesvnic);
|
||||
if (nesvnic->of_device_registered) {
|
||||
if (nesdev->iw_status == 1) {
|
||||
nesdev->iw_status = 0;
|
||||
nes_port_ibevent(nesvnic);
|
||||
}
|
||||
}
|
||||
spin_unlock(&nesvnic->port_ibevent_lock);
|
||||
}
|
||||
@ -2703,9 +2707,11 @@ void nes_recheck_link_status(struct work_struct *work)
|
||||
netif_carrier_on(nesvnic->netdev);
|
||||
|
||||
spin_lock(&nesvnic->port_ibevent_lock);
|
||||
if (nesdev->iw_status == 0) {
|
||||
nesdev->iw_status = 1;
|
||||
nes_port_ibevent(nesvnic);
|
||||
if (nesvnic->of_device_registered) {
|
||||
if (nesdev->iw_status == 0) {
|
||||
nesdev->iw_status = 1;
|
||||
nes_port_ibevent(nesvnic);
|
||||
}
|
||||
}
|
||||
spin_unlock(&nesvnic->port_ibevent_lock);
|
||||
}
|
||||
@ -2723,9 +2729,11 @@ void nes_recheck_link_status(struct work_struct *work)
|
||||
netif_carrier_off(nesvnic->netdev);
|
||||
|
||||
spin_lock(&nesvnic->port_ibevent_lock);
|
||||
if (nesdev->iw_status == 1) {
|
||||
nesdev->iw_status = 0;
|
||||
nes_port_ibevent(nesvnic);
|
||||
if (nesvnic->of_device_registered) {
|
||||
if (nesdev->iw_status == 1) {
|
||||
nesdev->iw_status = 0;
|
||||
nes_port_ibevent(nesvnic);
|
||||
}
|
||||
}
|
||||
spin_unlock(&nesvnic->port_ibevent_lock);
|
||||
}
|
||||
|
@ -1005,7 +1005,8 @@ void qib_rc_send_complete(struct qib_qp *qp, struct qib_ib_header *hdr)
|
||||
* there are still requests that haven't been acked.
|
||||
*/
|
||||
if ((psn & IB_BTH_REQ_ACK) && qp->s_acked != qp->s_tail &&
|
||||
!(qp->s_flags & (QIB_S_TIMER | QIB_S_WAIT_RNR | QIB_S_WAIT_PSN)))
|
||||
!(qp->s_flags & (QIB_S_TIMER | QIB_S_WAIT_RNR | QIB_S_WAIT_PSN)) &&
|
||||
(ib_qib_state_ops[qp->state] & QIB_PROCESS_RECV_OK))
|
||||
start_timer(qp);
|
||||
|
||||
while (qp->s_last != qp->s_acked) {
|
||||
@ -1439,6 +1440,8 @@ static void qib_rc_rcv_resp(struct qib_ibport *ibp,
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&qp->s_lock, flags);
|
||||
if (!(ib_qib_state_ops[qp->state] & QIB_PROCESS_RECV_OK))
|
||||
goto ack_done;
|
||||
|
||||
/* Ignore invalid responses. */
|
||||
if (qib_cmp24(psn, qp->s_next_psn) >= 0)
|
||||
|
Loading…
Reference in New Issue
Block a user