aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Tabachnik <alext@mellanox.com>2014-03-05 12:43:46 -0500
committerRoland Dreier <roland@purestorage.com>2014-03-18 01:33:58 -0400
commit7f73384752af3caf0756cf807b2f7fbac50982d1 (patch)
treecc18e0c1ced14f344c95ed78eba17f06a507b360
parent5f588e3d0c9483ef2fd35f7fe5e104f236b704f8 (diff)
IB/iser: Introduce pi_enable, pi_guard module parameters
Use modparams to activate protection information support. pi_enable bool: Based on this parameter iSER will know if it should support T10-PI. We don't want to do this by default as it requires to allocate and initialize extra resources. In case pi_enable=N, iSER won't publish to SCSI midlayer any DIF capabilities. pi_guard int: Based on this parameter iSER will publish DIX guard type support to SCSI midlayer. 0 means CRC is allowed to be passed in DIX buffers, 1 (or non-zero) means IP-CSUM is allowed to be passed in DIX buffers. Note that over the wire, only CRC is allowed. In the next phase, it is worth considering passing these parameters from iscsid via nlmsg. This will allow these parameters to be connection based rather than global. Signed-off-by: Alex Tabachnik <alext@mellanox.com> Signed-off-by: Sagi Grimberg <sagig@mellanox.com> Signed-off-by: Roland Dreier <roland@purestorage.com>
-rw-r--r--drivers/infiniband/ulp/iser/iscsi_iser.c8
-rw-r--r--drivers/infiniband/ulp/iser/iscsi_iser.h3
-rw-r--r--drivers/infiniband/ulp/iser/iser_verbs.c13
3 files changed, 24 insertions, 0 deletions
diff --git a/drivers/infiniband/ulp/iser/iscsi_iser.c b/drivers/infiniband/ulp/iser/iscsi_iser.c
index dd03cfe596d6..cfa952e9ac90 100644
--- a/drivers/infiniband/ulp/iser/iscsi_iser.c
+++ b/drivers/infiniband/ulp/iser/iscsi_iser.c
@@ -82,6 +82,8 @@ static unsigned int iscsi_max_lun = 512;
82module_param_named(max_lun, iscsi_max_lun, uint, S_IRUGO); 82module_param_named(max_lun, iscsi_max_lun, uint, S_IRUGO);
83 83
84int iser_debug_level = 0; 84int iser_debug_level = 0;
85bool iser_pi_enable = false;
86int iser_pi_guard = 0;
85 87
86MODULE_DESCRIPTION("iSER (iSCSI Extensions for RDMA) Datamover"); 88MODULE_DESCRIPTION("iSER (iSCSI Extensions for RDMA) Datamover");
87MODULE_LICENSE("Dual BSD/GPL"); 89MODULE_LICENSE("Dual BSD/GPL");
@@ -91,6 +93,12 @@ MODULE_VERSION(DRV_VER);
91module_param_named(debug_level, iser_debug_level, int, 0644); 93module_param_named(debug_level, iser_debug_level, int, 0644);
92MODULE_PARM_DESC(debug_level, "Enable debug tracing if > 0 (default:disabled)"); 94MODULE_PARM_DESC(debug_level, "Enable debug tracing if > 0 (default:disabled)");
93 95
96module_param_named(pi_enable, iser_pi_enable, bool, 0644);
97MODULE_PARM_DESC(pi_enable, "Enable T10-PI offload support (default:disabled)");
98
99module_param_named(pi_guard, iser_pi_guard, int, 0644);
100MODULE_PARM_DESC(pi_guard, "T10-PI guard_type, 0:CRC|1:IP_CSUM (default:CRC)");
101
94struct iser_global ig; 102struct iser_global ig;
95 103
96void 104void
diff --git a/drivers/infiniband/ulp/iser/iscsi_iser.h b/drivers/infiniband/ulp/iser/iscsi_iser.h
index 623defa187b2..011003f04253 100644
--- a/drivers/infiniband/ulp/iser/iscsi_iser.h
+++ b/drivers/infiniband/ulp/iser/iscsi_iser.h
@@ -317,6 +317,7 @@ struct iser_conn {
317 unsigned int rx_desc_head; 317 unsigned int rx_desc_head;
318 struct iser_rx_desc *rx_descs; 318 struct iser_rx_desc *rx_descs;
319 struct ib_recv_wr rx_wr[ISER_MIN_POSTED_RX]; 319 struct ib_recv_wr rx_wr[ISER_MIN_POSTED_RX];
320 bool pi_support;
320 321
321 /* Connection memory registration pool */ 322 /* Connection memory registration pool */
322 union { 323 union {
@@ -371,6 +372,8 @@ struct iser_global {
371 372
372extern struct iser_global ig; 373extern struct iser_global ig;
373extern int iser_debug_level; 374extern int iser_debug_level;
375extern bool iser_pi_enable;
376extern int iser_pi_guard;
374 377
375/* allocate connection resources needed for rdma functionality */ 378/* allocate connection resources needed for rdma functionality */
376int iser_conn_set_full_featured_mode(struct iscsi_conn *conn); 379int iser_conn_set_full_featured_mode(struct iscsi_conn *conn);
diff --git a/drivers/infiniband/ulp/iser/iser_verbs.c b/drivers/infiniband/ulp/iser/iser_verbs.c
index 6a5f4245182a..4c27f553df39 100644
--- a/drivers/infiniband/ulp/iser/iser_verbs.c
+++ b/drivers/infiniband/ulp/iser/iser_verbs.c
@@ -607,6 +607,19 @@ static int iser_addr_handler(struct rdma_cm_id *cma_id)
607 ib_conn = (struct iser_conn *)cma_id->context; 607 ib_conn = (struct iser_conn *)cma_id->context;
608 ib_conn->device = device; 608 ib_conn->device = device;
609 609
610 /* connection T10-PI support */
611 if (iser_pi_enable) {
612 if (!(device->dev_attr.device_cap_flags &
613 IB_DEVICE_SIGNATURE_HANDOVER)) {
614 iser_warn("T10-PI requested but not supported on %s, "
615 "continue without T10-PI\n",
616 ib_conn->device->ib_device->name);
617 ib_conn->pi_support = false;
618 } else {
619 ib_conn->pi_support = true;
620 }
621 }
622
610 ret = rdma_resolve_route(cma_id, 1000); 623 ret = rdma_resolve_route(cma_id, 1000);
611 if (ret) { 624 if (ret) {
612 iser_err("resolve route failed: %d\n", ret); 625 iser_err("resolve route failed: %d\n", ret);