linux/drivers/infiniband/hw/qib
Mike Marciniszyn c0af2c057d IB/qib: Prevent double completions after a timeout or RNR error
There is a double completion associated with error handling for RC QPs.

The sequence is:

 - The do_rc_ack() routine fields an RNR nack and there are 0
   rnr_retries configured on the QP.
 - qib_error_qp() stops the pending timer
 - qib_rc_send_complete() is called from sdma_complete()
 - qib_rc_send_complete() starts the timer because the msb of the psn
   just completed says an ack is needed.
 - a bunch of flushes occur as ipoib posts WQEs to an error'ed QP
 - rc_timeout() calls qib_restart_rc()
 - qib_restart_rc() calls qib_send_complete() with a
   IB_WC_RETRY_EXC_ERR on a wqe that has already been completed in the
   past

The fix avoids starting the timer since another packet will never
arrive.

Signed-off-by: Mike Marciniszyn <mike.marciniszyn@qlogic.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
2011-02-17 14:04:50 -08:00
..
Kconfig
Makefile IB/qib: Use request_firmware() to load SD7220 firmware 2010-07-08 13:27:05 -07:00
qib_6120_regs.h
qib_7220_regs.h
qib_7220.h IB/qib: Use request_firmware() to load SD7220 firmware 2010-07-08 13:27:05 -07:00
qib_7322_regs.h IB/qib: Mask hardware error during link reset 2010-07-06 14:13:20 -07:00
qib_common.h IB/qib: Allow PSM to select from multiple port assignment algorithms 2010-07-21 11:39:36 -07:00
qib_cq.c IB/qib: Generate completion callback on errors 2011-01-10 17:42:19 -08:00
qib_diag.c llseek: automatically add .llseek fop 2010-10-15 15:53:27 +02:00
qib_dma.c
qib_driver.c IB/qib: Issue pre-emptive NAKs on eager buffer overflow 2011-01-10 17:42:22 -08:00
qib_eeprom.c
qib_file_ops.c IB/qib: Fix context allocation with multiple HCAs 2011-01-10 17:42:20 -08:00
qib_fs.c fs: dcache rationalise dget variants 2011-01-07 17:50:24 +11:00
qib_iba6120.c IB/qib: Fix interrupt mitigation 2011-01-10 17:42:21 -08:00
qib_iba7220.c RDMA: Update workqueue usage 2011-01-16 21:16:31 -08:00
qib_iba7322.c IB/qib: Hold link for TX SERDES settings 2011-01-28 15:30:02 -08:00
qib_init.c RDMA: Update workqueue usage 2011-01-16 21:16:31 -08:00
qib_intr.c IB/qib: Handle transitions from ACTIVE_DEFERRED to ACTIVE better 2011-01-10 17:42:20 -08:00
qib_keys.c IB/qib: Fix refcount leak in lkey/rkey validation 2011-01-10 17:42:23 -08:00
qib_mad.c IB/qib: Set port physical state even if other fields are invalid 2011-01-10 17:42:19 -08:00
qib_mad.h
qib_mmap.c
qib_mr.c IB/qib: RDMA lkey/rkey validation is inefficient for large MRs 2011-01-10 17:42:22 -08:00
qib_pcie.c IB/qib: clean up properly if pci_set_consistent_dma_mask() fails 2010-10-26 16:09:02 -07:00
qib_pio_copy.c
qib_qp.c IB/qib: Change QPN increment 2011-01-10 17:42:22 -08:00
qib_qsfp.c RDMA: Update workqueue usage 2011-01-16 21:16:31 -08:00
qib_qsfp.h
qib_rc.c IB/qib: Prevent double completions after a timeout or RNR error 2011-02-17 14:04:50 -08:00
qib_ruc.c
qib_sd7220.c IB/qib: Use request_firmware() to load SD7220 firmware 2010-07-08 13:27:05 -07:00
qib_sdma.c IB/qib: Fix race between qib_error_qp() and receive packet processing 2010-08-03 13:59:47 -07:00
qib_srq.c
qib_sysfs.c IB/qib: Allow writes to the diag_counters to be able to clear them 2010-08-03 13:59:19 -07:00
qib_twsi.c
qib_tx.c IB/qib: Avoid variable-length array 2010-07-19 13:21:24 -07:00
qib_uc.c IB/qib: Process RDMA WRITE ONLY with IMMEDIATE properly 2010-10-22 22:12:15 -07:00
qib_ud.c IB/qib: Add fix missing from earlier patch 2011-01-10 17:42:21 -08:00
qib_user_pages.c
qib_user_sdma.c IB/qib: Reset packet list after freeing 2011-01-10 17:42:21 -08:00
qib_user_sdma.h
qib_verbs_mcast.c
qib_verbs.c IB/qib: Fix race between qib_error_qp() and receive packet processing 2010-08-03 13:59:47 -07:00
qib_verbs.h RDMA: Update workqueue usage 2011-01-16 21:16:31 -08:00
qib_wc_ppc64.c
qib_wc_x86_64.c
qib.h IB/qib: Fix interrupt mitigation 2011-01-10 17:42:21 -08:00