]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - include/linux/blk-mq.h
blk-mq: introduce blk_mq_delay_kick_requeue_list()
[karo-tx-linux.git] / include / linux / blk-mq.h
index e43bbffb5b7a35e51982b59fffd933fb34eb6e4c..60ef14cbcd2da8dfe001fb78e2905c5acd7a7962 100644 (file)
@@ -22,11 +22,10 @@ struct blk_mq_hw_ctx {
        struct {
                spinlock_t              lock;
                struct list_head        dispatch;
+               unsigned long           state;          /* BLK_MQ_S_* flags */
        } ____cacheline_aligned_in_smp;
 
-       unsigned long           state;          /* BLK_MQ_S_* flags */
-       struct delayed_work     run_work;
-       struct delayed_work     delay_work;
+       struct work_struct      run_work;
        cpumask_var_t           cpumask;
        int                     next_cpu;
        int                     next_cpu_batch;
@@ -40,8 +39,8 @@ struct blk_mq_hw_ctx {
 
        struct blk_mq_ctxmap    ctx_map;
 
-       unsigned int            nr_ctx;
        struct blk_mq_ctx       **ctxs;
+       unsigned int            nr_ctx;
 
        atomic_t                wait_index;
 
@@ -49,7 +48,7 @@ struct blk_mq_hw_ctx {
 
        unsigned long           queued;
        unsigned long           run;
-#define BLK_MQ_MAX_DISPATCH_ORDER      10
+#define BLK_MQ_MAX_DISPATCH_ORDER      7
        unsigned long           dispatched[BLK_MQ_MAX_DISPATCH_ORDER];
 
        unsigned int            numa_node;
@@ -57,9 +56,12 @@ struct blk_mq_hw_ctx {
 
        atomic_t                nr_active;
 
+       struct delayed_work     delay_work;
+
        struct blk_mq_cpu_notifier      cpu_notifier;
        struct kobject          kobj;
 
+       unsigned long           poll_considered;
        unsigned long           poll_invoked;
        unsigned long           poll_success;
 };
@@ -221,7 +223,6 @@ static inline u16 blk_mq_unique_tag_to_tag(u32 unique_tag)
 }
 
 struct blk_mq_hw_ctx *blk_mq_map_queue(struct request_queue *, const int ctx_index);
-struct blk_mq_hw_ctx *blk_mq_alloc_single_hw_queue(struct blk_mq_tag_set *, unsigned int, int);
 
 int blk_mq_request_started(struct request *rq);
 void blk_mq_start_request(struct request *rq);
@@ -232,6 +233,7 @@ void blk_mq_requeue_request(struct request *rq);
 void blk_mq_add_to_requeue_list(struct request *rq, bool at_head);
 void blk_mq_cancel_requeue_work(struct request_queue *q);
 void blk_mq_kick_requeue_list(struct request_queue *q);
+void blk_mq_delay_kick_requeue_list(struct request_queue *q, unsigned long msecs);
 void blk_mq_abort_requeue_list(struct request_queue *q);
 void blk_mq_complete_request(struct request *rq, int error);