/* Softirq action handler - move entries to local list and loop over them while passing them to the queue registered handler.  */
static void blk_done_softirq(struct softirq_action *h)
/* Softirq action handler - move entries to local list and loop over them while passing them to the queue registered handler.  */
static void blk_done_softirq(struct softirq_action *h)
{
	struct list_head *cpu_list, local_list;
	local_irq_disable();
	cpu_list = &__get_cpu_var(blk_cpu_done);
	list_replace_init(cpu_list, &local_list);
	local_irq_enable();
	while (!list_empty(&local_list)) {
		struct request *rq;
		rq = list_entry(local_list.next, struct request, csd.list);
		list_del_init(&rq->csd.list);
		rq->q->softirq_done_fn(rq);
	}
}