Patch "IB/core, RDMA RW API: Do not exceed QP SGE send limit" has been added to the 4.7-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
IB/core, RDMA RW API: Do not exceed QP SGE send limit
to the 4.7-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
ib-core-rdma-rw-api-do-not-exceed-qp-sge-send-limit.patch
and it can be found in the queue-4.7 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
632bc3f65081dd1e2e5394a9161580a0f78e8839Mon Sep 17 00:00:00 2001
From: Bart Van Assche <[email protected]>
Date: Thu, 21 Jul 2016 13:03:30 -0700
Subject: IB/core, RDMA RW API: Do not exceed QP SGE send limit
From: Bart Van Assche <[email protected]>
commit 632bc3f65081dd1e2e5394a9161580a0f78e8839 upstream.
Compute the SGE limit for RDMA READ and WRITE requests in ib_create_qp(). Use that limit in the RDMA RW API implementation.
--- drivers/infiniband/core/rw.c | 10 ++-------- drivers/infiniband/core/verbs.c | 9 +++++++++ include/rdma/ib_verbs.h | 6 ++++++ 3 files changed, 17 insertions(+), 8 deletions(-)
drivers/infiniband/core/rw.c +2 -8
@@ -58,13 +58,6 @@ static inline bool rdma_rw_io_needs_mr(sreturn false; } -static inline u32 rdma_rw_max_sge (struct ib_device *dev, -enum dma_data_direction dir) -{ -return dir ==DMA_TO_DEVICE ? - dev->attrs.max_sge : dev->attrs.max_sge_rd; -} -static inline u32 rdma_rw_fr_page_list_len (struct ib_device *dev) {/* arbitrary limit to avoid allocating gigantic resources */
@@ -186,7 +179,8 @@ static int rdma_rw_init_map_wrs(struct r u64 remote_addr, u32 rkey, enum dma_data_direction dir) { struct ib_device *dev = qp->pd->device; -u32 max_sge =rdma_rw_max_sge (dev, dir); +u32 max_sge = dir ==DMA_TO_DEVICE ? qp->max_write_sge : + qp->max_read_sge;struct ib_sge *sge;u32 total_len =0 , i, j;
drivers/infiniband/core/verbs.c +9 -0
@@ -814,6 +814,15 @@ struct ib_qp *ib_create_qp(struct ib_pd } } +/* +* Note: all hw drivers guarantee that max_send_sge is lower than +* the device RDMA WRITE SGE limit but not all hw drivers ensure that +* max_send_sge <= max_sge_rd. +*/ + qp->max_write_sge = qp_init_attr->cap.max_send_sge; + qp->max_read_sge =min_t (u32, qp_init_attr->cap.max_send_sge, + device->attrs.max_sge_rd); +return qp; }EXPORT_SYMBOL (ib_create_qp);
include/rdma/ib_verbs.h +6 -0
@@ -1428,6 +1428,10 @@ struct ib_srq { } ext; }; +/* +* @max_write_sge: Maximum SGE elements per RDMA WRITE request. +* @max_read_sge: Maximum SGE elements per RDMA READ request. +*/ struct ib_qp {struct ib_device *device;struct ib_pd *pd;
@@ -1449,6 +1453,8 @@ struct ib_qp {void (*event_handler)(struct ib_event *,void *);void *qp_context;u32 qp_num; +u32 max_write_sge; +u32 max_read_sge;enum ib_qp_type qp_type; };
Patches currently in stable-queue which might be from [email protected] are
queue-4.7/dm-set-dmf_suspended-_before_-clearing-dmf_noflush_suspending.patch queue-4.7/ib-core-make-rdma_rw_ctx_init-initialize-all-used-fields.patch queue-4.7/ib-rdmavt-disable-by-default.patch queue-4.7/ib-srpt-limit-the-number-of-sg-elements-per-work-request.patch queue-4.7/ib-core-rdma-rw-api-do-not-exceed-qp-sge-send-limit.patch