GNU Linux-libre 5.15.137-gnu
[releases.git] / block / blk-mq-sched.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * blk-mq scheduling framework
4  *
5  * Copyright (C) 2016 Jens Axboe
6  */
7 #include <linux/kernel.h>
8 #include <linux/module.h>
9 #include <linux/blk-mq.h>
10 #include <linux/list_sort.h>
11
12 #include <trace/events/block.h>
13
14 #include "blk.h"
15 #include "blk-mq.h"
16 #include "blk-mq-debugfs.h"
17 #include "blk-mq-sched.h"
18 #include "blk-mq-tag.h"
19 #include "blk-wbt.h"
20
21 void blk_mq_sched_assign_ioc(struct request *rq)
22 {
23         struct request_queue *q = rq->q;
24         struct io_context *ioc;
25         struct io_cq *icq;
26
27         /*
28          * May not have an IO context if it's a passthrough request
29          */
30         ioc = current->io_context;
31         if (!ioc)
32                 return;
33
34         spin_lock_irq(&q->queue_lock);
35         icq = ioc_lookup_icq(ioc, q);
36         spin_unlock_irq(&q->queue_lock);
37
38         if (!icq) {
39                 icq = ioc_create_icq(ioc, q, GFP_ATOMIC);
40                 if (!icq)
41                         return;
42         }
43         get_io_context(icq->ioc);
44         rq->elv.icq = icq;
45 }
46
47 /*
48  * Mark a hardware queue as needing a restart.
49  */
50 void blk_mq_sched_mark_restart_hctx(struct blk_mq_hw_ctx *hctx)
51 {
52         if (test_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state))
53                 return;
54
55         set_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state);
56 }
57 EXPORT_SYMBOL_GPL(blk_mq_sched_mark_restart_hctx);
58
59 void blk_mq_sched_restart(struct blk_mq_hw_ctx *hctx)
60 {
61         if (!test_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state))
62                 return;
63         clear_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state);
64
65         /*
66          * Order clearing SCHED_RESTART and list_empty_careful(&hctx->dispatch)
67          * in blk_mq_run_hw_queue(). Its pair is the barrier in
68          * blk_mq_dispatch_rq_list(). So dispatch code won't see SCHED_RESTART,
69          * meantime new request added to hctx->dispatch is missed to check in
70          * blk_mq_run_hw_queue().
71          */
72         smp_mb();
73
74         blk_mq_run_hw_queue(hctx, true);
75 }
76
77 static int sched_rq_cmp(void *priv, const struct list_head *a,
78                         const struct list_head *b)
79 {
80         struct request *rqa = container_of(a, struct request, queuelist);
81         struct request *rqb = container_of(b, struct request, queuelist);
82
83         return rqa->mq_hctx > rqb->mq_hctx;
84 }
85
86 static bool blk_mq_dispatch_hctx_list(struct list_head *rq_list)
87 {
88         struct blk_mq_hw_ctx *hctx =
89                 list_first_entry(rq_list, struct request, queuelist)->mq_hctx;
90         struct request *rq;
91         LIST_HEAD(hctx_list);
92         unsigned int count = 0;
93
94         list_for_each_entry(rq, rq_list, queuelist) {
95                 if (rq->mq_hctx != hctx) {
96                         list_cut_before(&hctx_list, rq_list, &rq->queuelist);
97                         goto dispatch;
98                 }
99                 count++;
100         }
101         list_splice_tail_init(rq_list, &hctx_list);
102
103 dispatch:
104         return blk_mq_dispatch_rq_list(hctx, &hctx_list, count);
105 }
106
107 #define BLK_MQ_BUDGET_DELAY     3               /* ms units */
108
109 /*
110  * Only SCSI implements .get_budget and .put_budget, and SCSI restarts
111  * its queue by itself in its completion handler, so we don't need to
112  * restart queue if .get_budget() fails to get the budget.
113  *
114  * Returns -EAGAIN if hctx->dispatch was found non-empty and run_work has to
115  * be run again.  This is necessary to avoid starving flushes.
116  */
117 static int __blk_mq_do_dispatch_sched(struct blk_mq_hw_ctx *hctx)
118 {
119         struct request_queue *q = hctx->queue;
120         struct elevator_queue *e = q->elevator;
121         bool multi_hctxs = false, run_queue = false;
122         bool dispatched = false, busy = false;
123         unsigned int max_dispatch;
124         LIST_HEAD(rq_list);
125         int count = 0;
126
127         if (hctx->dispatch_busy)
128                 max_dispatch = 1;
129         else
130                 max_dispatch = hctx->queue->nr_requests;
131
132         do {
133                 struct request *rq;
134                 int budget_token;
135
136                 if (e->type->ops.has_work && !e->type->ops.has_work(hctx))
137                         break;
138
139                 if (!list_empty_careful(&hctx->dispatch)) {
140                         busy = true;
141                         break;
142                 }
143
144                 budget_token = blk_mq_get_dispatch_budget(q);
145                 if (budget_token < 0)
146                         break;
147
148                 rq = e->type->ops.dispatch_request(hctx);
149                 if (!rq) {
150                         blk_mq_put_dispatch_budget(q, budget_token);
151                         /*
152                          * We're releasing without dispatching. Holding the
153                          * budget could have blocked any "hctx"s with the
154                          * same queue and if we didn't dispatch then there's
155                          * no guarantee anyone will kick the queue.  Kick it
156                          * ourselves.
157                          */
158                         run_queue = true;
159                         break;
160                 }
161
162                 blk_mq_set_rq_budget_token(rq, budget_token);
163
164                 /*
165                  * Now this rq owns the budget which has to be released
166                  * if this rq won't be queued to driver via .queue_rq()
167                  * in blk_mq_dispatch_rq_list().
168                  */
169                 list_add_tail(&rq->queuelist, &rq_list);
170                 count++;
171                 if (rq->mq_hctx != hctx)
172                         multi_hctxs = true;
173
174                 /*
175                  * If we cannot get tag for the request, stop dequeueing
176                  * requests from the IO scheduler. We are unlikely to be able
177                  * to submit them anyway and it creates false impression for
178                  * scheduling heuristics that the device can take more IO.
179                  */
180                 if (!blk_mq_get_driver_tag(rq))
181                         break;
182         } while (count < max_dispatch);
183
184         if (!count) {
185                 if (run_queue)
186                         blk_mq_delay_run_hw_queues(q, BLK_MQ_BUDGET_DELAY);
187         } else if (multi_hctxs) {
188                 /*
189                  * Requests from different hctx may be dequeued from some
190                  * schedulers, such as bfq and deadline.
191                  *
192                  * Sort the requests in the list according to their hctx,
193                  * dispatch batching requests from same hctx at a time.
194                  */
195                 list_sort(NULL, &rq_list, sched_rq_cmp);
196                 do {
197                         dispatched |= blk_mq_dispatch_hctx_list(&rq_list);
198                 } while (!list_empty(&rq_list));
199         } else {
200                 dispatched = blk_mq_dispatch_rq_list(hctx, &rq_list, count);
201         }
202
203         if (busy)
204                 return -EAGAIN;
205         return !!dispatched;
206 }
207
208 static int blk_mq_do_dispatch_sched(struct blk_mq_hw_ctx *hctx)
209 {
210         unsigned long end = jiffies + HZ;
211         int ret;
212
213         do {
214                 ret = __blk_mq_do_dispatch_sched(hctx);
215                 if (ret != 1)
216                         break;
217                 if (need_resched() || time_is_before_jiffies(end)) {
218                         blk_mq_delay_run_hw_queue(hctx, 0);
219                         break;
220                 }
221         } while (1);
222
223         return ret;
224 }
225
226 static struct blk_mq_ctx *blk_mq_next_ctx(struct blk_mq_hw_ctx *hctx,
227                                           struct blk_mq_ctx *ctx)
228 {
229         unsigned short idx = ctx->index_hw[hctx->type];
230
231         if (++idx == hctx->nr_ctx)
232                 idx = 0;
233
234         return hctx->ctxs[idx];
235 }
236
237 /*
238  * Only SCSI implements .get_budget and .put_budget, and SCSI restarts
239  * its queue by itself in its completion handler, so we don't need to
240  * restart queue if .get_budget() fails to get the budget.
241  *
242  * Returns -EAGAIN if hctx->dispatch was found non-empty and run_work has to
243  * be run again.  This is necessary to avoid starving flushes.
244  */
245 static int blk_mq_do_dispatch_ctx(struct blk_mq_hw_ctx *hctx)
246 {
247         struct request_queue *q = hctx->queue;
248         LIST_HEAD(rq_list);
249         struct blk_mq_ctx *ctx = READ_ONCE(hctx->dispatch_from);
250         int ret = 0;
251         struct request *rq;
252
253         do {
254                 int budget_token;
255
256                 if (!list_empty_careful(&hctx->dispatch)) {
257                         ret = -EAGAIN;
258                         break;
259                 }
260
261                 if (!sbitmap_any_bit_set(&hctx->ctx_map))
262                         break;
263
264                 budget_token = blk_mq_get_dispatch_budget(q);
265                 if (budget_token < 0)
266                         break;
267
268                 rq = blk_mq_dequeue_from_ctx(hctx, ctx);
269                 if (!rq) {
270                         blk_mq_put_dispatch_budget(q, budget_token);
271                         /*
272                          * We're releasing without dispatching. Holding the
273                          * budget could have blocked any "hctx"s with the
274                          * same queue and if we didn't dispatch then there's
275                          * no guarantee anyone will kick the queue.  Kick it
276                          * ourselves.
277                          */
278                         blk_mq_delay_run_hw_queues(q, BLK_MQ_BUDGET_DELAY);
279                         break;
280                 }
281
282                 blk_mq_set_rq_budget_token(rq, budget_token);
283
284                 /*
285                  * Now this rq owns the budget which has to be released
286                  * if this rq won't be queued to driver via .queue_rq()
287                  * in blk_mq_dispatch_rq_list().
288                  */
289                 list_add(&rq->queuelist, &rq_list);
290
291                 /* round robin for fair dispatch */
292                 ctx = blk_mq_next_ctx(hctx, rq->mq_ctx);
293
294         } while (blk_mq_dispatch_rq_list(rq->mq_hctx, &rq_list, 1));
295
296         WRITE_ONCE(hctx->dispatch_from, ctx);
297         return ret;
298 }
299
300 static int __blk_mq_sched_dispatch_requests(struct blk_mq_hw_ctx *hctx)
301 {
302         struct request_queue *q = hctx->queue;
303         const bool has_sched = q->elevator;
304         int ret = 0;
305         LIST_HEAD(rq_list);
306
307         /*
308          * If we have previous entries on our dispatch list, grab them first for
309          * more fair dispatch.
310          */
311         if (!list_empty_careful(&hctx->dispatch)) {
312                 spin_lock(&hctx->lock);
313                 if (!list_empty(&hctx->dispatch))
314                         list_splice_init(&hctx->dispatch, &rq_list);
315                 spin_unlock(&hctx->lock);
316         }
317
318         /*
319          * Only ask the scheduler for requests, if we didn't have residual
320          * requests from the dispatch list. This is to avoid the case where
321          * we only ever dispatch a fraction of the requests available because
322          * of low device queue depth. Once we pull requests out of the IO
323          * scheduler, we can no longer merge or sort them. So it's best to
324          * leave them there for as long as we can. Mark the hw queue as
325          * needing a restart in that case.
326          *
327          * We want to dispatch from the scheduler if there was nothing
328          * on the dispatch list or we were able to dispatch from the
329          * dispatch list.
330          */
331         if (!list_empty(&rq_list)) {
332                 blk_mq_sched_mark_restart_hctx(hctx);
333                 if (blk_mq_dispatch_rq_list(hctx, &rq_list, 0)) {
334                         if (has_sched)
335                                 ret = blk_mq_do_dispatch_sched(hctx);
336                         else
337                                 ret = blk_mq_do_dispatch_ctx(hctx);
338                 }
339         } else if (has_sched) {
340                 ret = blk_mq_do_dispatch_sched(hctx);
341         } else if (hctx->dispatch_busy) {
342                 /* dequeue request one by one from sw queue if queue is busy */
343                 ret = blk_mq_do_dispatch_ctx(hctx);
344         } else {
345                 blk_mq_flush_busy_ctxs(hctx, &rq_list);
346                 blk_mq_dispatch_rq_list(hctx, &rq_list, 0);
347         }
348
349         return ret;
350 }
351
352 void blk_mq_sched_dispatch_requests(struct blk_mq_hw_ctx *hctx)
353 {
354         struct request_queue *q = hctx->queue;
355
356         /* RCU or SRCU read lock is needed before checking quiesced flag */
357         if (unlikely(blk_mq_hctx_stopped(hctx) || blk_queue_quiesced(q)))
358                 return;
359
360         hctx->run++;
361
362         /*
363          * A return of -EAGAIN is an indication that hctx->dispatch is not
364          * empty and we must run again in order to avoid starving flushes.
365          */
366         if (__blk_mq_sched_dispatch_requests(hctx) == -EAGAIN) {
367                 if (__blk_mq_sched_dispatch_requests(hctx) == -EAGAIN)
368                         blk_mq_run_hw_queue(hctx, true);
369         }
370 }
371
372 bool __blk_mq_sched_bio_merge(struct request_queue *q, struct bio *bio,
373                 unsigned int nr_segs)
374 {
375         struct elevator_queue *e = q->elevator;
376         struct blk_mq_ctx *ctx;
377         struct blk_mq_hw_ctx *hctx;
378         bool ret = false;
379         enum hctx_type type;
380
381         if (e && e->type->ops.bio_merge)
382                 return e->type->ops.bio_merge(q, bio, nr_segs);
383
384         ctx = blk_mq_get_ctx(q);
385         hctx = blk_mq_map_queue(q, bio->bi_opf, ctx);
386         type = hctx->type;
387         if (!(hctx->flags & BLK_MQ_F_SHOULD_MERGE) ||
388             list_empty_careful(&ctx->rq_lists[type]))
389                 return false;
390
391         /* default per sw-queue merge */
392         spin_lock(&ctx->lock);
393         /*
394          * Reverse check our software queue for entries that we could
395          * potentially merge with. Currently includes a hand-wavy stop
396          * count of 8, to not spend too much time checking for merges.
397          */
398         if (blk_bio_list_merge(q, &ctx->rq_lists[type], bio, nr_segs)) {
399                 ctx->rq_merged++;
400                 ret = true;
401         }
402
403         spin_unlock(&ctx->lock);
404
405         return ret;
406 }
407
408 bool blk_mq_sched_try_insert_merge(struct request_queue *q, struct request *rq,
409                                    struct list_head *free)
410 {
411         return rq_mergeable(rq) && elv_attempt_insert_merge(q, rq, free);
412 }
413 EXPORT_SYMBOL_GPL(blk_mq_sched_try_insert_merge);
414
415 static bool blk_mq_sched_bypass_insert(struct blk_mq_hw_ctx *hctx,
416                                        struct request *rq)
417 {
418         /*
419          * dispatch flush and passthrough rq directly
420          *
421          * passthrough request has to be added to hctx->dispatch directly.
422          * For some reason, device may be in one situation which can't
423          * handle FS request, so STS_RESOURCE is always returned and the
424          * FS request will be added to hctx->dispatch. However passthrough
425          * request may be required at that time for fixing the problem. If
426          * passthrough request is added to scheduler queue, there isn't any
427          * chance to dispatch it given we prioritize requests in hctx->dispatch.
428          */
429         if ((rq->rq_flags & RQF_FLUSH_SEQ) || blk_rq_is_passthrough(rq))
430                 return true;
431
432         return false;
433 }
434
435 void blk_mq_sched_insert_request(struct request *rq, bool at_head,
436                                  bool run_queue, bool async)
437 {
438         struct request_queue *q = rq->q;
439         struct elevator_queue *e = q->elevator;
440         struct blk_mq_ctx *ctx = rq->mq_ctx;
441         struct blk_mq_hw_ctx *hctx = rq->mq_hctx;
442
443         WARN_ON(e && (rq->tag != BLK_MQ_NO_TAG));
444
445         if (blk_mq_sched_bypass_insert(hctx, rq)) {
446                 /*
447                  * Firstly normal IO request is inserted to scheduler queue or
448                  * sw queue, meantime we add flush request to dispatch queue(
449                  * hctx->dispatch) directly and there is at most one in-flight
450                  * flush request for each hw queue, so it doesn't matter to add
451                  * flush request to tail or front of the dispatch queue.
452                  *
453                  * Secondly in case of NCQ, flush request belongs to non-NCQ
454                  * command, and queueing it will fail when there is any
455                  * in-flight normal IO request(NCQ command). When adding flush
456                  * rq to the front of hctx->dispatch, it is easier to introduce
457                  * extra time to flush rq's latency because of S_SCHED_RESTART
458                  * compared with adding to the tail of dispatch queue, then
459                  * chance of flush merge is increased, and less flush requests
460                  * will be issued to controller. It is observed that ~10% time
461                  * is saved in blktests block/004 on disk attached to AHCI/NCQ
462                  * drive when adding flush rq to the front of hctx->dispatch.
463                  *
464                  * Simply queue flush rq to the front of hctx->dispatch so that
465                  * intensive flush workloads can benefit in case of NCQ HW.
466                  */
467                 at_head = (rq->rq_flags & RQF_FLUSH_SEQ) ? true : at_head;
468                 blk_mq_request_bypass_insert(rq, at_head, false);
469                 goto run;
470         }
471
472         if (e) {
473                 LIST_HEAD(list);
474
475                 list_add(&rq->queuelist, &list);
476                 e->type->ops.insert_requests(hctx, &list, at_head);
477         } else {
478                 spin_lock(&ctx->lock);
479                 __blk_mq_insert_request(hctx, rq, at_head);
480                 spin_unlock(&ctx->lock);
481         }
482
483 run:
484         if (run_queue)
485                 blk_mq_run_hw_queue(hctx, async);
486 }
487
488 void blk_mq_sched_insert_requests(struct blk_mq_hw_ctx *hctx,
489                                   struct blk_mq_ctx *ctx,
490                                   struct list_head *list, bool run_queue_async)
491 {
492         struct elevator_queue *e;
493         struct request_queue *q = hctx->queue;
494
495         /*
496          * blk_mq_sched_insert_requests() is called from flush plug
497          * context only, and hold one usage counter to prevent queue
498          * from being released.
499          */
500         percpu_ref_get(&q->q_usage_counter);
501
502         e = hctx->queue->elevator;
503         if (e) {
504                 e->type->ops.insert_requests(hctx, list, false);
505         } else {
506                 /*
507                  * try to issue requests directly if the hw queue isn't
508                  * busy in case of 'none' scheduler, and this way may save
509                  * us one extra enqueue & dequeue to sw queue.
510                  */
511                 if (!hctx->dispatch_busy && !e && !run_queue_async) {
512                         blk_mq_try_issue_list_directly(hctx, list);
513                         if (list_empty(list))
514                                 goto out;
515                 }
516                 blk_mq_insert_requests(hctx, ctx, list);
517         }
518
519         blk_mq_run_hw_queue(hctx, run_queue_async);
520  out:
521         percpu_ref_put(&q->q_usage_counter);
522 }
523
524 static int blk_mq_sched_alloc_tags(struct request_queue *q,
525                                    struct blk_mq_hw_ctx *hctx,
526                                    unsigned int hctx_idx)
527 {
528         struct blk_mq_tag_set *set = q->tag_set;
529         int ret;
530
531         hctx->sched_tags = blk_mq_alloc_rq_map(set, hctx_idx, q->nr_requests,
532                                                set->reserved_tags, set->flags);
533         if (!hctx->sched_tags)
534                 return -ENOMEM;
535
536         ret = blk_mq_alloc_rqs(set, hctx->sched_tags, hctx_idx, q->nr_requests);
537         if (ret) {
538                 blk_mq_free_rq_map(hctx->sched_tags, set->flags);
539                 hctx->sched_tags = NULL;
540         }
541
542         return ret;
543 }
544
545 /* called in queue's release handler, tagset has gone away */
546 static void blk_mq_sched_tags_teardown(struct request_queue *q)
547 {
548         struct blk_mq_hw_ctx *hctx;
549         int i;
550
551         queue_for_each_hw_ctx(q, hctx, i) {
552                 if (hctx->sched_tags) {
553                         blk_mq_free_rq_map(hctx->sched_tags, hctx->flags);
554                         hctx->sched_tags = NULL;
555                 }
556         }
557 }
558
559 static int blk_mq_init_sched_shared_sbitmap(struct request_queue *queue)
560 {
561         struct blk_mq_tag_set *set = queue->tag_set;
562         int alloc_policy = BLK_MQ_FLAG_TO_ALLOC_POLICY(set->flags);
563         struct blk_mq_hw_ctx *hctx;
564         int ret, i;
565
566         /*
567          * Set initial depth at max so that we don't need to reallocate for
568          * updating nr_requests.
569          */
570         ret = blk_mq_init_bitmaps(&queue->sched_bitmap_tags,
571                                   &queue->sched_breserved_tags,
572                                   MAX_SCHED_RQ, set->reserved_tags,
573                                   set->numa_node, alloc_policy);
574         if (ret)
575                 return ret;
576
577         queue_for_each_hw_ctx(queue, hctx, i) {
578                 hctx->sched_tags->bitmap_tags =
579                                         &queue->sched_bitmap_tags;
580                 hctx->sched_tags->breserved_tags =
581                                         &queue->sched_breserved_tags;
582         }
583
584         sbitmap_queue_resize(&queue->sched_bitmap_tags,
585                              queue->nr_requests - set->reserved_tags);
586
587         return 0;
588 }
589
590 static void blk_mq_exit_sched_shared_sbitmap(struct request_queue *queue)
591 {
592         sbitmap_queue_free(&queue->sched_bitmap_tags);
593         sbitmap_queue_free(&queue->sched_breserved_tags);
594 }
595
596 int blk_mq_init_sched(struct request_queue *q, struct elevator_type *e)
597 {
598         struct blk_mq_hw_ctx *hctx;
599         struct elevator_queue *eq;
600         unsigned int i;
601         int ret;
602
603         if (!e) {
604                 q->elevator = NULL;
605                 q->nr_requests = q->tag_set->queue_depth;
606                 return 0;
607         }
608
609         /*
610          * Default to double of smaller one between hw queue_depth and 128,
611          * since we don't split into sync/async like the old code did.
612          * Additionally, this is a per-hw queue depth.
613          */
614         q->nr_requests = 2 * min_t(unsigned int, q->tag_set->queue_depth,
615                                    BLKDEV_MAX_RQ);
616
617         queue_for_each_hw_ctx(q, hctx, i) {
618                 ret = blk_mq_sched_alloc_tags(q, hctx, i);
619                 if (ret)
620                         goto err_free_tags;
621         }
622
623         if (blk_mq_is_sbitmap_shared(q->tag_set->flags)) {
624                 ret = blk_mq_init_sched_shared_sbitmap(q);
625                 if (ret)
626                         goto err_free_tags;
627         }
628
629         ret = e->ops.init_sched(q, e);
630         if (ret)
631                 goto err_free_sbitmap;
632
633         blk_mq_debugfs_register_sched(q);
634
635         queue_for_each_hw_ctx(q, hctx, i) {
636                 if (e->ops.init_hctx) {
637                         ret = e->ops.init_hctx(hctx, i);
638                         if (ret) {
639                                 eq = q->elevator;
640                                 blk_mq_sched_free_requests(q);
641                                 blk_mq_exit_sched(q, eq);
642                                 kobject_put(&eq->kobj);
643                                 return ret;
644                         }
645                 }
646                 blk_mq_debugfs_register_sched_hctx(q, hctx);
647         }
648
649         return 0;
650
651 err_free_sbitmap:
652         if (blk_mq_is_sbitmap_shared(q->tag_set->flags))
653                 blk_mq_exit_sched_shared_sbitmap(q);
654 err_free_tags:
655         blk_mq_sched_free_requests(q);
656         blk_mq_sched_tags_teardown(q);
657         q->elevator = NULL;
658         return ret;
659 }
660
661 /*
662  * called in either blk_queue_cleanup or elevator_switch, tagset
663  * is required for freeing requests
664  */
665 void blk_mq_sched_free_requests(struct request_queue *q)
666 {
667         struct blk_mq_hw_ctx *hctx;
668         int i;
669
670         queue_for_each_hw_ctx(q, hctx, i) {
671                 if (hctx->sched_tags)
672                         blk_mq_free_rqs(q->tag_set, hctx->sched_tags, i);
673         }
674 }
675
676 void blk_mq_exit_sched(struct request_queue *q, struct elevator_queue *e)
677 {
678         struct blk_mq_hw_ctx *hctx;
679         unsigned int i;
680         unsigned int flags = 0;
681
682         queue_for_each_hw_ctx(q, hctx, i) {
683                 blk_mq_debugfs_unregister_sched_hctx(hctx);
684                 if (e->type->ops.exit_hctx && hctx->sched_data) {
685                         e->type->ops.exit_hctx(hctx, i);
686                         hctx->sched_data = NULL;
687                 }
688                 flags = hctx->flags;
689         }
690         blk_mq_debugfs_unregister_sched(q);
691         if (e->type->ops.exit_sched)
692                 e->type->ops.exit_sched(e);
693         blk_mq_sched_tags_teardown(q);
694         if (blk_mq_is_sbitmap_shared(flags))
695                 blk_mq_exit_sched_shared_sbitmap(q);
696         q->elevator = NULL;
697 }