From: Sasha Levin Date: Thu, 18 Feb 2021 23:15:43 +0000 (-0500) Subject: Fixes for 5.10 X-Git-Tag: v5.11.1~1^2~25 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0f0fe981568e651ea53f8cb551079757b2fe5bad;p=thirdparty%2Fkernel%2Fstable-queue.git Fixes for 5.10 Signed-off-by: Sasha Levin --- diff --git a/queue-5.10/ib-isert-add-module-param-to-set-sg_tablesize-for-io.patch b/queue-5.10/ib-isert-add-module-param-to-set-sg_tablesize-for-io.patch new file mode 100644 index 00000000000..76dc773935c --- /dev/null +++ b/queue-5.10/ib-isert-add-module-param-to-set-sg_tablesize-for-io.patch @@ -0,0 +1,101 @@ +From a55e412193e86cc7e0913063bbfa3775db0aeec0 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 19 Oct 2020 12:46:28 +0300 +Subject: IB/isert: add module param to set sg_tablesize for IO cmd + +From: Max Gurtovoy + +[ Upstream commit dae7a75f1f19bffb579daf148f8d8addd2726772 ] + +Currently, iser target support max IO size of 16MiB by default. For some +adapters, allocating this amount of resources might reduce the total +number of possible connections that can be created. For those adapters, +it's preferred to reduce the max IO size to be able to create more +connections. Since there is no handshake procedure for max IO size in iser +protocol, set the default max IO size to 1MiB and add a module parameter +for enabling the option to control it for suitable adapters. + +Fixes: 317000b926b0 ("IB/isert: allocate RW ctxs according to max IO size") +Link: https://lore.kernel.org/r/20201019094628.17202-1-mgurtovoy@nvidia.com +Reported-by: Krishnamraju Eraparaju +Reviewed-by: Sagi Grimberg +Signed-off-by: Max Gurtovoy +Signed-off-by: Jason Gunthorpe +Signed-off-by: Sasha Levin +--- + drivers/infiniband/ulp/isert/ib_isert.c | 27 ++++++++++++++++++++++++- + drivers/infiniband/ulp/isert/ib_isert.h | 6 ++++++ + 2 files changed, 32 insertions(+), 1 deletion(-) + +diff --git a/drivers/infiniband/ulp/isert/ib_isert.c b/drivers/infiniband/ulp/isert/ib_isert.c +index 436e17f1d0e53..bd478947b93a5 100644 +--- a/drivers/infiniband/ulp/isert/ib_isert.c ++++ b/drivers/infiniband/ulp/isert/ib_isert.c +@@ -28,6 +28,18 @@ static int isert_debug_level; + module_param_named(debug_level, isert_debug_level, int, 0644); + MODULE_PARM_DESC(debug_level, "Enable debug tracing if > 0 (default:0)"); + ++static int isert_sg_tablesize_set(const char *val, ++ const struct kernel_param *kp); ++static const struct kernel_param_ops sg_tablesize_ops = { ++ .set = isert_sg_tablesize_set, ++ .get = param_get_int, ++}; ++ ++static int isert_sg_tablesize = ISCSI_ISER_DEF_SG_TABLESIZE; ++module_param_cb(sg_tablesize, &sg_tablesize_ops, &isert_sg_tablesize, 0644); ++MODULE_PARM_DESC(sg_tablesize, ++ "Number of gather/scatter entries in a single scsi command, should >= 128 (default: 256, max: 4096)"); ++ + static DEFINE_MUTEX(device_list_mutex); + static LIST_HEAD(device_list); + static struct workqueue_struct *isert_comp_wq; +@@ -47,6 +59,19 @@ static void isert_send_done(struct ib_cq *cq, struct ib_wc *wc); + static void isert_login_recv_done(struct ib_cq *cq, struct ib_wc *wc); + static void isert_login_send_done(struct ib_cq *cq, struct ib_wc *wc); + ++static int isert_sg_tablesize_set(const char *val, const struct kernel_param *kp) ++{ ++ int n = 0, ret; ++ ++ ret = kstrtoint(val, 10, &n); ++ if (ret != 0 || n < ISCSI_ISER_MIN_SG_TABLESIZE || ++ n > ISCSI_ISER_MAX_SG_TABLESIZE) ++ return -EINVAL; ++ ++ return param_set_int(val, kp); ++} ++ ++ + static inline bool + isert_prot_cmd(struct isert_conn *conn, struct se_cmd *cmd) + { +@@ -101,7 +126,7 @@ isert_create_qp(struct isert_conn *isert_conn, + attr.cap.max_send_wr = ISERT_QP_MAX_REQ_DTOS + 1; + attr.cap.max_recv_wr = ISERT_QP_MAX_RECV_DTOS + 1; + factor = rdma_rw_mr_factor(device->ib_device, cma_id->port_num, +- ISCSI_ISER_MAX_SG_TABLESIZE); ++ isert_sg_tablesize); + attr.cap.max_rdma_ctxs = ISCSI_DEF_XMIT_CMDS_MAX * factor; + attr.cap.max_send_sge = device->ib_device->attrs.max_send_sge; + attr.cap.max_recv_sge = 1; +diff --git a/drivers/infiniband/ulp/isert/ib_isert.h b/drivers/infiniband/ulp/isert/ib_isert.h +index 7fee4a65e181a..6c5af13db4e0d 100644 +--- a/drivers/infiniband/ulp/isert/ib_isert.h ++++ b/drivers/infiniband/ulp/isert/ib_isert.h +@@ -65,6 +65,12 @@ + */ + #define ISER_RX_SIZE (ISCSI_DEF_MAX_RECV_SEG_LEN + 1024) + ++/* Default I/O size is 1MB */ ++#define ISCSI_ISER_DEF_SG_TABLESIZE 256 ++ ++/* Minimum I/O size is 512KB */ ++#define ISCSI_ISER_MIN_SG_TABLESIZE 128 ++ + /* Maximum support is 16MB I/O size */ + #define ISCSI_ISER_MAX_SG_TABLESIZE 4096 + +-- +2.27.0 + diff --git a/queue-5.10/series b/queue-5.10/series index 5acfbe94e1e..68b0e831a98 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -3,3 +3,4 @@ vdpa_sim-add-struct-vdpasim_dev_attr-for-device-attributes.patch vdpa_sim-store-parsed-mac-address-in-a-buffer.patch vdpa_sim-make-config-generic-and-usable-for-any-device-type.patch vdpa_sim-add-get_config-callback-in-vdpasim_dev_attr.patch +ib-isert-add-module-param-to-set-sg_tablesize-for-io.patch