mirror of
https://github.com/SCST-project/scst.git
synced 2026-05-17 10:41:26 +00:00
ib_srpt: Reduce number of context switches during I/O for mode thread=1.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@3533 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
@@ -1868,7 +1868,8 @@ static void srpt_process_send_completion(struct ib_cq *cq,
|
||||
|
||||
static void srpt_process_completion(struct ib_cq *cq,
|
||||
struct srpt_rdma_ch *ch,
|
||||
enum scst_exec_context context)
|
||||
enum scst_exec_context rcv_context,
|
||||
enum scst_exec_context send_context)
|
||||
{
|
||||
struct ib_wc *const wc = ch->wc;
|
||||
int i, n;
|
||||
@@ -1879,10 +1880,11 @@ static void srpt_process_completion(struct ib_cq *cq,
|
||||
while ((n = ib_poll_cq(cq, ARRAY_SIZE(ch->wc), wc)) > 0) {
|
||||
for (i = 0; i < n; i++) {
|
||||
if (opcode_from_wr_id(wc[i].wr_id) & IB_WC_RECV)
|
||||
srpt_process_rcv_completion(cq, ch, context,
|
||||
srpt_process_rcv_completion(cq, ch, rcv_context,
|
||||
&wc[i]);
|
||||
else
|
||||
srpt_process_send_completion(cq, ch, context,
|
||||
srpt_process_send_completion(cq, ch,
|
||||
send_context,
|
||||
&wc[i]);
|
||||
}
|
||||
}
|
||||
@@ -1909,10 +1911,12 @@ static void srpt_completion(struct ib_cq *cq, void *ctx)
|
||||
wake_up_process(ch->thread);
|
||||
break;
|
||||
case MODE_IB_COMPLETION_IN_SIRQ:
|
||||
srpt_process_completion(cq, ch, SCST_CONTEXT_THREAD);
|
||||
srpt_process_completion(cq, ch, SCST_CONTEXT_THREAD,
|
||||
SCST_CONTEXT_THREAD);
|
||||
break;
|
||||
case MODE_ALL_IN_SIRQ:
|
||||
srpt_process_completion(cq, ch, SCST_CONTEXT_TASKLET);
|
||||
srpt_process_completion(cq, ch, SCST_CONTEXT_TASKLET,
|
||||
SCST_CONTEXT_TASKLET);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1928,7 +1932,8 @@ static int srpt_compl_thread(void *arg)
|
||||
BUG_ON(!ch);
|
||||
while (!kthread_should_stop()) {
|
||||
set_current_state(TASK_INTERRUPTIBLE);
|
||||
srpt_process_completion(ch->cq, ch, SCST_CONTEXT_THREAD);
|
||||
srpt_process_completion(ch->cq, ch, SCST_CONTEXT_THREAD,
|
||||
SCST_CONTEXT_DIRECT);
|
||||
schedule();
|
||||
}
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user