1
2#ifndef BLK_MQ_H
3#define BLK_MQ_H
4
5#include <linux/blkdev.h>
6#include <linux/sbitmap.h>
7#include <linux/srcu.h>
8
9struct blk_mq_tags;
10struct blk_flush_queue;
11
12
13
14
15
16struct blk_mq_hw_ctx {
17 struct {
18
19 spinlock_t lock;
20
21
22
23
24
25
26
27 struct list_head dispatch;
28
29
30
31
32 unsigned long state;
33 } ____cacheline_aligned_in_smp;
34
35
36
37
38 struct delayed_work run_work;
39
40 cpumask_var_t cpumask;
41
42
43
44
45 int next_cpu;
46
47
48
49
50 int next_cpu_batch;
51
52
53 unsigned long flags;
54
55
56
57
58
59 void *sched_data;
60
61
62
63 struct request_queue *queue;
64
65 struct blk_flush_queue *fq;
66
67
68
69
70
71 void *driver_data;
72
73
74
75
76
77 struct sbitmap ctx_map;
78
79
80
81
82
83 struct blk_mq_ctx *dispatch_from;
84
85
86
87
88
89 unsigned int dispatch_busy;
90
91
92 unsigned short type;
93
94 unsigned short nr_ctx;
95
96 struct blk_mq_ctx **ctxs;
97
98
99 spinlock_t dispatch_wait_lock;
100
101
102
103
104 wait_queue_entry_t dispatch_wait;
105
106
107
108
109
110 atomic_t wait_index;
111
112
113
114
115
116 struct blk_mq_tags *tags;
117
118
119
120
121
122 struct blk_mq_tags *sched_tags;
123
124
125 unsigned long queued;
126
127 unsigned long run;
128#define BLK_MQ_MAX_DISPATCH_ORDER 7
129
130 unsigned long dispatched[BLK_MQ_MAX_DISPATCH_ORDER];
131
132
133 unsigned int numa_node;
134
135 unsigned int queue_num;
136
137
138
139
140
141 atomic_t nr_active;
142
143
144
145 atomic_t elevator_queued;
146
147
148 struct hlist_node cpuhp_online;
149
150 struct hlist_node cpuhp_dead;
151
152 struct kobject kobj;
153
154
155 unsigned long poll_considered;
156
157 unsigned long poll_invoked;
158
159 unsigned long poll_success;
160
161#ifdef CONFIG_BLK_DEBUG_FS
162
163
164
165
166 struct dentry *debugfs_dir;
167
168 struct dentry *sched_debugfs_dir;
169#endif
170
171
172
173
174
175 struct list_head hctx_list;
176
177
178
179
180
181
182 struct srcu_struct srcu[];
183};
184
185
186
187
188
189
190
191
192
193
194
195struct blk_mq_queue_map {
196 unsigned int *mq_map;
197 unsigned int nr_queues;
198 unsigned int queue_offset;
199};
200
201
202
203
204
205
206
207
208enum hctx_type {
209 HCTX_TYPE_DEFAULT,
210 HCTX_TYPE_READ,
211 HCTX_TYPE_POLL,
212
213 HCTX_MAX_TYPES,
214};
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249struct blk_mq_tag_set {
250 struct blk_mq_queue_map map[HCTX_MAX_TYPES];
251 unsigned int nr_maps;
252 const struct blk_mq_ops *ops;
253 unsigned int nr_hw_queues;
254 unsigned int queue_depth;
255 unsigned int reserved_tags;
256 unsigned int cmd_size;
257 int numa_node;
258 unsigned int timeout;
259 unsigned int flags;
260 void *driver_data;
261 atomic_t active_queues_shared_sbitmap;
262
263 struct sbitmap_queue __bitmap_tags;
264 struct sbitmap_queue __breserved_tags;
265 struct blk_mq_tags **tags;
266
267 struct mutex tag_list_lock;
268 struct list_head tag_list;
269};
270
271
272
273
274
275
276
277struct blk_mq_queue_data {
278 struct request *rq;
279 bool last;
280};
281
282typedef bool (busy_iter_fn)(struct blk_mq_hw_ctx *, struct request *, void *,
283 bool);
284typedef bool (busy_tag_iter_fn)(struct request *, void *, bool);
285
286
287
288
289
290struct blk_mq_ops {
291
292
293
294 blk_status_t (*queue_rq)(struct blk_mq_hw_ctx *,
295 const struct blk_mq_queue_data *);
296
297
298
299
300
301
302
303
304 void (*commit_rqs)(struct blk_mq_hw_ctx *);
305
306
307
308
309
310
311
312 bool (*get_budget)(struct request_queue *);
313
314
315
316
317 void (*put_budget)(struct request_queue *);
318
319
320
321
322 enum blk_eh_timer_return (*timeout)(struct request *, bool);
323
324
325
326
327 int (*poll)(struct blk_mq_hw_ctx *);
328
329
330
331
332 void (*complete)(struct request *);
333
334
335
336
337
338
339 int (*init_hctx)(struct blk_mq_hw_ctx *, void *, unsigned int);
340
341
342
343 void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);
344
345
346
347
348
349
350
351
352 int (*init_request)(struct blk_mq_tag_set *set, struct request *,
353 unsigned int, unsigned int);
354
355
356
357 void (*exit_request)(struct blk_mq_tag_set *set, struct request *,
358 unsigned int);
359
360
361
362
363 void (*initialize_rq_fn)(struct request *rq);
364
365
366
367
368
369 void (*cleanup_rq)(struct request *);
370
371
372
373
374 bool (*busy)(struct request_queue *);
375
376
377
378
379
380 int (*map_queues)(struct blk_mq_tag_set *set);
381
382#ifdef CONFIG_BLK_DEBUG_FS
383
384
385
386
387 void (*show_rq)(struct seq_file *m, struct request *rq);
388#endif
389};
390
391enum {
392 BLK_MQ_F_SHOULD_MERGE = 1 << 0,
393 BLK_MQ_F_TAG_QUEUE_SHARED = 1 << 1,
394
395
396
397
398 BLK_MQ_F_STACKING = 1 << 2,
399 BLK_MQ_F_TAG_HCTX_SHARED = 1 << 3,
400 BLK_MQ_F_BLOCKING = 1 << 5,
401 BLK_MQ_F_NO_SCHED = 1 << 6,
402 BLK_MQ_F_ALLOC_POLICY_START_BIT = 8,
403 BLK_MQ_F_ALLOC_POLICY_BITS = 1,
404
405 BLK_MQ_S_STOPPED = 0,
406 BLK_MQ_S_TAG_ACTIVE = 1,
407 BLK_MQ_S_SCHED_RESTART = 2,
408
409
410 BLK_MQ_S_INACTIVE = 3,
411
412 BLK_MQ_MAX_DEPTH = 10240,
413
414 BLK_MQ_CPU_WORK_BATCH = 8,
415};
416#define BLK_MQ_FLAG_TO_ALLOC_POLICY(flags) \
417 ((flags >> BLK_MQ_F_ALLOC_POLICY_START_BIT) & \
418 ((1 << BLK_MQ_F_ALLOC_POLICY_BITS) - 1))
419#define BLK_ALLOC_POLICY_TO_MQ_FLAG(policy) \
420 ((policy & ((1 << BLK_MQ_F_ALLOC_POLICY_BITS) - 1)) \
421 << BLK_MQ_F_ALLOC_POLICY_START_BIT)
422
423struct request_queue *blk_mq_init_queue(struct blk_mq_tag_set *);
424struct request_queue *blk_mq_init_queue_data(struct blk_mq_tag_set *set,
425 void *queuedata);
426struct request_queue *blk_mq_init_allocated_queue(struct blk_mq_tag_set *set,
427 struct request_queue *q,
428 bool elevator_init);
429struct request_queue *blk_mq_init_sq_queue(struct blk_mq_tag_set *set,
430 const struct blk_mq_ops *ops,
431 unsigned int queue_depth,
432 unsigned int set_flags);
433void blk_mq_unregister_dev(struct device *, struct request_queue *);
434
435int blk_mq_alloc_tag_set(struct blk_mq_tag_set *set);
436void blk_mq_free_tag_set(struct blk_mq_tag_set *set);
437
438void blk_mq_flush_plug_list(struct blk_plug *plug, bool from_schedule);
439
440void blk_mq_free_request(struct request *rq);
441
442bool blk_mq_queue_inflight(struct request_queue *q);
443
444enum {
445
446 BLK_MQ_REQ_NOWAIT = (__force blk_mq_req_flags_t)(1 << 0),
447
448 BLK_MQ_REQ_RESERVED = (__force blk_mq_req_flags_t)(1 << 1),
449
450 BLK_MQ_REQ_PREEMPT = (__force blk_mq_req_flags_t)(1 << 3),
451};
452
453struct request *blk_mq_alloc_request(struct request_queue *q, unsigned int op,
454 blk_mq_req_flags_t flags);
455struct request *blk_mq_alloc_request_hctx(struct request_queue *q,
456 unsigned int op, blk_mq_req_flags_t flags,
457 unsigned int hctx_idx);
458struct request *blk_mq_tag_to_rq(struct blk_mq_tags *tags, unsigned int tag);
459
460enum {
461 BLK_MQ_UNIQUE_TAG_BITS = 16,
462 BLK_MQ_UNIQUE_TAG_MASK = (1 << BLK_MQ_UNIQUE_TAG_BITS) - 1,
463};
464
465u32 blk_mq_unique_tag(struct request *rq);
466
467static inline u16 blk_mq_unique_tag_to_hwq(u32 unique_tag)
468{
469 return unique_tag >> BLK_MQ_UNIQUE_TAG_BITS;
470}
471
472static inline u16 blk_mq_unique_tag_to_tag(u32 unique_tag)
473{
474 return unique_tag & BLK_MQ_UNIQUE_TAG_MASK;
475}
476
477
478
479
480
481static inline enum mq_rq_state blk_mq_rq_state(struct request *rq)
482{
483 return READ_ONCE(rq->state);
484}
485
486static inline int blk_mq_request_started(struct request *rq)
487{
488 return blk_mq_rq_state(rq) != MQ_RQ_IDLE;
489}
490
491static inline int blk_mq_request_completed(struct request *rq)
492{
493 return blk_mq_rq_state(rq) == MQ_RQ_COMPLETE;
494}
495
496void blk_mq_start_request(struct request *rq);
497void blk_mq_end_request(struct request *rq, blk_status_t error);
498void __blk_mq_end_request(struct request *rq, blk_status_t error);
499
500void blk_mq_requeue_request(struct request *rq, bool kick_requeue_list);
501void blk_mq_kick_requeue_list(struct request_queue *q);
502void blk_mq_delay_kick_requeue_list(struct request_queue *q, unsigned long msecs);
503void blk_mq_complete_request(struct request *rq);
504bool blk_mq_complete_request_remote(struct request *rq);
505bool blk_mq_queue_stopped(struct request_queue *q);
506void blk_mq_stop_hw_queue(struct blk_mq_hw_ctx *hctx);
507void blk_mq_start_hw_queue(struct blk_mq_hw_ctx *hctx);
508void blk_mq_stop_hw_queues(struct request_queue *q);
509void blk_mq_start_hw_queues(struct request_queue *q);
510void blk_mq_start_stopped_hw_queue(struct blk_mq_hw_ctx *hctx, bool async);
511void blk_mq_start_stopped_hw_queues(struct request_queue *q, bool async);
512void blk_mq_quiesce_queue(struct request_queue *q);
513void blk_mq_unquiesce_queue(struct request_queue *q);
514void blk_mq_delay_run_hw_queue(struct blk_mq_hw_ctx *hctx, unsigned long msecs);
515void blk_mq_run_hw_queue(struct blk_mq_hw_ctx *hctx, bool async);
516void blk_mq_run_hw_queues(struct request_queue *q, bool async);
517void blk_mq_delay_run_hw_queues(struct request_queue *q, unsigned long msecs);
518void blk_mq_tagset_busy_iter(struct blk_mq_tag_set *tagset,
519 busy_tag_iter_fn *fn, void *priv);
520void blk_mq_tagset_wait_completed_request(struct blk_mq_tag_set *tagset);
521void blk_mq_freeze_queue(struct request_queue *q);
522void blk_mq_unfreeze_queue(struct request_queue *q);
523void blk_freeze_queue_start(struct request_queue *q);
524void blk_mq_freeze_queue_wait(struct request_queue *q);
525int blk_mq_freeze_queue_wait_timeout(struct request_queue *q,
526 unsigned long timeout);
527
528int blk_mq_map_queues(struct blk_mq_queue_map *qmap);
529void blk_mq_update_nr_hw_queues(struct blk_mq_tag_set *set, int nr_hw_queues);
530
531void blk_mq_quiesce_queue_nowait(struct request_queue *q);
532
533unsigned int blk_mq_rq_cpu(struct request *rq);
534
535bool __blk_should_fake_timeout(struct request_queue *q);
536static inline bool blk_should_fake_timeout(struct request_queue *q)
537{
538 if (IS_ENABLED(CONFIG_FAIL_IO_TIMEOUT) &&
539 test_bit(QUEUE_FLAG_FAIL_IO, &q->queue_flags))
540 return __blk_should_fake_timeout(q);
541 return false;
542}
543
544
545
546
547
548
549
550
551
552
553static inline struct request *blk_mq_rq_from_pdu(void *pdu)
554{
555 return pdu - sizeof(struct request);
556}
557
558
559
560
561
562
563
564
565
566
567static inline void *blk_mq_rq_to_pdu(struct request *rq)
568{
569 return rq + 1;
570}
571
572#define queue_for_each_hw_ctx(q, hctx, i) \
573 for ((i) = 0; (i) < (q)->nr_hw_queues && \
574 ({ hctx = (q)->queue_hw_ctx[i]; 1; }); (i)++)
575
576#define hctx_for_each_ctx(hctx, ctx, i) \
577 for ((i) = 0; (i) < (hctx)->nr_ctx && \
578 ({ ctx = (hctx)->ctxs[(i)]; 1; }); (i)++)
579
580static inline blk_qc_t request_to_qc_t(struct blk_mq_hw_ctx *hctx,
581 struct request *rq)
582{
583 if (rq->tag != -1)
584 return rq->tag | (hctx->queue_num << BLK_QC_T_SHIFT);
585
586 return rq->internal_tag | (hctx->queue_num << BLK_QC_T_SHIFT) |
587 BLK_QC_T_INTERNAL;
588}
589
590static inline void blk_mq_cleanup_rq(struct request *rq)
591{
592 if (rq->q->mq_ops->cleanup_rq)
593 rq->q->mq_ops->cleanup_rq(rq);
594}
595
596blk_qc_t blk_mq_submit_bio(struct bio *bio);
597
598#endif
599