aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/infiniband/ulp/isert/ib_isert.c22
-rw-r--r--drivers/infiniband/ulp/isert/ib_isert.h5
2 files changed, 23 insertions, 4 deletions
diff --git a/drivers/infiniband/ulp/isert/ib_isert.c b/drivers/infiniband/ulp/isert/ib_isert.c
index 14fd0f401c3d..4c3d66009237 100644
--- a/drivers/infiniband/ulp/isert/ib_isert.c
+++ b/drivers/infiniband/ulp/isert/ib_isert.c
@@ -41,6 +41,12 @@ static struct workqueue_struct *isert_rx_wq;
41static struct workqueue_struct *isert_comp_wq; 41static struct workqueue_struct *isert_comp_wq;
42 42
43static void 43static void
44isert_unmap_cmd(struct isert_cmd *isert_cmd, struct isert_conn *isert_conn);
45static int
46isert_map_rdma(struct iscsi_conn *conn, struct iscsi_cmd *cmd,
47 struct isert_rdma_wr *wr);
48
49static void
44isert_qp_event_callback(struct ib_event *e, void *context) 50isert_qp_event_callback(struct ib_event *e, void *context)
45{ 51{
46 struct isert_conn *isert_conn = (struct isert_conn *)context; 52 struct isert_conn *isert_conn = (struct isert_conn *)context;
@@ -211,6 +217,10 @@ isert_create_device_ib_res(struct isert_device *device)
211 struct isert_cq_desc *cq_desc; 217 struct isert_cq_desc *cq_desc;
212 int ret = 0, i, j; 218 int ret = 0, i, j;
213 219
220 /* asign function handlers */
221 device->reg_rdma_mem = isert_map_rdma;
222 device->unreg_rdma_mem = isert_unmap_cmd;
223
214 device->cqs_used = min_t(int, num_online_cpus(), 224 device->cqs_used = min_t(int, num_online_cpus(),
215 device->ib_device->num_comp_vectors); 225 device->ib_device->num_comp_vectors);
216 device->cqs_used = min(ISERT_MAX_CQ, device->cqs_used); 226 device->cqs_used = min(ISERT_MAX_CQ, device->cqs_used);
@@ -1261,6 +1271,7 @@ isert_put_cmd(struct isert_cmd *isert_cmd)
1261 struct iscsi_cmd *cmd = isert_cmd->iscsi_cmd; 1271 struct iscsi_cmd *cmd = isert_cmd->iscsi_cmd;
1262 struct isert_conn *isert_conn = isert_cmd->conn; 1272 struct isert_conn *isert_conn = isert_cmd->conn;
1263 struct iscsi_conn *conn = isert_conn->conn; 1273 struct iscsi_conn *conn = isert_conn->conn;
1274 struct isert_device *device = isert_conn->conn_device;
1264 1275
1265 pr_debug("Entering isert_put_cmd: %p\n", isert_cmd); 1276 pr_debug("Entering isert_put_cmd: %p\n", isert_cmd);
1266 1277
@@ -1274,7 +1285,7 @@ isert_put_cmd(struct isert_cmd *isert_cmd)
1274 if (cmd->data_direction == DMA_TO_DEVICE) 1285 if (cmd->data_direction == DMA_TO_DEVICE)
1275 iscsit_stop_dataout_timer(cmd); 1286 iscsit_stop_dataout_timer(cmd);
1276 1287
1277 isert_unmap_cmd(isert_cmd, isert_conn); 1288 device->unreg_rdma_mem(isert_cmd, isert_conn);
1278 transport_generic_free_cmd(&cmd->se_cmd, 0); 1289 transport_generic_free_cmd(&cmd->se_cmd, 0);
1279 break; 1290 break;
1280 case ISCSI_OP_SCSI_TMFUNC: 1291 case ISCSI_OP_SCSI_TMFUNC:
@@ -1348,9 +1359,10 @@ isert_completion_rdma_read(struct iser_tx_desc *tx_desc,
1348 struct iscsi_cmd *cmd = isert_cmd->iscsi_cmd; 1359 struct iscsi_cmd *cmd = isert_cmd->iscsi_cmd;
1349 struct se_cmd *se_cmd = &cmd->se_cmd; 1360 struct se_cmd *se_cmd = &cmd->se_cmd;
1350 struct isert_conn *isert_conn = isert_cmd->conn; 1361 struct isert_conn *isert_conn = isert_cmd->conn;
1362 struct isert_device *device = isert_conn->conn_device;
1351 1363
1352 iscsit_stop_dataout_timer(cmd); 1364 iscsit_stop_dataout_timer(cmd);
1353 isert_unmap_cmd(isert_cmd, isert_conn); 1365 device->unreg_rdma_mem(isert_cmd, isert_conn);
1354 cmd->write_data_done = wr->cur_rdma_length; 1366 cmd->write_data_done = wr->cur_rdma_length;
1355 1367
1356 pr_debug("Cmd: %p RDMA_READ comp calling execute_cmd\n", isert_cmd); 1368 pr_debug("Cmd: %p RDMA_READ comp calling execute_cmd\n", isert_cmd);
@@ -1936,13 +1948,14 @@ isert_put_datain(struct iscsi_conn *conn, struct iscsi_cmd *cmd)
1936 struct isert_cmd, iscsi_cmd); 1948 struct isert_cmd, iscsi_cmd);
1937 struct isert_rdma_wr *wr = &isert_cmd->rdma_wr; 1949 struct isert_rdma_wr *wr = &isert_cmd->rdma_wr;
1938 struct isert_conn *isert_conn = (struct isert_conn *)conn->context; 1950 struct isert_conn *isert_conn = (struct isert_conn *)conn->context;
1951 struct isert_device *device = isert_conn->conn_device;
1939 struct ib_send_wr *wr_failed; 1952 struct ib_send_wr *wr_failed;
1940 int rc; 1953 int rc;
1941 1954
1942 pr_debug("Cmd: %p RDMA_WRITE data_length: %u\n", 1955 pr_debug("Cmd: %p RDMA_WRITE data_length: %u\n",
1943 isert_cmd, se_cmd->data_length); 1956 isert_cmd, se_cmd->data_length);
1944 wr->iser_ib_op = ISER_IB_RDMA_WRITE; 1957 wr->iser_ib_op = ISER_IB_RDMA_WRITE;
1945 rc = isert_map_rdma(conn, cmd, wr); 1958 rc = device->reg_rdma_mem(conn, cmd, wr);
1946 if (rc) { 1959 if (rc) {
1947 pr_err("Cmd: %p failed to prepare RDMA res\n", isert_cmd); 1960 pr_err("Cmd: %p failed to prepare RDMA res\n", isert_cmd);
1948 return rc; 1961 return rc;
@@ -1977,13 +1990,14 @@ isert_get_dataout(struct iscsi_conn *conn, struct iscsi_cmd *cmd, bool recovery)
1977 struct isert_cmd *isert_cmd = iscsit_priv_cmd(cmd); 1990 struct isert_cmd *isert_cmd = iscsit_priv_cmd(cmd);
1978 struct isert_rdma_wr *wr = &isert_cmd->rdma_wr; 1991 struct isert_rdma_wr *wr = &isert_cmd->rdma_wr;
1979 struct isert_conn *isert_conn = (struct isert_conn *)conn->context; 1992 struct isert_conn *isert_conn = (struct isert_conn *)conn->context;
1993 struct isert_device *device = isert_conn->conn_device;
1980 struct ib_send_wr *wr_failed; 1994 struct ib_send_wr *wr_failed;
1981 int rc; 1995 int rc;
1982 1996
1983 pr_debug("Cmd: %p RDMA_READ data_length: %u write_data_done: %u\n", 1997 pr_debug("Cmd: %p RDMA_READ data_length: %u write_data_done: %u\n",
1984 isert_cmd, se_cmd->data_length, cmd->write_data_done); 1998 isert_cmd, se_cmd->data_length, cmd->write_data_done);
1985 wr->iser_ib_op = ISER_IB_RDMA_READ; 1999 wr->iser_ib_op = ISER_IB_RDMA_READ;
1986 rc = isert_map_rdma(conn, cmd, wr); 2000 rc = device->reg_rdma_mem(conn, cmd, wr);
1987 if (rc) { 2001 if (rc) {
1988 pr_err("Cmd: %p failed to prepare RDMA res\n", isert_cmd); 2002 pr_err("Cmd: %p failed to prepare RDMA res\n", isert_cmd);
1989 return rc; 2003 return rc;
diff --git a/drivers/infiniband/ulp/isert/ib_isert.h b/drivers/infiniband/ulp/isert/ib_isert.h
index 21ffd4eff004..76565030e4e7 100644
--- a/drivers/infiniband/ulp/isert/ib_isert.h
+++ b/drivers/infiniband/ulp/isert/ib_isert.h
@@ -128,6 +128,11 @@ struct isert_device {
128 struct ib_cq *dev_tx_cq[ISERT_MAX_CQ]; 128 struct ib_cq *dev_tx_cq[ISERT_MAX_CQ];
129 struct isert_cq_desc *cq_desc; 129 struct isert_cq_desc *cq_desc;
130 struct list_head dev_node; 130 struct list_head dev_node;
131 int (*reg_rdma_mem)(struct iscsi_conn *conn,
132 struct iscsi_cmd *cmd,
133 struct isert_rdma_wr *wr);
134 void (*unreg_rdma_mem)(struct isert_cmd *isert_cmd,
135 struct isert_conn *isert_conn);
131}; 136};
132 137
133struct isert_np { 138struct isert_np {