|
@@ -315,3 +315,61 @@ struct cfq_data {
|
|
/*
|
|
/*
|
|
* idle window management
|
|
* idle window management
|
|
*/
|
|
*/
|
|
|
|
+ struct timer_list idle_slice_timer;
|
|
|
|
+ struct work_struct unplug_work;
|
|
|
|
+
|
|
|
|
+ struct cfq_queue *active_queue;
|
|
|
|
+ struct cfq_io_cq *active_cic;
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * async queue for each priority case
|
|
|
|
+ */
|
|
|
|
+ struct cfq_queue *async_cfqq[2][IOPRIO_BE_NR];
|
|
|
|
+ struct cfq_queue *async_idle_cfqq;
|
|
|
|
+
|
|
|
|
+ sector_t last_position;
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * tunables, see top of file
|
|
|
|
+ */
|
|
|
|
+ unsigned int cfq_quantum;
|
|
|
|
+ unsigned int cfq_fifo_expire[2];
|
|
|
|
+ unsigned int cfq_back_penalty;
|
|
|
|
+ unsigned int cfq_back_max;
|
|
|
|
+ unsigned int cfq_slice[2];
|
|
|
|
+ unsigned int cfq_slice_async_rq;
|
|
|
|
+ unsigned int cfq_slice_idle;
|
|
|
|
+ unsigned int cfq_group_idle;
|
|
|
|
+ unsigned int cfq_latency;
|
|
|
|
+ unsigned int cfq_target_latency;
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * Fallback dummy cfqq for extreme OOM conditions
|
|
|
|
+ */
|
|
|
|
+ struct cfq_queue oom_cfqq;
|
|
|
|
+
|
|
|
|
+ unsigned long last_delayed_sync;
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct cfq_group *cfq_get_next_cfqg(struct cfq_data *cfqd);
|
|
|
|
+
|
|
|
|
+static struct cfq_rb_root *service_tree_for(struct cfq_group *cfqg,
|
|
|
|
+ enum wl_prio_t prio,
|
|
|
|
+ enum wl_type_t type)
|
|
|
|
+{
|
|
|
|
+ if (!cfqg)
|
|
|
|
+ return NULL;
|
|
|
|
+
|
|
|
|
+ if (prio == IDLE_WORKLOAD)
|
|
|
|
+ return &cfqg->service_tree_idle;
|
|
|
|
+
|
|
|
|
+ return &cfqg->service_trees[prio][type];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+enum cfqq_state_flags {
|
|
|
|
+ CFQ_CFQQ_FLAG_on_rr = 0, /* on round-robin busy list */
|
|
|
|
+ CFQ_CFQQ_FLAG_wait_request, /* waiting for a request */
|
|
|
|
+ CFQ_CFQQ_FLAG_must_dispatch, /* must be allowed a dispatch */
|
|
|
|
+ CFQ_CFQQ_FLAG_must_alloc_slice, /* per-slice must_alloc flag */
|
|
|
|
+ CFQ_CFQQ_FLAG_fifo_expire, /* FIFO checked in this slice */
|
|
|
|
+ CFQ_CFQQ_FLAG_idle_window, /* slice idling enabled */
|