static enum hrtimer_restart row_idle_hrtimer_fn(struct hrtimer *hr_timer) { struct idling_data *read_data = container_of(hr_timer, struct idling_data, hr_timer); struct row_data *rd = container_of(read_data, struct row_data, rd_idle_data); row_log_rowq(rd, rd->rd_idle_data.idling_queue_idx, "Performing delayed work"); /* Mark idling process as done */ rd->row_queues[rd->rd_idle_data.idling_queue_idx]. idle_data.begin_idling = false; rd->rd_idle_data.idling_queue_idx = ROWQ_MAX_PRIO; if (!rd->nr_reqs[READ] && !rd->nr_reqs[WRITE]) row_log(rd->dispatch_queue, "No requests in scheduler"); else kblockd_schedule_work(&read_data->idle_work); return HRTIMER_NORESTART; }
/* * scheduler run of queue, if there are requests pending and no one in the * driver that will restart queueing */ static inline void fiops_schedule_dispatch(struct fiops_data *fiopsd) { if (fiopsd->busy_queues) kblockd_schedule_work(fiopsd->queue, &fiopsd->unplug_work); }