|
@@ -68,38 +68,6 @@
|
|
|
* internal functions
|
|
|
*/
|
|
|
|
|
|
-/*
|
|
|
- * handle replies in tasklet context, using a single, global list
|
|
|
- * rdma tasklet function -- just turn around and call the func
|
|
|
- * for all replies on the list
|
|
|
- */
|
|
|
-
|
|
|
-static DEFINE_SPINLOCK(rpcrdma_tk_lock_g);
|
|
|
-static LIST_HEAD(rpcrdma_tasklets_g);
|
|
|
-
|
|
|
-static void
|
|
|
-rpcrdma_run_tasklet(unsigned long data)
|
|
|
-{
|
|
|
- struct rpcrdma_rep *rep;
|
|
|
- unsigned long flags;
|
|
|
-
|
|
|
- data = data;
|
|
|
- spin_lock_irqsave(&rpcrdma_tk_lock_g, flags);
|
|
|
- while (!list_empty(&rpcrdma_tasklets_g)) {
|
|
|
- rep = list_entry(rpcrdma_tasklets_g.next,
|
|
|
- struct rpcrdma_rep, rr_list);
|
|
|
- list_del(&rep->rr_list);
|
|
|
- spin_unlock_irqrestore(&rpcrdma_tk_lock_g, flags);
|
|
|
-
|
|
|
- rpcrdma_reply_handler(rep);
|
|
|
-
|
|
|
- spin_lock_irqsave(&rpcrdma_tk_lock_g, flags);
|
|
|
- }
|
|
|
- spin_unlock_irqrestore(&rpcrdma_tk_lock_g, flags);
|
|
|
-}
|
|
|
-
|
|
|
-static DECLARE_TASKLET(rpcrdma_tasklet_g, rpcrdma_run_tasklet, 0UL);
|
|
|
-
|
|
|
static struct workqueue_struct *rpcrdma_receive_wq;
|
|
|
|
|
|
int
|
|
@@ -129,17 +97,6 @@ rpcrdma_destroy_wq(void)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static void
|
|
|
-rpcrdma_schedule_tasklet(struct list_head *sched_list)
|
|
|
-{
|
|
|
- unsigned long flags;
|
|
|
-
|
|
|
- spin_lock_irqsave(&rpcrdma_tk_lock_g, flags);
|
|
|
- list_splice_tail(sched_list, &rpcrdma_tasklets_g);
|
|
|
- spin_unlock_irqrestore(&rpcrdma_tk_lock_g, flags);
|
|
|
- tasklet_schedule(&rpcrdma_tasklet_g);
|
|
|
-}
|
|
|
-
|
|
|
static void
|
|
|
rpcrdma_qp_async_error_upcall(struct ib_event *event, void *context)
|
|
|
{
|