iser-target: Remove interrupt coalescing
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>
This commit is contained in:
parent
268e6811f5
commit
68a86dee8a
|
@ -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,7 +1971,7 @@ isert_response_completion(struct iser_tx_desc *tx_desc,
|
|||
}
|
||||
|
||||
static void
|
||||
__isert_send_completion(struct iser_tx_desc *tx_desc,
|
||||
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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue