linux/drivers/infiniband/hw/hfi1
Mitko Haralanov b777f154a0 IB/hfi1: Remove usage of qp->s_cur_sge
The s_cur_sge field in the qp structure holds a pointer to the
SGE of the currently processed WQE. It assumes the protection
of the RVT_S_BUSY flag to prevent the changing of this field
while the send engine is using it. This scheme works as long
as there is only one instance of the send engine running at a
time.

Scaling of the send engine to multiple cores would break this
assumption as there could be multiple instances of the send engine
running on different CPUs. This opens a window where the QP's
RVT_S_BUSY flag is not set but the send engine is still running.

To prevent accidental changing of the s_cur_sge pointer, the QP's
dependence on it is removed. The SGE pointer is now stored in the
verbs_txreq, which is a per-packet data structure. This ensures
that each individual packet has it's own pointer, which is setup
while the RVT_S_BUSY flag is set.

Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Reviewed-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Mitko Haralanov <mitko.haralanov@intel.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
2016-12-11 15:29:42 -05:00
..
affinity.c IB/hfi1: Add irq affinity notification handler 2016-10-02 08:42:18 -04:00
affinity.h IB/hfi1: Remove definition of unused hfi1_affinity struct 2016-12-11 15:29:42 -05:00
aspm.h
chip_registers.h IB/hfi1: Add active channel and backplane support for integrated devices 2016-11-15 16:37:27 -05:00
chip.c IB/hfi1: Unify access to GUID entries 2016-11-15 16:25:59 -05:00
chip.h IB/hfi1: Adjust hardware buffering parameter 2016-10-02 08:42:15 -04:00
common.h IB/qib,IB/hfi: Use core common header file 2016-10-02 08:42:06 -04:00
debugfs.c IB/hfi1: Export 8051 memory and LCB registers via debugfs 2016-12-11 15:25:13 -05:00
debugfs.h
device.c
device.h
dma.c
driver.c IB/qib,IB/hfi: Use core common header file 2016-10-02 08:42:06 -04:00
efivar.c
efivar.h
eprom.c IB/hfi1: Read new EPROM format 2016-12-11 15:25:13 -05:00
eprom.h IB/hfi1: Add ability to read platform config from the EPROM 2016-10-02 08:42:20 -04:00
file_ops.c IB/hfi1: Restore EPROM read ability 2016-10-02 08:42:19 -04:00
firmware.c IB/hfi1: Fix dc8051 multiple qword memory reads 2016-12-11 15:25:13 -05:00
hfi.h IB/hfi1: Remove definition of unused hfi1_affinity struct 2016-12-11 15:29:42 -05:00
init.c IB/hfi1: Fix resource release in context allocation 2016-10-02 08:42:17 -04:00
intr.c
iowait.h IB/hfi1: Add unique txwait_lock for txreq events 2016-11-15 16:25:59 -05:00
Kconfig Second round of merge items for 4.8 2016-08-04 20:26:31 -04:00
mad.c IB/hfi1: Unify access to GUID entries 2016-11-15 16:25:59 -05:00
mad.h IB/hfi1: Clean up port state structure definition 2016-08-02 12:00:54 -04:00
Makefile IB/hfi1: Remove TWSI references 2016-08-02 15:47:42 -04:00
mmu_rb.c IB/hfi1: Add cache evict LRU list 2016-08-02 22:46:21 -04:00
mmu_rb.h IB/hfi1: Remove unneeded mm argument in remove function 2016-08-02 22:46:21 -04:00
opa_compat.h
pcie.c IB/hfi1: Add static PCIe Gen3 CTLE tuning 2016-08-02 16:00:58 -04:00
pio_copy.c IB/hfi1: Optimize pio_buf and send_context structs 2016-11-15 16:37:27 -05:00
pio.c IB/hfi1: Optimize pio_buf and send_context structs 2016-11-15 16:37:27 -05:00
pio.h IB/hfi1: Optimize pio_buf and send_context structs 2016-11-15 16:37:27 -05:00
platform.c IB/hfi1: Add special setting for low power AOC 2016-12-11 15:29:42 -05:00
platform.h IB/hfi1: Add active channel and backplane support for integrated devices 2016-11-15 16:37:27 -05:00
qp.c IB/hfi1: Add unique txwait_lock for txreq events 2016-11-15 16:25:59 -05:00
qp.h IB/hfi1: Rename struct ahg_ib_header to struct hfi1_ahg_info 2016-08-02 16:00:58 -04:00
qsfp.c IB/hfi1: Extend i2c timeout 2016-10-02 08:42:13 -04:00
qsfp.h IB/hfi1: Fetch monitor values on-demand for CableInfo query 2016-08-22 14:31:41 -04:00
rc.c IB/hfi1: Remove usage of qp->s_cur_sge 2016-12-11 15:29:42 -05:00
ruc.c IB/hfi1: Remove dependence on qp->s_cur_size 2016-12-11 15:25:13 -05:00
sdma_txreq.h
sdma.c IB/hfi1: Inline sdma_txclean() for verbs pio 2016-11-15 16:25:59 -05:00
sdma.h IB/hfi1: Inline sdma_txclean() for verbs pio 2016-11-15 16:25:59 -05:00
sysfs.c IB/hfi1: Add a new VL sysfs attribute for sdma engines 2016-10-02 08:42:18 -04:00
trace_ctxts.h IB/hfi1: Fix user-space buffers mapping with IOMMU enabled 2016-10-02 08:42:07 -04:00
trace_dbg.h IB/hfi1: Separate tracepoints into specific headers 2016-08-02 12:00:54 -04:00
trace_ibhdrs.h IB/qib,IB/hfi: Use core common header file 2016-10-02 08:42:06 -04:00
trace_misc.h IB/hfi1: Separate tracepoints into specific headers 2016-08-02 12:00:54 -04:00
trace_rc.h IB/hfi1: Separate tracepoints into specific headers 2016-08-02 12:00:54 -04:00
trace_rx.h IB/qib,IB/hfi: Use core common header file 2016-10-02 08:42:06 -04:00
trace_tx.h IB/hfi1: Fix trace sparse errors 2016-08-02 12:00:54 -04:00
trace.c IB/hfi1: Fix trace of atomic ack 2016-10-02 08:42:21 -04:00
trace.h IB/hfi1: Separate tracepoints into specific headers 2016-08-02 12:00:54 -04:00
uc.c IB/hfi1: Remove usage of qp->s_cur_sge 2016-12-11 15:29:42 -05:00
ud.c IB/hfi1: Remove usage of qp->s_cur_sge 2016-12-11 15:29:42 -05:00
user_exp_rcv.c IB/hfi1: Fix memory leak during unexpected shutdown 2016-08-02 22:46:21 -04:00
user_exp_rcv.h
user_pages.c IB/hfi1: Make use of mm consistent 2016-08-02 22:46:21 -04:00
user_sdma.c IB/hfi1: Disable header suppression for short packets 2016-12-11 15:25:13 -05:00
user_sdma.h IB/hfi1: Use evict mmu rb operation 2016-08-02 22:46:21 -04:00
verbs_txreq.c IB/hfi1: Add unique txwait_lock for txreq events 2016-11-15 16:25:59 -05:00
verbs_txreq.h IB/hfi1: Remove dependence on qp->s_cur_size 2016-12-11 15:25:13 -05:00
verbs.c IB/hfi1: Remove usage of qp->s_cur_sge 2016-12-11 15:29:42 -05:00
verbs.h IB/hfi1: Unify access to GUID entries 2016-11-15 16:25:59 -05:00