iser-target: Remove interrupt coalescing
authorSagi Grimberg <sagig@mellanox.com>
Tue, 2 Dec 2014 14:57:37 +0000 (16:57 +0200)
committerNicholas Bellinger <nab@linux-iscsi.org>
Sat, 13 Dec 2014 07:32:27 +0000 (23:32 -0800)
It is disabled at the moment, we will get that back
in once the target is more stable.

This reverts commit 95b60f0
"Add support for completion interrupt coalescing"

Signed-off-by: Sagi Grimberg <sagig@mellanox.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
drivers/infiniband/ulp/isert/ib_isert.c
drivers/infiniband/ulp/isert/ib_isert.h

index b88686e96a5463b208252bba2ec02eee70e68a92..992e452c957056400511dd8e8e34fe57e74f97ca 100644 (file)
@@ -22,7 +22,6 @@
 #include <linux/socket.h>
 #include <linux/in.h>
 #include <linux/in6.h>
-#include <linux/llist.h>
 #include <rdma/ib_verbs.h>
 #include <rdma/rdma_cm.h>
 #include <target/target_core_base.h>
@@ -1063,7 +1062,7 @@ isert_init_tx_hdrs(struct isert_conn *isert_conn,
 
 static void
 isert_init_send_wr(struct isert_conn *isert_conn, struct isert_cmd *isert_cmd,
-                  struct ib_send_wr *send_wr, bool coalesce)
+                  struct ib_send_wr *send_wr)
 {
        struct iser_tx_desc *tx_desc = &isert_cmd->tx_desc;
 
@@ -1072,22 +1071,6 @@ isert_init_send_wr(struct isert_conn *isert_conn, struct isert_cmd *isert_cmd,
        send_wr->opcode = IB_WR_SEND;
        send_wr->sg_list = &tx_desc->tx_sg[0];
        send_wr->num_sge = isert_cmd->tx_desc.num_sge;
-       /*
-        * Coalesce send completion interrupts by only setting IB_SEND_SIGNALED
-        * bit for every ISERT_COMP_BATCH_COUNT number of ib_post_send() calls.
-        */
-       mutex_lock(&isert_conn->conn_mutex);
-       if (coalesce && isert_conn->state == ISER_CONN_FULL_FEATURE &&
-           ++isert_conn->conn_comp_batch < ISERT_COMP_BATCH_COUNT) {
-               tx_desc->llnode_active = true;
-               llist_add(&tx_desc->comp_llnode, &isert_conn->conn_comp_llist);
-               mutex_unlock(&isert_conn->conn_mutex);
-               return;
-       }
-       isert_conn->conn_comp_batch = 0;
-       tx_desc->comp_llnode_batch = llist_del_all(&isert_conn->conn_comp_llist);
-       mutex_unlock(&isert_conn->conn_mutex);
-
        send_wr->send_flags = IB_SEND_SIGNALED;
 }
 
@@ -1988,8 +1971,8 @@ isert_response_completion(struct iser_tx_desc *tx_desc,
 }
 
 static void
-__isert_send_completion(struct iser_tx_desc *tx_desc,
-                       struct isert_conn *isert_conn)
+isert_send_completion(struct iser_tx_desc *tx_desc,
+                     struct isert_conn *isert_conn)
 {
        struct ib_device *ib_dev = isert_conn->conn_cm_id->device;
        struct isert_cmd *isert_cmd = tx_desc->isert_cmd;
@@ -2030,88 +2013,11 @@ __isert_send_completion(struct iser_tx_desc *tx_desc,
        }
 }
 
-static void
-isert_send_completion(struct iser_tx_desc *tx_desc,
-                     struct isert_conn *isert_conn)
-{
-       struct llist_node *llnode = tx_desc->comp_llnode_batch;
-       struct iser_tx_desc *t;
-       /*
-        * Drain coalesced completion llist starting from comp_llnode_batch
-        * setup in isert_init_send_wr(), and then complete trailing tx_desc.
-        */
-       while (llnode) {
-               t = llist_entry(llnode, struct iser_tx_desc, comp_llnode);
-               llnode = llist_next(llnode);
-               __isert_send_completion(t, isert_conn);
-       }
-       __isert_send_completion(tx_desc, isert_conn);
-}
-
-static void
-isert_cq_drain_comp_llist(struct isert_conn *isert_conn, struct ib_device *ib_dev)
-{
-       struct llist_node *llnode;
-       struct isert_rdma_wr *wr;
-       struct iser_tx_desc *t;
-
-       mutex_lock(&isert_conn->conn_mutex);
-       llnode = llist_del_all(&isert_conn->conn_comp_llist);
-       isert_conn->conn_comp_batch = 0;
-       mutex_unlock(&isert_conn->conn_mutex);
-
-       while (llnode) {
-               t = llist_entry(llnode, struct iser_tx_desc, comp_llnode);
-               llnode = llist_next(llnode);
-               wr = &t->isert_cmd->rdma_wr;
-
-               /**
-                * If send_wr_num is 0 this means that we got
-                * RDMA completion and we cleared it and we should
-                * simply decrement the response post. else the
-                * response is incorporated in send_wr_num, just
-                * sub it.
-                **/
-               if (wr->send_wr_num)
-                       atomic_sub(wr->send_wr_num,
-                                  &isert_conn->post_send_buf_count);
-               else
-                       atomic_dec(&isert_conn->post_send_buf_count);
-
-               isert_completion_put(t, t->isert_cmd, ib_dev, true);
-       }
-}
-
 static void
 isert_cq_tx_comp_err(struct iser_tx_desc *tx_desc, struct isert_conn *isert_conn)
 {
        struct ib_device *ib_dev = isert_conn->conn_cm_id->device;
        struct isert_cmd *isert_cmd = tx_desc->isert_cmd;
-       struct llist_node *llnode = tx_desc->comp_llnode_batch;
-       struct isert_rdma_wr *wr;
-       struct iser_tx_desc *t;
-
-       while (llnode) {
-               t = llist_entry(llnode, struct iser_tx_desc, comp_llnode);
-               llnode = llist_next(llnode);
-               wr = &t->isert_cmd->rdma_wr;
-
-               /**
-                * If send_wr_num is 0 this means that we got
-                * RDMA completion and we cleared it and we should
-                * simply decrement the response post. else the
-                * response is incorporated in send_wr_num, just
-                * sub it.
-                **/
-               if (wr->send_wr_num)
-                       atomic_sub(wr->send_wr_num,
-                                  &isert_conn->post_send_buf_count);
-               else
-                       atomic_dec(&isert_conn->post_send_buf_count);
-
-               isert_completion_put(t, t->isert_cmd, ib_dev, true);
-       }
-       tx_desc->comp_llnode_batch = NULL;
 
        if (!isert_cmd)
                isert_unmap_tx_desc(tx_desc, ib_dev);
@@ -2122,14 +2028,11 @@ isert_cq_tx_comp_err(struct iser_tx_desc *tx_desc, struct isert_conn *isert_conn
 static void
 isert_cq_rx_comp_err(struct isert_conn *isert_conn)
 {
-       struct ib_device *ib_dev = isert_conn->conn_cm_id->device;
        struct iscsi_conn *conn = isert_conn->conn;
 
        if (isert_conn->post_recv_buf_count)
                return;
 
-       isert_cq_drain_comp_llist(isert_conn, ib_dev);
-
        if (conn->sess) {
                target_sess_cmd_list_set_waiting(conn->sess->se_sess);
                target_wait_for_sess_cmds(conn->sess->se_sess);
@@ -2171,9 +2074,6 @@ isert_cq_tx_work(struct work_struct *work)
                        pr_debug("TX wc.vendor_err: 0x%08x\n", wc.vendor_err);
 
                        if (wc.wr_id != ISER_FASTREG_LI_WRID) {
-                               if (tx_desc->llnode_active)
-                                       continue;
-
                                atomic_dec(&isert_conn->post_send_buf_count);
                                isert_cq_tx_comp_err(tx_desc, isert_conn);
                        }
@@ -2293,7 +2193,7 @@ isert_put_response(struct iscsi_conn *conn, struct iscsi_cmd *cmd)
                isert_cmd->tx_desc.num_sge = 2;
        }
 
-       isert_init_send_wr(isert_conn, isert_cmd, send_wr, false);
+       isert_init_send_wr(isert_conn, isert_cmd, send_wr);
 
        pr_debug("Posting SCSI Response IB_WR_SEND >>>>>>>>>>>>>>>>>>>>>>\n");
 
@@ -2351,7 +2251,7 @@ isert_put_nopin(struct iscsi_cmd *cmd, struct iscsi_conn *conn,
                               &isert_cmd->tx_desc.iscsi_header,
                               nopout_response);
        isert_init_tx_hdrs(isert_conn, &isert_cmd->tx_desc);
-       isert_init_send_wr(isert_conn, isert_cmd, send_wr, false);
+       isert_init_send_wr(isert_conn, isert_cmd, send_wr);
 
        pr_debug("Posting NOPIN Response IB_WR_SEND >>>>>>>>>>>>>>>>>>>>>>\n");
 
@@ -2369,7 +2269,7 @@ isert_put_logout_rsp(struct iscsi_cmd *cmd, struct iscsi_conn *conn)
        iscsit_build_logout_rsp(cmd, conn, (struct iscsi_logout_rsp *)
                                &isert_cmd->tx_desc.iscsi_header);
        isert_init_tx_hdrs(isert_conn, &isert_cmd->tx_desc);
-       isert_init_send_wr(isert_conn, isert_cmd, send_wr, false);
+       isert_init_send_wr(isert_conn, isert_cmd, send_wr);
 
        pr_debug("Posting Logout Response IB_WR_SEND >>>>>>>>>>>>>>>>>>>>>>\n");
 
@@ -2387,7 +2287,7 @@ isert_put_tm_rsp(struct iscsi_cmd *cmd, struct iscsi_conn *conn)
        iscsit_build_task_mgt_rsp(cmd, conn, (struct iscsi_tm_rsp *)
                                  &isert_cmd->tx_desc.iscsi_header);
        isert_init_tx_hdrs(isert_conn, &isert_cmd->tx_desc);
-       isert_init_send_wr(isert_conn, isert_cmd, send_wr, false);
+       isert_init_send_wr(isert_conn, isert_cmd, send_wr);
 
        pr_debug("Posting Task Management Response IB_WR_SEND >>>>>>>>>>>>>>>>>>>>>>\n");
 
@@ -2419,7 +2319,7 @@ isert_put_reject(struct iscsi_cmd *cmd, struct iscsi_conn *conn)
        tx_dsg->lkey    = isert_conn->conn_mr->lkey;
        isert_cmd->tx_desc.num_sge = 2;
 
-       isert_init_send_wr(isert_conn, isert_cmd, send_wr, false);
+       isert_init_send_wr(isert_conn, isert_cmd, send_wr);
 
        pr_debug("Posting Reject IB_WR_SEND >>>>>>>>>>>>>>>>>>>>>>\n");
 
@@ -2459,7 +2359,7 @@ isert_put_text_rsp(struct iscsi_cmd *cmd, struct iscsi_conn *conn)
                tx_dsg->lkey    = isert_conn->conn_mr->lkey;
                isert_cmd->tx_desc.num_sge = 2;
        }
-       isert_init_send_wr(isert_conn, isert_cmd, send_wr, false);
+       isert_init_send_wr(isert_conn, isert_cmd, send_wr);
 
        pr_debug("Posting Text Response IB_WR_SEND >>>>>>>>>>>>>>>>>>>>>>\n");
 
@@ -3026,7 +2926,7 @@ isert_put_datain(struct iscsi_conn *conn, struct iscsi_cmd *cmd)
                                     &isert_cmd->tx_desc.iscsi_header);
                isert_init_tx_hdrs(isert_conn, &isert_cmd->tx_desc);
                isert_init_send_wr(isert_conn, isert_cmd,
-                                  &isert_cmd->tx_desc.send_wr, false);
+                                  &isert_cmd->tx_desc.send_wr);
                isert_cmd->rdma_wr.s_send_wr.next = &isert_cmd->tx_desc.send_wr;
                wr->send_wr_num += 1;
        }
index 141905f446ddd8a6049ff64c916aff530d97c158..b3735a07ca477c9ba3ae8aeb986b4eeb9b45fdca 100644 (file)
@@ -45,9 +45,6 @@ struct iser_tx_desc {
        struct ib_sge   tx_sg[2];
        int             num_sge;
        struct isert_cmd *isert_cmd;
-       struct llist_node *comp_llnode_batch;
-       struct llist_node comp_llnode;
-       bool            llnode_active;
        struct ib_send_wr send_wr;
 } __packed;
 
@@ -158,9 +155,6 @@ struct isert_conn {
        /* lock to protect fastreg pool */
        spinlock_t              conn_lock;
        struct work_struct      release_work;
-#define ISERT_COMP_BATCH_COUNT 8
-       int                     conn_comp_batch;
-       struct llist_head       conn_comp_llist;
 };
 
 #define ISERT_MAX_CQ 64