LCOV - code coverage report
Current view: top level - block - blk-mq.c (source / functions) Hit Total Coverage
Test: combined.info Lines: 765 1567 48.8 %
Date: 2022-03-28 16:04:14 Functions: 57 119 47.9 %
Branches: 358 1083 33.1 %

           Branch data     Line data    Source code
       1                 :            : // SPDX-License-Identifier: GPL-2.0
       2                 :            : /*
       3                 :            :  * Block multiqueue core code
       4                 :            :  *
       5                 :            :  * Copyright (C) 2013-2014 Jens Axboe
       6                 :            :  * Copyright (C) 2013-2014 Christoph Hellwig
       7                 :            :  */
       8                 :            : #include <linux/kernel.h>
       9                 :            : #include <linux/module.h>
      10                 :            : #include <linux/backing-dev.h>
      11                 :            : #include <linux/bio.h>
      12                 :            : #include <linux/blkdev.h>
      13                 :            : #include <linux/kmemleak.h>
      14                 :            : #include <linux/mm.h>
      15                 :            : #include <linux/init.h>
      16                 :            : #include <linux/slab.h>
      17                 :            : #include <linux/workqueue.h>
      18                 :            : #include <linux/smp.h>
      19                 :            : #include <linux/llist.h>
      20                 :            : #include <linux/list_sort.h>
      21                 :            : #include <linux/cpu.h>
      22                 :            : #include <linux/cache.h>
      23                 :            : #include <linux/sched/sysctl.h>
      24                 :            : #include <linux/sched/topology.h>
      25                 :            : #include <linux/sched/signal.h>
      26                 :            : #include <linux/delay.h>
      27                 :            : #include <linux/crash_dump.h>
      28                 :            : #include <linux/prefetch.h>
      29                 :            : 
      30                 :            : #include <trace/events/block.h>
      31                 :            : 
      32                 :            : #include <linux/blk-mq.h>
      33                 :            : #include <linux/t10-pi.h>
      34                 :            : #include "blk.h"
      35                 :            : #include "blk-mq.h"
      36                 :            : #include "blk-mq-debugfs.h"
      37                 :            : #include "blk-mq-tag.h"
      38                 :            : #include "blk-pm.h"
      39                 :            : #include "blk-stat.h"
      40                 :            : #include "blk-mq-sched.h"
      41                 :            : #include "blk-rq-qos.h"
      42                 :            : 
      43                 :            : static void blk_mq_poll_stats_start(struct request_queue *q);
      44                 :            : static void blk_mq_poll_stats_fn(struct blk_stat_callback *cb);
      45                 :            : 
      46                 :          0 : static int blk_mq_poll_stats_bkt(const struct request *rq)
      47                 :            : {
      48                 :          0 :         int ddir, sectors, bucket;
      49                 :            : 
      50         [ #  # ]:          0 :         ddir = rq_data_dir(rq);
      51         [ #  # ]:          0 :         sectors = blk_rq_stats_sectors(rq);
      52                 :            : 
      53   [ #  #  #  #  :          0 :         bucket = ddir + 2 * ilog2(sectors);
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
                #  #  # ]
      54                 :            : 
      55         [ #  # ]:          0 :         if (bucket < 0)
      56                 :            :                 return -1;
      57         [ #  # ]:          0 :         else if (bucket >= BLK_MQ_POLL_STATS_BKTS)
      58                 :          0 :                 return ddir + BLK_MQ_POLL_STATS_BKTS - 2;
      59                 :            : 
      60                 :            :         return bucket;
      61                 :            : }
      62                 :            : 
      63                 :            : /*
      64                 :            :  * Check if any of the ctx, dispatch list or elevator
      65                 :            :  * have pending work in this hardware queue.
      66                 :            :  */
      67                 :      33341 : static bool blk_mq_hctx_has_pending(struct blk_mq_hw_ctx *hctx)
      68                 :            : {
      69   [ +  +  +  - ]:      63919 :         return !list_empty_careful(&hctx->dispatch) ||
      70         [ +  + ]:      59644 :                 sbitmap_any_bit_set(&hctx->ctx_map) ||
      71                 :            :                         blk_mq_sched_has_work(hctx);
      72                 :            : }
      73                 :            : 
      74                 :            : /*
      75                 :            :  * Mark this ctx as having pending work in this hardware queue
      76                 :            :  */
      77                 :          0 : static void blk_mq_hctx_mark_pending(struct blk_mq_hw_ctx *hctx,
      78                 :            :                                      struct blk_mq_ctx *ctx)
      79                 :            : {
      80                 :          0 :         const int bit = ctx->index_hw[hctx->type];
      81                 :            : 
      82         [ #  # ]:          0 :         if (!sbitmap_test_bit(&hctx->ctx_map, bit))
      83                 :          0 :                 sbitmap_set_bit(&hctx->ctx_map, bit);
      84                 :          0 : }
      85                 :            : 
      86                 :          0 : static void blk_mq_hctx_clear_pending(struct blk_mq_hw_ctx *hctx,
      87                 :            :                                       struct blk_mq_ctx *ctx)
      88                 :            : {
      89                 :          0 :         const int bit = ctx->index_hw[hctx->type];
      90                 :            : 
      91                 :          0 :         sbitmap_clear_bit(&hctx->ctx_map, bit);
      92                 :          0 : }
      93                 :            : 
      94                 :            : struct mq_inflight {
      95                 :            :         struct hd_struct *part;
      96                 :            :         unsigned int inflight[2];
      97                 :            : };
      98                 :            : 
      99                 :          0 : static bool blk_mq_check_inflight(struct blk_mq_hw_ctx *hctx,
     100                 :            :                                   struct request *rq, void *priv,
     101                 :            :                                   bool reserved)
     102                 :            : {
     103                 :          0 :         struct mq_inflight *mi = priv;
     104                 :            : 
     105         [ #  # ]:          0 :         if (rq->part == mi->part)
     106                 :          0 :                 mi->inflight[rq_data_dir(rq)]++;
     107                 :            : 
     108                 :          0 :         return true;
     109                 :            : }
     110                 :            : 
     111                 :          0 : unsigned int blk_mq_in_flight(struct request_queue *q, struct hd_struct *part)
     112                 :            : {
     113                 :          0 :         struct mq_inflight mi = { .part = part };
     114                 :            : 
     115                 :          0 :         blk_mq_queue_tag_busy_iter(q, blk_mq_check_inflight, &mi);
     116                 :            : 
     117                 :          0 :         return mi.inflight[0] + mi.inflight[1];
     118                 :            : }
     119                 :            : 
     120                 :          0 : void blk_mq_in_flight_rw(struct request_queue *q, struct hd_struct *part,
     121                 :            :                          unsigned int inflight[2])
     122                 :            : {
     123                 :          0 :         struct mq_inflight mi = { .part = part };
     124                 :            : 
     125                 :          0 :         blk_mq_queue_tag_busy_iter(q, blk_mq_check_inflight, &mi);
     126                 :          0 :         inflight[0] = mi.inflight[0];
     127                 :          0 :         inflight[1] = mi.inflight[1];
     128                 :          0 : }
     129                 :            : 
     130                 :        156 : void blk_freeze_queue_start(struct request_queue *q)
     131                 :            : {
     132                 :        156 :         mutex_lock(&q->mq_freeze_lock);
     133         [ +  - ]:        156 :         if (++q->mq_freeze_depth == 1) {
     134                 :        156 :                 percpu_ref_kill(&q->q_usage_counter);
     135                 :        156 :                 mutex_unlock(&q->mq_freeze_lock);
     136         [ +  - ]:        156 :                 if (queue_is_mq(q))
     137                 :        156 :                         blk_mq_run_hw_queues(q, false);
     138                 :            :         } else {
     139                 :          0 :                 mutex_unlock(&q->mq_freeze_lock);
     140                 :            :         }
     141                 :        156 : }
     142                 :            : EXPORT_SYMBOL_GPL(blk_freeze_queue_start);
     143                 :            : 
     144                 :        156 : void blk_mq_freeze_queue_wait(struct request_queue *q)
     145                 :            : {
     146   [ +  -  +  +  :        334 :         wait_event(q->mq_freeze_wq, percpu_ref_is_zero(&q->q_usage_counter));
             +  -  +  + ]
     147                 :        156 : }
     148                 :            : EXPORT_SYMBOL_GPL(blk_mq_freeze_queue_wait);
     149                 :            : 
     150                 :          0 : int blk_mq_freeze_queue_wait_timeout(struct request_queue *q,
     151                 :            :                                      unsigned long timeout)
     152                 :            : {
     153   [ #  #  #  #  :          0 :         return wait_event_timeout(q->mq_freeze_wq,
          #  #  #  #  #  
                #  #  # ]
     154                 :            :                                         percpu_ref_is_zero(&q->q_usage_counter),
     155                 :            :                                         timeout);
     156                 :            : }
     157                 :            : EXPORT_SYMBOL_GPL(blk_mq_freeze_queue_wait_timeout);
     158                 :            : 
     159                 :            : /*
     160                 :            :  * Guarantee no request is in use, so we can change any data structure of
     161                 :            :  * the queue afterward.
     162                 :            :  */
     163                 :        156 : void blk_freeze_queue(struct request_queue *q)
     164                 :            : {
     165                 :            :         /*
     166                 :            :          * In the !blk_mq case we are only calling this to kill the
     167                 :            :          * q_usage_counter, otherwise this increases the freeze depth
     168                 :            :          * and waits for it to return to zero.  For this reason there is
     169                 :            :          * no blk_unfreeze_queue(), and blk_freeze_queue() is not
     170                 :            :          * exported to drivers as the only user for unfreeze is blk_mq.
     171                 :            :          */
     172                 :          0 :         blk_freeze_queue_start(q);
     173                 :        143 :         blk_mq_freeze_queue_wait(q);
     174                 :          0 : }
     175                 :            : 
     176                 :        156 : void blk_mq_freeze_queue(struct request_queue *q)
     177                 :            : {
     178                 :            :         /*
     179                 :            :          * ...just an alias to keep freeze and unfreeze actions balanced
     180                 :            :          * in the blk_mq_* namespace
     181                 :            :          */
     182                 :        143 :         blk_freeze_queue(q);
     183                 :        143 : }
     184                 :            : EXPORT_SYMBOL_GPL(blk_mq_freeze_queue);
     185                 :            : 
     186                 :        156 : void blk_mq_unfreeze_queue(struct request_queue *q)
     187                 :            : {
     188                 :        156 :         mutex_lock(&q->mq_freeze_lock);
     189                 :        156 :         q->mq_freeze_depth--;
     190         [ -  + ]:        156 :         WARN_ON_ONCE(q->mq_freeze_depth < 0);
     191         [ +  - ]:        156 :         if (!q->mq_freeze_depth) {
     192                 :        156 :                 percpu_ref_resurrect(&q->q_usage_counter);
     193                 :        156 :                 wake_up_all(&q->mq_freeze_wq);
     194                 :            :         }
     195                 :        156 :         mutex_unlock(&q->mq_freeze_lock);
     196                 :        156 : }
     197                 :            : EXPORT_SYMBOL_GPL(blk_mq_unfreeze_queue);
     198                 :            : 
     199                 :            : /*
     200                 :            :  * FIXME: replace the scsi_internal_device_*block_nowait() calls in the
     201                 :            :  * mpt3sas driver such that this function can be removed.
     202                 :            :  */
     203                 :        143 : void blk_mq_quiesce_queue_nowait(struct request_queue *q)
     204                 :            : {
     205                 :          0 :         blk_queue_flag_set(QUEUE_FLAG_QUIESCED, q);
     206                 :          0 : }
     207                 :            : EXPORT_SYMBOL_GPL(blk_mq_quiesce_queue_nowait);
     208                 :            : 
     209                 :            : /**
     210                 :            :  * blk_mq_quiesce_queue() - wait until all ongoing dispatches have finished
     211                 :            :  * @q: request queue.
     212                 :            :  *
     213                 :            :  * Note: this function does not prevent that the struct request end_io()
     214                 :            :  * callback function is invoked. Once this function is returned, we make
     215                 :            :  * sure no dispatch can happen until the queue is unquiesced via
     216                 :            :  * blk_mq_unquiesce_queue().
     217                 :            :  */
     218                 :        143 : void blk_mq_quiesce_queue(struct request_queue *q)
     219                 :            : {
     220                 :        143 :         struct blk_mq_hw_ctx *hctx;
     221                 :        143 :         unsigned int i;
     222                 :        143 :         bool rcu = false;
     223                 :            : 
     224                 :        143 :         blk_mq_quiesce_queue_nowait(q);
     225                 :            : 
     226         [ +  + ]:        429 :         queue_for_each_hw_ctx(q, hctx, i) {
     227         [ -  + ]:        143 :                 if (hctx->flags & BLK_MQ_F_BLOCKING)
     228                 :          0 :                         synchronize_srcu(hctx->srcu);
     229                 :            :                 else
     230                 :            :                         rcu = true;
     231                 :            :         }
     232         [ +  - ]:        143 :         if (rcu)
     233                 :        143 :                 synchronize_rcu();
     234                 :        143 : }
     235                 :            : EXPORT_SYMBOL_GPL(blk_mq_quiesce_queue);
     236                 :            : 
     237                 :            : /*
     238                 :            :  * blk_mq_unquiesce_queue() - counterpart of blk_mq_quiesce_queue()
     239                 :            :  * @q: request queue.
     240                 :            :  *
     241                 :            :  * This function recovers queue into the state before quiescing
     242                 :            :  * which is done by blk_mq_quiesce_queue.
     243                 :            :  */
     244                 :        143 : void blk_mq_unquiesce_queue(struct request_queue *q)
     245                 :            : {
     246                 :        143 :         blk_queue_flag_clear(QUEUE_FLAG_QUIESCED, q);
     247                 :            : 
     248                 :            :         /* dispatch requests which are inserted during quiescing */
     249                 :        143 :         blk_mq_run_hw_queues(q, true);
     250                 :        143 : }
     251                 :            : EXPORT_SYMBOL_GPL(blk_mq_unquiesce_queue);
     252                 :            : 
     253                 :          0 : void blk_mq_wake_waiters(struct request_queue *q)
     254                 :            : {
     255                 :          0 :         struct blk_mq_hw_ctx *hctx;
     256                 :          0 :         unsigned int i;
     257                 :            : 
     258         [ #  # ]:          0 :         queue_for_each_hw_ctx(q, hctx, i)
     259   [ #  #  #  # ]:          0 :                 if (blk_mq_hw_queue_mapped(hctx))
     260                 :          0 :                         blk_mq_tag_wakeup_all(hctx->tags, true);
     261                 :          0 : }
     262                 :            : 
     263                 :            : /*
     264                 :            :  * Only need start/end time stamping if we have iostat or
     265                 :            :  * blk stats enabled, or using an IO scheduler.
     266                 :            :  */
     267                 :      14896 : static inline bool blk_mq_need_time_stamp(struct request *rq)
     268                 :            : {
     269         [ -  + ]:        212 :         return (rq->rq_flags & (RQF_IO_STAT | RQF_STATS)) || rq->q->elevator;
     270                 :            : }
     271                 :            : 
     272                 :            : static struct request *blk_mq_rq_ctx_init(struct blk_mq_alloc_data *data,
     273                 :            :                 unsigned int tag, unsigned int op, u64 alloc_time_ns)
     274                 :            : {
     275                 :            :         struct blk_mq_tags *tags = blk_mq_tags_from_data(data);
     276                 :            :         struct request *rq = tags->static_rqs[tag];
     277                 :            :         req_flags_t rq_flags = 0;
     278                 :            : 
     279                 :            :         if (data->flags & BLK_MQ_REQ_INTERNAL) {
     280                 :            :                 rq->tag = -1;
     281                 :            :                 rq->internal_tag = tag;
     282                 :            :         } else {
     283                 :            :                 if (data->hctx->flags & BLK_MQ_F_TAG_SHARED) {
     284                 :            :                         rq_flags = RQF_MQ_INFLIGHT;
     285                 :            :                         atomic_inc(&data->hctx->nr_active);
     286                 :            :                 }
     287                 :            :                 rq->tag = tag;
     288                 :            :                 rq->internal_tag = -1;
     289                 :            :                 data->hctx->tags->rqs[rq->tag] = rq;
     290                 :            :         }
     291                 :            : 
     292                 :            :         /* csd/requeue_work/fifo_time is initialized before use */
     293                 :            :         rq->q = data->q;
     294                 :            :         rq->mq_ctx = data->ctx;
     295                 :            :         rq->mq_hctx = data->hctx;
     296                 :            :         rq->rq_flags = rq_flags;
     297                 :            :         rq->cmd_flags = op;
     298                 :            :         if (data->flags & BLK_MQ_REQ_PREEMPT)
     299                 :            :                 rq->rq_flags |= RQF_PREEMPT;
     300                 :            :         if (blk_queue_io_stat(data->q))
     301                 :            :                 rq->rq_flags |= RQF_IO_STAT;
     302                 :            :         INIT_LIST_HEAD(&rq->queuelist);
     303                 :            :         INIT_HLIST_NODE(&rq->hash);
     304                 :            :         RB_CLEAR_NODE(&rq->rb_node);
     305                 :            :         rq->rq_disk = NULL;
     306                 :            :         rq->part = NULL;
     307                 :            : #ifdef CONFIG_BLK_RQ_ALLOC_TIME
     308                 :            :         rq->alloc_time_ns = alloc_time_ns;
     309                 :            : #endif
     310                 :            :         if (blk_mq_need_time_stamp(rq))
     311                 :            :                 rq->start_time_ns = ktime_get_ns();
     312                 :            :         else
     313                 :            :                 rq->start_time_ns = 0;
     314                 :            :         rq->io_start_time_ns = 0;
     315                 :            :         rq->stats_sectors = 0;
     316                 :            :         rq->nr_phys_segments = 0;
     317                 :            : #if defined(CONFIG_BLK_DEV_INTEGRITY)
     318                 :            :         rq->nr_integrity_segments = 0;
     319                 :            : #endif
     320                 :            :         /* tag was already set */
     321                 :            :         rq->extra_len = 0;
     322                 :            :         WRITE_ONCE(rq->deadline, 0);
     323                 :            : 
     324                 :            :         rq->timeout = 0;
     325                 :            : 
     326                 :            :         rq->end_io = NULL;
     327                 :            :         rq->end_io_data = NULL;
     328                 :            : 
     329                 :            :         data->ctx->rq_dispatched[op_is_sync(op)]++;
     330                 :            :         refcount_set(&rq->ref, 1);
     331                 :            :         return rq;
     332                 :            : }
     333                 :            : 
     334                 :      14720 : static struct request *blk_mq_get_request(struct request_queue *q,
     335                 :            :                                           struct bio *bio,
     336                 :            :                                           struct blk_mq_alloc_data *data)
     337                 :            : {
     338                 :      14720 :         struct elevator_queue *e = q->elevator;
     339                 :      14720 :         struct request *rq;
     340                 :      14720 :         unsigned int tag;
     341                 :      14720 :         bool clear_ctx_on_error = false;
     342                 :      14720 :         u64 alloc_time_ns = 0;
     343                 :            : 
     344                 :      14720 :         blk_queue_enter_live(q);
     345                 :            : 
     346                 :            :         /* alloc_time includes depth and tag waits */
     347                 :      14720 :         if (blk_queue_rq_alloc_time(q))
     348                 :            :                 alloc_time_ns = ktime_get_ns();
     349                 :            : 
     350                 :      14720 :         data->q = q;
     351         [ +  - ]:      14720 :         if (likely(!data->ctx)) {
     352                 :      14720 :                 data->ctx = blk_mq_get_ctx(q);
     353                 :      14720 :                 clear_ctx_on_error = true;
     354                 :            :         }
     355         [ +  - ]:      14720 :         if (likely(!data->hctx))
     356         [ +  - ]:      29440 :                 data->hctx = blk_mq_map_queue(q, data->cmd_flags,
     357                 :            :                                                 data->ctx);
     358         [ -  + ]:      14720 :         if (data->cmd_flags & REQ_NOWAIT)
     359                 :          0 :                 data->flags |= BLK_MQ_REQ_NOWAIT;
     360                 :            : 
     361         [ +  + ]:      14720 :         if (e) {
     362                 :      14070 :                 data->flags |= BLK_MQ_REQ_INTERNAL;
     363                 :            : 
     364                 :            :                 /*
     365                 :            :                  * Flush requests are special and go directly to the
     366                 :            :                  * dispatch list. Don't include reserved tags in the
     367                 :            :                  * limiting, as it isn't useful.
     368                 :            :                  */
     369         [ +  + ]:      14070 :                 if (!op_is_flush(data->cmd_flags) &&
     370         [ -  + ]:      13951 :                     e->type->ops.limit_depth &&
     371         [ #  # ]:          0 :                     !(data->flags & BLK_MQ_REQ_RESERVED))
     372                 :          0 :                         e->type->ops.limit_depth(data->cmd_flags, data);
     373                 :            :         } else {
     374         [ +  + ]:        650 :                 blk_mq_tag_busy(data->hctx);
     375                 :            :         }
     376                 :            : 
     377                 :      14720 :         tag = blk_mq_get_tag(data);
     378         [ -  + ]:      14720 :         if (tag == BLK_MQ_TAG_FAIL) {
     379         [ #  # ]:          0 :                 if (clear_ctx_on_error)
     380                 :          0 :                         data->ctx = NULL;
     381                 :          0 :                 blk_queue_exit(q);
     382                 :          0 :                 return NULL;
     383                 :            :         }
     384                 :            : 
     385                 :      14720 :         rq = blk_mq_rq_ctx_init(data, tag, data->cmd_flags, alloc_time_ns);
     386         [ +  + ]:      14720 :         if (!op_is_flush(data->cmd_flags)) {
     387                 :      14601 :                 rq->elv.icq = NULL;
     388   [ +  +  +  - ]:      14601 :                 if (e && e->type->ops.prepare_request) {
     389         [ -  + ]:      13951 :                         if (e->type->icq_cache)
     390                 :          0 :                                 blk_mq_sched_assign_ioc(rq);
     391                 :            : 
     392                 :      13951 :                         e->type->ops.prepare_request(rq, bio);
     393                 :      13951 :                         rq->rq_flags |= RQF_ELVPRIV;
     394                 :            :                 }
     395                 :            :         }
     396                 :      14720 :         data->hctx->queued++;
     397                 :      14720 :         return rq;
     398                 :            : }
     399                 :            : 
     400                 :       1755 : struct request *blk_mq_alloc_request(struct request_queue *q, unsigned int op,
     401                 :            :                 blk_mq_req_flags_t flags)
     402                 :            : {
     403                 :       1755 :         struct blk_mq_alloc_data alloc_data = { .flags = flags, .cmd_flags = op };
     404                 :       1755 :         struct request *rq;
     405                 :       1755 :         int ret;
     406                 :            : 
     407                 :       1755 :         ret = blk_queue_enter(q, flags);
     408         [ -  + ]:       1755 :         if (ret)
     409                 :          0 :                 return ERR_PTR(ret);
     410                 :            : 
     411                 :       1755 :         rq = blk_mq_get_request(q, NULL, &alloc_data);
     412                 :       1755 :         blk_queue_exit(q);
     413                 :            : 
     414         [ +  - ]:       1755 :         if (!rq)
     415                 :            :                 return ERR_PTR(-EWOULDBLOCK);
     416                 :            : 
     417                 :       1755 :         rq->__data_len = 0;
     418                 :       1755 :         rq->__sector = (sector_t) -1;
     419                 :       1755 :         rq->bio = rq->biotail = NULL;
     420                 :       1755 :         return rq;
     421                 :            : }
     422                 :            : EXPORT_SYMBOL(blk_mq_alloc_request);
     423                 :            : 
     424                 :          0 : struct request *blk_mq_alloc_request_hctx(struct request_queue *q,
     425                 :            :         unsigned int op, blk_mq_req_flags_t flags, unsigned int hctx_idx)
     426                 :            : {
     427                 :          0 :         struct blk_mq_alloc_data alloc_data = { .flags = flags, .cmd_flags = op };
     428                 :          0 :         struct request *rq;
     429                 :          0 :         unsigned int cpu;
     430                 :          0 :         int ret;
     431                 :            : 
     432                 :            :         /*
     433                 :            :          * If the tag allocator sleeps we could get an allocation for a
     434                 :            :          * different hardware context.  No need to complicate the low level
     435                 :            :          * allocator for this for the rare use case of a command tied to
     436                 :            :          * a specific queue.
     437                 :            :          */
     438   [ #  #  #  # ]:          0 :         if (WARN_ON_ONCE(!(flags & BLK_MQ_REQ_NOWAIT)))
     439                 :            :                 return ERR_PTR(-EINVAL);
     440                 :            : 
     441         [ #  # ]:          0 :         if (hctx_idx >= q->nr_hw_queues)
     442                 :            :                 return ERR_PTR(-EIO);
     443                 :            : 
     444                 :          0 :         ret = blk_queue_enter(q, flags);
     445         [ #  # ]:          0 :         if (ret)
     446                 :          0 :                 return ERR_PTR(ret);
     447                 :            : 
     448                 :            :         /*
     449                 :            :          * Check if the hardware context is actually mapped to anything.
     450                 :            :          * If not tell the caller that it should skip this queue.
     451                 :            :          */
     452                 :          0 :         alloc_data.hctx = q->queue_hw_ctx[hctx_idx];
     453   [ #  #  #  # ]:          0 :         if (!blk_mq_hw_queue_mapped(alloc_data.hctx)) {
     454                 :          0 :                 blk_queue_exit(q);
     455                 :          0 :                 return ERR_PTR(-EXDEV);
     456                 :            :         }
     457                 :          0 :         cpu = cpumask_first_and(alloc_data.hctx->cpumask, cpu_online_mask);
     458                 :          0 :         alloc_data.ctx = __blk_mq_get_ctx(q, cpu);
     459                 :            : 
     460                 :          0 :         rq = blk_mq_get_request(q, NULL, &alloc_data);
     461                 :          0 :         blk_queue_exit(q);
     462                 :            : 
     463         [ #  # ]:          0 :         if (!rq)
     464                 :          0 :                 return ERR_PTR(-EWOULDBLOCK);
     465                 :            : 
     466                 :            :         return rq;
     467                 :            : }
     468                 :            : EXPORT_SYMBOL_GPL(blk_mq_alloc_request_hctx);
     469                 :            : 
     470                 :      14720 : static void __blk_mq_free_request(struct request *rq)
     471                 :            : {
     472                 :      14720 :         struct request_queue *q = rq->q;
     473                 :      14720 :         struct blk_mq_ctx *ctx = rq->mq_ctx;
     474                 :      14720 :         struct blk_mq_hw_ctx *hctx = rq->mq_hctx;
     475                 :      14720 :         const int sched_tag = rq->internal_tag;
     476                 :            : 
     477         [ +  + ]:      14720 :         blk_pm_mark_last_busy(rq);
     478                 :      14720 :         rq->mq_hctx = NULL;
     479         [ +  + ]:      14720 :         if (rq->tag != -1)
     480                 :      14446 :                 blk_mq_put_tag(hctx->tags, ctx, rq->tag);
     481         [ +  + ]:      14720 :         if (sched_tag != -1)
     482                 :      14070 :                 blk_mq_put_tag(hctx->sched_tags, ctx, sched_tag);
     483                 :      14720 :         blk_mq_sched_restart(hctx);
     484                 :      14720 :         blk_queue_exit(q);
     485                 :      14720 : }
     486                 :            : 
     487                 :      14720 : void blk_mq_free_request(struct request *rq)
     488                 :            : {
     489                 :      14720 :         struct request_queue *q = rq->q;
     490                 :      14720 :         struct elevator_queue *e = q->elevator;
     491                 :      14720 :         struct blk_mq_ctx *ctx = rq->mq_ctx;
     492                 :      14720 :         struct blk_mq_hw_ctx *hctx = rq->mq_hctx;
     493                 :            : 
     494         [ +  + ]:      14720 :         if (rq->rq_flags & RQF_ELVPRIV) {
     495   [ +  -  +  - ]:      13951 :                 if (e && e->type->ops.finish_request)
     496                 :      13951 :                         e->type->ops.finish_request(rq);
     497         [ -  + ]:      13951 :                 if (rq->elv.icq) {
     498                 :          0 :                         put_io_context(rq->elv.icq->ioc);
     499                 :          0 :                         rq->elv.icq = NULL;
     500                 :            :                 }
     501                 :            :         }
     502                 :            : 
     503         [ +  + ]:      14720 :         ctx->rq_completed[rq_is_sync(rq)]++;
     504         [ +  + ]:      14720 :         if (rq->rq_flags & RQF_MQ_INFLIGHT)
     505                 :      13807 :                 atomic_dec(&hctx->nr_active);
     506                 :            : 
     507   [ -  +  -  - ]:      14720 :         if (unlikely(laptop_mode && !blk_rq_is_passthrough(rq)))
     508                 :          0 :                 laptop_io_completion(q->backing_dev_info);
     509                 :            : 
     510         [ -  + ]:      14720 :         rq_qos_done(q, rq);
     511                 :            : 
     512                 :      14720 :         WRITE_ONCE(rq->state, MQ_RQ_IDLE);
     513         [ +  - ]:      14720 :         if (refcount_dec_and_test(&rq->ref))
     514                 :      14720 :                 __blk_mq_free_request(rq);
     515                 :      14720 : }
     516                 :            : EXPORT_SYMBOL_GPL(blk_mq_free_request);
     517                 :            : 
     518                 :      14896 : inline void __blk_mq_end_request(struct request *rq, blk_status_t error)
     519                 :            : {
     520                 :      14896 :         u64 now = 0;
     521                 :            : 
     522   [ +  +  +  - ]:      15108 :         if (blk_mq_need_time_stamp(rq))
     523                 :      14896 :                 now = ktime_get_ns();
     524                 :            : 
     525         [ -  + ]:      14896 :         if (rq->rq_flags & RQF_STATS) {
     526                 :          0 :                 blk_mq_poll_stats_start(rq->q);
     527                 :          0 :                 blk_stat_add(rq, now);
     528                 :            :         }
     529                 :            : 
     530         [ +  + ]:      14896 :         if (rq->internal_tag != -1)
     531         [ +  - ]:      14246 :                 blk_mq_sched_completed_request(rq, now);
     532                 :            : 
     533                 :      14896 :         blk_account_io_done(rq, now);
     534                 :            : 
     535         [ +  + ]:      14896 :         if (rq->end_io) {
     536         [ -  + ]:       2086 :                 rq_qos_done(rq->q, rq);
     537                 :       2086 :                 rq->end_io(rq, error);
     538                 :            :         } else {
     539                 :      12810 :                 blk_mq_free_request(rq);
     540                 :            :         }
     541                 :      14896 : }
     542                 :            : EXPORT_SYMBOL(__blk_mq_end_request);
     543                 :            : 
     544                 :        119 : void blk_mq_end_request(struct request *rq, blk_status_t error)
     545                 :            : {
     546         [ -  + ]:        119 :         if (blk_update_request(rq, error, blk_rq_bytes(rq)))
     547                 :          0 :                 BUG();
     548                 :        119 :         __blk_mq_end_request(rq, error);
     549                 :        119 : }
     550                 :            : EXPORT_SYMBOL(blk_mq_end_request);
     551                 :            : 
     552                 :          0 : static void __blk_mq_complete_request_remote(void *data)
     553                 :            : {
     554                 :          0 :         struct request *rq = data;
     555                 :          0 :         struct request_queue *q = rq->q;
     556                 :            : 
     557                 :          0 :         q->mq_ops->complete(rq);
     558                 :          0 : }
     559                 :            : 
     560                 :      14647 : static void __blk_mq_complete_request(struct request *rq)
     561                 :            : {
     562                 :      14647 :         struct blk_mq_ctx *ctx = rq->mq_ctx;
     563                 :      14647 :         struct request_queue *q = rq->q;
     564                 :      14647 :         bool shared = false;
     565                 :      14647 :         int cpu;
     566                 :            : 
     567         [ +  - ]:      14647 :         WRITE_ONCE(rq->state, MQ_RQ_COMPLETE);
     568                 :            :         /*
     569                 :            :          * Most of single queue controllers, there is only one irq vector
     570                 :            :          * for handling IO completion, and the only irq's affinity is set
     571                 :            :          * as all possible CPUs. On most of ARCHs, this affinity means the
     572                 :            :          * irq is handled on one specific CPU.
     573                 :            :          *
     574                 :            :          * So complete IO reqeust in softirq context in case of single queue
     575                 :            :          * for not degrading IO performance by irqsoff latency.
     576                 :            :          */
     577         [ +  - ]:      14647 :         if (q->nr_hw_queues == 1) {
     578                 :      14647 :                 __blk_complete_request(rq);
     579                 :      14647 :                 return;
     580                 :            :         }
     581                 :            : 
     582                 :            :         /*
     583                 :            :          * For a polled request, always complete locallly, it's pointless
     584                 :            :          * to redirect the completion.
     585                 :            :          */
     586   [ #  #  #  # ]:          0 :         if ((rq->cmd_flags & REQ_HIPRI) ||
     587                 :          0 :             !test_bit(QUEUE_FLAG_SAME_COMP, &q->queue_flags)) {
     588                 :          0 :                 q->mq_ops->complete(rq);
     589                 :          0 :                 return;
     590                 :            :         }
     591                 :            : 
     592                 :          0 :         cpu = get_cpu();
     593         [ #  # ]:          0 :         if (!test_bit(QUEUE_FLAG_SAME_FORCE, &q->queue_flags))
     594                 :          0 :                 shared = cpus_share_cache(cpu, ctx->cpu);
     595                 :            : 
     596   [ #  #  #  #  :          0 :         if (cpu != ctx->cpu && !shared && cpu_online(ctx->cpu)) {
                   #  # ]
     597                 :          0 :                 rq->csd.func = __blk_mq_complete_request_remote;
     598                 :          0 :                 rq->csd.info = rq;
     599                 :          0 :                 rq->csd.flags = 0;
     600                 :          0 :                 smp_call_function_single_async(ctx->cpu, &rq->csd);
     601                 :            :         } else {
     602                 :          0 :                 q->mq_ops->complete(rq);
     603                 :            :         }
     604                 :          0 :         put_cpu();
     605                 :            : }
     606                 :            : 
     607                 :      49632 : static void hctx_unlock(struct blk_mq_hw_ctx *hctx, int srcu_idx)
     608                 :            :         __releases(hctx->srcu)
     609                 :            : {
     610                 :      49632 :         if (!(hctx->flags & BLK_MQ_F_BLOCKING))
     611                 :      49632 :                 rcu_read_unlock();
     612                 :            :         else
     613                 :          0 :                 srcu_read_unlock(hctx->srcu, srcu_idx);
     614                 :            : }
     615                 :            : 
     616                 :      49632 : static void hctx_lock(struct blk_mq_hw_ctx *hctx, int *srcu_idx)
     617                 :            :         __acquires(hctx->srcu)
     618                 :            : {
     619                 :      49632 :         if (!(hctx->flags & BLK_MQ_F_BLOCKING)) {
     620                 :            :                 /* shut up gcc false positive */
     621                 :      49632 :                 *srcu_idx = 0;
     622                 :      49632 :                 rcu_read_lock();
     623                 :            :         } else
     624                 :          0 :                 *srcu_idx = srcu_read_lock(hctx->srcu);
     625                 :            : }
     626                 :            : 
     627                 :            : /**
     628                 :            :  * blk_mq_complete_request - end I/O on a request
     629                 :            :  * @rq:         the request being processed
     630                 :            :  *
     631                 :            :  * Description:
     632                 :            :  *      Ends all I/O on a request. It does not handle partial completions.
     633                 :            :  *      The actual completion happens out-of-order, through a IPI handler.
     634                 :            :  **/
     635                 :      14647 : bool blk_mq_complete_request(struct request *rq)
     636                 :            : {
     637                 :      14647 :         if (unlikely(blk_should_fake_timeout(rq->q)))
     638                 :            :                 return false;
     639                 :      14647 :         __blk_mq_complete_request(rq);
     640                 :      14647 :         return true;
     641                 :            : }
     642                 :            : EXPORT_SYMBOL(blk_mq_complete_request);
     643                 :            : 
     644                 :            : /**
     645                 :            :  * blk_mq_start_request - Start processing a request
     646                 :            :  * @rq: Pointer to request to be started
     647                 :            :  *
     648                 :            :  * Function used by device drivers to notify the block layer that a request
     649                 :            :  * is going to be processed now, so blk layer can do proper initializations
     650                 :            :  * such as starting the timeout timer.
     651                 :            :  */
     652                 :      14777 : void blk_mq_start_request(struct request *rq)
     653                 :            : {
     654                 :      14777 :         struct request_queue *q = rq->q;
     655                 :            : 
     656                 :      14777 :         trace_block_rq_issue(q, rq);
     657                 :            : 
     658         [ -  + ]:      14777 :         if (test_bit(QUEUE_FLAG_STATS, &q->queue_flags)) {
     659                 :          0 :                 rq->io_start_time_ns = ktime_get_ns();
     660         [ #  # ]:          0 :                 rq->stats_sectors = blk_rq_sectors(rq);
     661                 :          0 :                 rq->rq_flags |= RQF_STATS;
     662         [ #  # ]:          0 :                 rq_qos_issue(q, rq);
     663                 :            :         }
     664                 :            : 
     665         [ -  + ]:      14777 :         WARN_ON_ONCE(blk_mq_rq_state(rq) != MQ_RQ_IDLE);
     666                 :            : 
     667                 :      14777 :         blk_add_timer(rq);
     668         [ +  + ]:      14777 :         WRITE_ONCE(rq->state, MQ_RQ_IN_FLIGHT);
     669                 :            : 
     670   [ +  +  +  + ]:      14777 :         if (q->dma_drain_size && blk_rq_bytes(rq)) {
     671                 :            :                 /*
     672                 :            :                  * Make sure space for the drain appears.  We know we can do
     673                 :            :                  * this because max_hw_segments has been adjusted to be one
     674                 :            :                  * fewer than the device can handle.
     675                 :            :                  */
     676                 :        247 :                 rq->nr_phys_segments++;
     677                 :            :         }
     678                 :            : 
     679                 :            : #ifdef CONFIG_BLK_DEV_INTEGRITY
     680                 :            :         if (blk_integrity_rq(rq) && req_op(rq) == REQ_OP_WRITE)
     681                 :            :                 q->integrity.profile->prepare_fn(rq);
     682                 :            : #endif
     683                 :      14777 : }
     684                 :            : EXPORT_SYMBOL(blk_mq_start_request);
     685                 :            : 
     686                 :          0 : static void __blk_mq_requeue_request(struct request *rq)
     687                 :            : {
     688                 :          0 :         struct request_queue *q = rq->q;
     689                 :            : 
     690         [ #  # ]:          0 :         blk_mq_put_driver_tag(rq);
     691                 :            : 
     692                 :          0 :         trace_block_rq_requeue(q, rq);
     693         [ #  # ]:          0 :         rq_qos_requeue(q, rq);
     694                 :            : 
     695         [ #  # ]:          0 :         if (blk_mq_request_started(rq)) {
     696         [ #  # ]:          0 :                 WRITE_ONCE(rq->state, MQ_RQ_IDLE);
     697                 :          0 :                 rq->rq_flags &= ~RQF_TIMED_OUT;
     698   [ #  #  #  # ]:          0 :                 if (q->dma_drain_size && blk_rq_bytes(rq))
     699                 :          0 :                         rq->nr_phys_segments--;
     700                 :            :         }
     701                 :          0 : }
     702                 :            : 
     703                 :          0 : void blk_mq_requeue_request(struct request *rq, bool kick_requeue_list)
     704                 :            : {
     705                 :          0 :         __blk_mq_requeue_request(rq);
     706                 :            : 
     707                 :            :         /* this request will be re-inserted to io scheduler queue */
     708         [ #  # ]:          0 :         blk_mq_sched_requeue_request(rq);
     709                 :            : 
     710         [ #  # ]:          0 :         BUG_ON(!list_empty(&rq->queuelist));
     711                 :          0 :         blk_mq_add_to_requeue_list(rq, true, kick_requeue_list);
     712                 :          0 : }
     713                 :            : EXPORT_SYMBOL(blk_mq_requeue_request);
     714                 :            : 
     715                 :        331 : static void blk_mq_requeue_work(struct work_struct *work)
     716                 :            : {
     717                 :        331 :         struct request_queue *q =
     718                 :        331 :                 container_of(work, struct request_queue, requeue_work.work);
     719                 :        331 :         LIST_HEAD(rq_list);
     720                 :        331 :         struct request *rq, *next;
     721                 :            : 
     722                 :        331 :         spin_lock_irq(&q->requeue_lock);
     723         [ +  - ]:        331 :         list_splice_init(&q->requeue_list, &rq_list);
     724                 :        331 :         spin_unlock_irq(&q->requeue_lock);
     725                 :            : 
     726         [ +  + ]:        662 :         list_for_each_entry_safe(rq, next, &rq_list, queuelist) {
     727         [ +  + ]:        331 :                 if (!(rq->rq_flags & (RQF_SOFTBARRIER | RQF_DONTPREP)))
     728                 :        212 :                         continue;
     729                 :            : 
     730                 :        119 :                 rq->rq_flags &= ~RQF_SOFTBARRIER;
     731         [ -  + ]:        119 :                 list_del_init(&rq->queuelist);
     732                 :            :                 /*
     733                 :            :                  * If RQF_DONTPREP, rq has contained some driver specific
     734                 :            :                  * data, so insert it to hctx dispatch list to avoid any
     735                 :            :                  * merge.
     736                 :            :                  */
     737         [ -  + ]:        119 :                 if (rq->rq_flags & RQF_DONTPREP)
     738                 :          0 :                         blk_mq_request_bypass_insert(rq, false, false);
     739                 :            :                 else
     740                 :        119 :                         blk_mq_sched_insert_request(rq, true, false, false);
     741                 :            :         }
     742                 :            : 
     743         [ +  + ]:        543 :         while (!list_empty(&rq_list)) {
     744                 :        212 :                 rq = list_entry(rq_list.next, struct request, queuelist);
     745                 :        212 :                 list_del_init(&rq->queuelist);
     746                 :        212 :                 blk_mq_sched_insert_request(rq, false, false, false);
     747                 :            :         }
     748                 :            : 
     749                 :        331 :         blk_mq_run_hw_queues(q, false);
     750                 :        331 : }
     751                 :            : 
     752                 :        331 : void blk_mq_add_to_requeue_list(struct request *rq, bool at_head,
     753                 :            :                                 bool kick_requeue_list)
     754                 :            : {
     755                 :        331 :         struct request_queue *q = rq->q;
     756                 :        331 :         unsigned long flags;
     757                 :            : 
     758                 :            :         /*
     759                 :            :          * We abuse this flag that is otherwise used by the I/O scheduler to
     760                 :            :          * request head insertion from the workqueue.
     761                 :            :          */
     762         [ -  + ]:        331 :         BUG_ON(rq->rq_flags & RQF_SOFTBARRIER);
     763                 :            : 
     764                 :        331 :         spin_lock_irqsave(&q->requeue_lock, flags);
     765         [ +  + ]:        331 :         if (at_head) {
     766                 :        119 :                 rq->rq_flags |= RQF_SOFTBARRIER;
     767                 :        119 :                 list_add(&rq->queuelist, &q->requeue_list);
     768                 :            :         } else {
     769                 :        212 :                 list_add_tail(&rq->queuelist, &q->requeue_list);
     770                 :            :         }
     771                 :        331 :         spin_unlock_irqrestore(&q->requeue_lock, flags);
     772                 :            : 
     773         [ +  - ]:        331 :         if (kick_requeue_list)
     774                 :        331 :                 blk_mq_kick_requeue_list(q);
     775                 :        331 : }
     776                 :            : 
     777                 :        331 : void blk_mq_kick_requeue_list(struct request_queue *q)
     778                 :            : {
     779                 :        331 :         kblockd_mod_delayed_work_on(WORK_CPU_UNBOUND, &q->requeue_work, 0);
     780                 :        331 : }
     781                 :            : EXPORT_SYMBOL(blk_mq_kick_requeue_list);
     782                 :            : 
     783                 :          0 : void blk_mq_delay_kick_requeue_list(struct request_queue *q,
     784                 :            :                                     unsigned long msecs)
     785                 :            : {
     786         [ #  # ]:          0 :         kblockd_mod_delayed_work_on(WORK_CPU_UNBOUND, &q->requeue_work,
     787                 :            :                                     msecs_to_jiffies(msecs));
     788                 :          0 : }
     789                 :            : EXPORT_SYMBOL(blk_mq_delay_kick_requeue_list);
     790                 :            : 
     791                 :          0 : struct request *blk_mq_tag_to_rq(struct blk_mq_tags *tags, unsigned int tag)
     792                 :            : {
     793         [ #  # ]:          0 :         if (tag < tags->nr_tags) {
     794                 :          0 :                 prefetch(tags->rqs[tag]);
     795                 :          0 :                 return tags->rqs[tag];
     796                 :            :         }
     797                 :            : 
     798                 :            :         return NULL;
     799                 :            : }
     800                 :            : EXPORT_SYMBOL(blk_mq_tag_to_rq);
     801                 :            : 
     802                 :          0 : static bool blk_mq_rq_inflight(struct blk_mq_hw_ctx *hctx, struct request *rq,
     803                 :            :                                void *priv, bool reserved)
     804                 :            : {
     805                 :            :         /*
     806                 :            :          * If we find a request that is inflight and the queue matches,
     807                 :            :          * we know the queue is busy. Return false to stop the iteration.
     808                 :            :          */
     809   [ #  #  #  # ]:          0 :         if (rq->state == MQ_RQ_IN_FLIGHT && rq->q == hctx->queue) {
     810                 :          0 :                 bool *busy = priv;
     811                 :            : 
     812                 :          0 :                 *busy = true;
     813                 :          0 :                 return false;
     814                 :            :         }
     815                 :            : 
     816                 :            :         return true;
     817                 :            : }
     818                 :            : 
     819                 :          0 : bool blk_mq_queue_inflight(struct request_queue *q)
     820                 :            : {
     821                 :          0 :         bool busy = false;
     822                 :            : 
     823                 :          0 :         blk_mq_queue_tag_busy_iter(q, blk_mq_rq_inflight, &busy);
     824                 :          0 :         return busy;
     825                 :            : }
     826                 :            : EXPORT_SYMBOL_GPL(blk_mq_queue_inflight);
     827                 :            : 
     828                 :        130 : static void blk_mq_rq_timed_out(struct request *req, bool reserved)
     829                 :            : {
     830                 :        130 :         req->rq_flags |= RQF_TIMED_OUT;
     831         [ +  - ]:        130 :         if (req->q->mq_ops->timeout) {
     832                 :        130 :                 enum blk_eh_timer_return ret;
     833                 :            : 
     834                 :        130 :                 ret = req->q->mq_ops->timeout(req, reserved);
     835         [ -  + ]:        130 :                 if (ret == BLK_EH_DONE)
     836                 :            :                         return;
     837         [ #  # ]:          0 :                 WARN_ON_ONCE(ret != BLK_EH_RESET_TIMER);
     838                 :            :         }
     839                 :            : 
     840                 :          0 :         blk_add_timer(req);
     841                 :            : }
     842                 :            : 
     843                 :        260 : static bool blk_mq_req_expired(struct request *rq, unsigned long *next)
     844                 :            : {
     845                 :        260 :         unsigned long deadline;
     846                 :            : 
     847                 :        260 :         if (blk_mq_rq_state(rq) != MQ_RQ_IN_FLIGHT)
     848                 :            :                 return false;
     849   [ +  -  +  - ]:        260 :         if (rq->rq_flags & RQF_TIMED_OUT)
     850                 :            :                 return false;
     851                 :            : 
     852   [ -  +  -  + ]:        260 :         deadline = READ_ONCE(rq->deadline);
     853   [ -  +  -  + ]:        260 :         if (time_after_eq(jiffies, deadline))
     854                 :            :                 return true;
     855                 :            : 
     856   [ #  #  #  # ]:          0 :         if (*next == 0)
     857                 :          0 :                 *next = deadline;
     858   [ #  #  #  # ]:          0 :         else if (time_after(*next, deadline))
     859                 :          0 :                 *next = deadline;
     860                 :            :         return false;
     861                 :            : }
     862                 :            : 
     863                 :        130 : static bool blk_mq_check_expired(struct blk_mq_hw_ctx *hctx,
     864                 :            :                 struct request *rq, void *priv, bool reserved)
     865                 :            : {
     866                 :        130 :         unsigned long *next = priv;
     867                 :            : 
     868                 :            :         /*
     869                 :            :          * Just do a quick check if it is expired before locking the request in
     870                 :            :          * so we're not unnecessarilly synchronizing across CPUs.
     871                 :            :          */
     872         [ +  - ]:        130 :         if (!blk_mq_req_expired(rq, next))
     873                 :          0 :                 return true;
     874                 :            : 
     875                 :            :         /*
     876                 :            :          * We have reason to believe the request may be expired. Take a
     877                 :            :          * reference on the request to lock this request lifetime into its
     878                 :            :          * currently allocated context to prevent it from being reallocated in
     879                 :            :          * the event the completion by-passes this timeout handler.
     880                 :            :          *
     881                 :            :          * If the reference was already released, then the driver beat the
     882                 :            :          * timeout handler to posting a natural completion.
     883                 :            :          */
     884         [ +  - ]:        130 :         if (!refcount_inc_not_zero(&rq->ref))
     885                 :            :                 return true;
     886                 :            : 
     887                 :            :         /*
     888                 :            :          * The request is now locked and cannot be reallocated underneath the
     889                 :            :          * timeout handler's processing. Re-verify this exact request is truly
     890                 :            :          * expired; if it is not expired, then the request was completed and
     891                 :            :          * reallocated as a new request.
     892                 :            :          */
     893         [ +  - ]:        130 :         if (blk_mq_req_expired(rq, next))
     894                 :        130 :                 blk_mq_rq_timed_out(rq, reserved);
     895                 :            : 
     896         [ -  + ]:        130 :         if (is_flush_rq(rq, hctx))
     897                 :          0 :                 rq->end_io(rq, 0);
     898         [ -  + ]:        130 :         else if (refcount_dec_and_test(&rq->ref))
     899                 :          0 :                 __blk_mq_free_request(rq);
     900                 :            : 
     901                 :            :         return true;
     902                 :            : }
     903                 :            : 
     904                 :        130 : static void blk_mq_timeout_work(struct work_struct *work)
     905                 :            : {
     906                 :        130 :         struct request_queue *q =
     907                 :        130 :                 container_of(work, struct request_queue, timeout_work);
     908                 :        130 :         unsigned long next = 0;
     909                 :        130 :         struct blk_mq_hw_ctx *hctx;
     910                 :        130 :         int i;
     911                 :            : 
     912                 :            :         /* A deadlock might occur if a request is stuck requiring a
     913                 :            :          * timeout at the same time a queue freeze is waiting
     914                 :            :          * completion, since the timeout code would not be able to
     915                 :            :          * acquire the queue reference here.
     916                 :            :          *
     917                 :            :          * That's why we don't use blk_queue_enter here; instead, we use
     918                 :            :          * percpu_ref_tryget directly, because we need to be able to
     919                 :            :          * obtain a reference even in the short window between the queue
     920                 :            :          * starting to freeze, by dropping the first reference in
     921                 :            :          * blk_freeze_queue_start, and the moment the last request is
     922                 :            :          * consumed, marked by the instant q_usage_counter reaches
     923                 :            :          * zero.
     924                 :            :          */
     925         [ -  + ]:        130 :         if (!percpu_ref_tryget(&q->q_usage_counter))
     926                 :          0 :                 return;
     927                 :            : 
     928                 :        130 :         blk_mq_queue_tag_busy_iter(q, blk_mq_check_expired, &next);
     929                 :            : 
     930         [ -  + ]:        130 :         if (next != 0) {
     931                 :          0 :                 mod_timer(&q->timeout, next);
     932                 :            :         } else {
     933                 :            :                 /*
     934                 :            :                  * Request timeouts are handled as a forward rolling timer. If
     935                 :            :                  * we end up here it means that no requests are pending and
     936                 :            :                  * also that no request has been pending for a while. Mark
     937                 :            :                  * each hctx as idle.
     938                 :            :                  */
     939         [ +  + ]:        260 :                 queue_for_each_hw_ctx(q, hctx, i) {
     940                 :            :                         /* the hctx may be unmapped, so check it here */
     941   [ +  -  +  - ]:        260 :                         if (blk_mq_hw_queue_mapped(hctx))
     942         [ -  + ]:        130 :                                 blk_mq_tag_idle(hctx);
     943                 :            :                 }
     944                 :            :         }
     945                 :        130 :         blk_queue_exit(q);
     946                 :            : }
     947                 :            : 
     948                 :            : struct flush_busy_ctx_data {
     949                 :            :         struct blk_mq_hw_ctx *hctx;
     950                 :            :         struct list_head *list;
     951                 :            : };
     952                 :            : 
     953                 :          0 : static bool flush_busy_ctx(struct sbitmap *sb, unsigned int bitnr, void *data)
     954                 :            : {
     955                 :          0 :         struct flush_busy_ctx_data *flush_data = data;
     956                 :          0 :         struct blk_mq_hw_ctx *hctx = flush_data->hctx;
     957                 :          0 :         struct blk_mq_ctx *ctx = hctx->ctxs[bitnr];
     958                 :          0 :         enum hctx_type type = hctx->type;
     959                 :            : 
     960                 :          0 :         spin_lock(&ctx->lock);
     961         [ #  # ]:          0 :         list_splice_tail_init(&ctx->rq_lists[type], flush_data->list);
     962                 :          0 :         sbitmap_clear_bit(sb, bitnr);
     963                 :          0 :         spin_unlock(&ctx->lock);
     964                 :          0 :         return true;
     965                 :            : }
     966                 :            : 
     967                 :            : /*
     968                 :            :  * Process software queues that have been marked busy, splicing them
     969                 :            :  * to the for-dispatch
     970                 :            :  */
     971                 :          0 : void blk_mq_flush_busy_ctxs(struct blk_mq_hw_ctx *hctx, struct list_head *list)
     972                 :            : {
     973                 :          0 :         struct flush_busy_ctx_data data = {
     974                 :            :                 .hctx = hctx,
     975                 :            :                 .list = list,
     976                 :            :         };
     977                 :            : 
     978                 :          0 :         sbitmap_for_each_set(&hctx->ctx_map, flush_busy_ctx, &data);
     979                 :          0 : }
     980                 :            : EXPORT_SYMBOL_GPL(blk_mq_flush_busy_ctxs);
     981                 :            : 
     982                 :            : struct dispatch_rq_data {
     983                 :            :         struct blk_mq_hw_ctx *hctx;
     984                 :            :         struct request *rq;
     985                 :            : };
     986                 :            : 
     987                 :          0 : static bool dispatch_rq_from_ctx(struct sbitmap *sb, unsigned int bitnr,
     988                 :            :                 void *data)
     989                 :            : {
     990                 :          0 :         struct dispatch_rq_data *dispatch_data = data;
     991                 :          0 :         struct blk_mq_hw_ctx *hctx = dispatch_data->hctx;
     992                 :          0 :         struct blk_mq_ctx *ctx = hctx->ctxs[bitnr];
     993                 :          0 :         enum hctx_type type = hctx->type;
     994                 :            : 
     995                 :          0 :         spin_lock(&ctx->lock);
     996         [ #  # ]:          0 :         if (!list_empty(&ctx->rq_lists[type])) {
     997                 :          0 :                 dispatch_data->rq = list_entry_rq(ctx->rq_lists[type].next);
     998         [ #  # ]:          0 :                 list_del_init(&dispatch_data->rq->queuelist);
     999         [ #  # ]:          0 :                 if (list_empty(&ctx->rq_lists[type]))
    1000                 :          0 :                         sbitmap_clear_bit(sb, bitnr);
    1001                 :            :         }
    1002                 :          0 :         spin_unlock(&ctx->lock);
    1003                 :            : 
    1004                 :          0 :         return !dispatch_data->rq;
    1005                 :            : }
    1006                 :            : 
    1007                 :          0 : struct request *blk_mq_dequeue_from_ctx(struct blk_mq_hw_ctx *hctx,
    1008                 :            :                                         struct blk_mq_ctx *start)
    1009                 :            : {
    1010         [ #  # ]:          0 :         unsigned off = start ? start->index_hw[hctx->type] : 0;
    1011                 :          0 :         struct dispatch_rq_data data = {
    1012                 :            :                 .hctx = hctx,
    1013                 :            :                 .rq   = NULL,
    1014                 :            :         };
    1015                 :            : 
    1016                 :          0 :         __sbitmap_for_each_set(&hctx->ctx_map, off,
    1017                 :            :                                dispatch_rq_from_ctx, &data);
    1018                 :            : 
    1019                 :          0 :         return data.rq;
    1020                 :            : }
    1021                 :            : 
    1022                 :      15402 : static inline unsigned int queued_to_index(unsigned int queued)
    1023                 :            : {
    1024         [ +  + ]:      15402 :         if (!queued)
    1025                 :            :                 return 0;
    1026                 :            : 
    1027   [ -  +  -  -  :      14777 :         return min(BLK_MQ_MAX_DISPATCH_ORDER - 1, ilog2(queued) + 1);
          -  -  -  -  -  
          -  -  -  -  -  
          -  -  -  -  -  
          -  -  -  -  -  
          -  -  -  -  -  
          -  -  -  -  -  
          -  -  -  -  -  
          -  -  -  -  -  
          -  -  -  -  -  
          -  -  -  -  -  
          -  -  -  -  -  
             -  -  -  -  
                      - ]
    1028                 :            : }
    1029                 :            : 
    1030                 :      15724 : bool blk_mq_get_driver_tag(struct request *rq)
    1031                 :            : {
    1032                 :      15724 :         struct blk_mq_alloc_data data = {
    1033                 :      15724 :                 .q = rq->q,
    1034                 :      15724 :                 .hctx = rq->mq_hctx,
    1035                 :            :                 .flags = BLK_MQ_REQ_NOWAIT,
    1036                 :      15724 :                 .cmd_flags = rq->cmd_flags,
    1037                 :            :         };
    1038                 :      15724 :         bool shared;
    1039                 :            : 
    1040         [ +  + ]:      15724 :         if (rq->tag != -1)
    1041                 :            :                 return true;
    1042                 :            : 
    1043         [ -  + ]:      15074 :         if (blk_mq_tag_is_reserved(data.hctx->sched_tags, rq->internal_tag))
    1044                 :          0 :                 data.flags |= BLK_MQ_REQ_RESERVED;
    1045                 :            : 
    1046         [ +  + ]:      15074 :         shared = blk_mq_tag_busy(data.hctx);
    1047                 :      15074 :         rq->tag = blk_mq_get_tag(&data);
    1048         [ +  + ]:      15074 :         if (rq->tag >= 0) {
    1049         [ +  + ]:      14127 :                 if (shared) {
    1050                 :      13802 :                         rq->rq_flags |= RQF_MQ_INFLIGHT;
    1051                 :      13802 :                         atomic_inc(&data.hctx->nr_active);
    1052                 :            :                 }
    1053                 :      14127 :                 data.hctx->tags->rqs[rq->tag] = rq;
    1054                 :            :         }
    1055                 :            : 
    1056                 :      15074 :         return rq->tag != -1;
    1057                 :            : }
    1058                 :            : 
    1059                 :        322 : static int blk_mq_dispatch_wake(wait_queue_entry_t *wait, unsigned mode,
    1060                 :            :                                 int flags, void *key)
    1061                 :            : {
    1062                 :        322 :         struct blk_mq_hw_ctx *hctx;
    1063                 :            : 
    1064                 :        322 :         hctx = container_of(wait, struct blk_mq_hw_ctx, dispatch_wait);
    1065                 :            : 
    1066                 :        322 :         spin_lock(&hctx->dispatch_wait_lock);
    1067         [ +  - ]:        322 :         if (!list_empty(&wait->entry)) {
    1068                 :        322 :                 struct sbitmap_queue *sbq;
    1069                 :            : 
    1070                 :        322 :                 list_del_init(&wait->entry);
    1071                 :        322 :                 sbq = &hctx->tags->bitmap_tags;
    1072                 :        322 :                 atomic_dec(&sbq->ws_active);
    1073                 :            :         }
    1074                 :        322 :         spin_unlock(&hctx->dispatch_wait_lock);
    1075                 :            : 
    1076                 :        322 :         blk_mq_run_hw_queue(hctx, true);
    1077                 :        322 :         return 1;
    1078                 :            : }
    1079                 :            : 
    1080                 :            : /*
    1081                 :            :  * Mark us waiting for a tag. For shared tags, this involves hooking us into
    1082                 :            :  * the tag wakeups. For non-shared tags, we can simply mark us needing a
    1083                 :            :  * restart. For both cases, take care to check the condition again after
    1084                 :            :  * marking us as waiting.
    1085                 :            :  */
    1086                 :        612 : static bool blk_mq_mark_tag_wait(struct blk_mq_hw_ctx *hctx,
    1087                 :            :                                  struct request *rq)
    1088                 :            : {
    1089                 :        612 :         struct sbitmap_queue *sbq = &hctx->tags->bitmap_tags;
    1090                 :        612 :         struct wait_queue_head *wq;
    1091                 :        612 :         wait_queue_entry_t *wait;
    1092                 :        612 :         bool ret;
    1093                 :            : 
    1094         [ +  + ]:        612 :         if (!(hctx->flags & BLK_MQ_F_TAG_SHARED)) {
    1095                 :         13 :                 blk_mq_sched_mark_restart_hctx(hctx);
    1096                 :            : 
    1097                 :            :                 /*
    1098                 :            :                  * It's possible that a tag was freed in the window between the
    1099                 :            :                  * allocation failure and adding the hardware queue to the wait
    1100                 :            :                  * queue.
    1101                 :            :                  *
    1102                 :            :                  * Don't clear RESTART here, someone else could have set it.
    1103                 :            :                  * At most this will cost an extra queue run.
    1104                 :            :                  */
    1105                 :         13 :                 return blk_mq_get_driver_tag(rq);
    1106                 :            :         }
    1107                 :            : 
    1108                 :        599 :         wait = &hctx->dispatch_wait;
    1109         [ +  + ]:        599 :         if (!list_empty_careful(&wait->entry))
    1110                 :            :                 return false;
    1111                 :            : 
    1112                 :        322 :         wq = &bt_wait_ptr(sbq, hctx)->wait;
    1113                 :            : 
    1114                 :        322 :         spin_lock_irq(&wq->lock);
    1115                 :        322 :         spin_lock(&hctx->dispatch_wait_lock);
    1116         [ -  + ]:        322 :         if (!list_empty(&wait->entry)) {
    1117                 :          0 :                 spin_unlock(&hctx->dispatch_wait_lock);
    1118                 :          0 :                 spin_unlock_irq(&wq->lock);
    1119                 :          0 :                 return false;
    1120                 :            :         }
    1121                 :            : 
    1122                 :        322 :         atomic_inc(&sbq->ws_active);
    1123                 :        322 :         wait->flags &= ~WQ_FLAG_EXCLUSIVE;
    1124                 :        322 :         __add_wait_queue(wq, wait);
    1125                 :            : 
    1126                 :            :         /*
    1127                 :            :          * It's possible that a tag was freed in the window between the
    1128                 :            :          * allocation failure and adding the hardware queue to the wait
    1129                 :            :          * queue.
    1130                 :            :          */
    1131                 :        322 :         ret = blk_mq_get_driver_tag(rq);
    1132         [ +  - ]:        322 :         if (!ret) {
    1133                 :        322 :                 spin_unlock(&hctx->dispatch_wait_lock);
    1134                 :        322 :                 spin_unlock_irq(&wq->lock);
    1135                 :        322 :                 return false;
    1136                 :            :         }
    1137                 :            : 
    1138                 :            :         /*
    1139                 :            :          * We got a tag, remove ourselves from the wait queue to ensure
    1140                 :            :          * someone else gets the wakeup.
    1141                 :            :          */
    1142                 :          0 :         list_del_init(&wait->entry);
    1143                 :          0 :         atomic_dec(&sbq->ws_active);
    1144                 :          0 :         spin_unlock(&hctx->dispatch_wait_lock);
    1145                 :          0 :         spin_unlock_irq(&wq->lock);
    1146                 :            : 
    1147                 :          0 :         return true;
    1148                 :            : }
    1149                 :            : 
    1150                 :            : #define BLK_MQ_DISPATCH_BUSY_EWMA_WEIGHT  8
    1151                 :            : #define BLK_MQ_DISPATCH_BUSY_EWMA_FACTOR  4
    1152                 :            : /*
    1153                 :            :  * Update dispatch busy with the Exponential Weighted Moving Average(EWMA):
    1154                 :            :  * - EWMA is one simple way to compute running average value
    1155                 :            :  * - weight(7/8 and 1/8) is applied so that it can decrease exponentially
    1156                 :            :  * - take 4 as factor for avoiding to get too small(0) result, and this
    1157                 :            :  *   factor doesn't matter because EWMA decreases exponentially
    1158                 :            :  */
    1159                 :      15402 : static void blk_mq_update_dispatch_busy(struct blk_mq_hw_ctx *hctx, bool busy)
    1160                 :            : {
    1161                 :      15402 :         unsigned int ewma;
    1162                 :            : 
    1163                 :      15402 :         if (hctx->queue->elevator)
    1164                 :            :                 return;
    1165                 :            : 
    1166                 :        650 :         ewma = hctx->dispatch_busy;
    1167                 :            : 
    1168   [ -  -  -  -  :        650 :         if (!ewma && !busy)
                   -  + ]
    1169                 :            :                 return;
    1170                 :            : 
    1171                 :          0 :         ewma *= BLK_MQ_DISPATCH_BUSY_EWMA_WEIGHT - 1;
    1172                 :          0 :         if (busy)
    1173                 :          0 :                 ewma += 1 << BLK_MQ_DISPATCH_BUSY_EWMA_FACTOR;
    1174                 :          0 :         ewma /= BLK_MQ_DISPATCH_BUSY_EWMA_WEIGHT;
    1175                 :            : 
    1176                 :          0 :         hctx->dispatch_busy = ewma;
    1177                 :            : }
    1178                 :            : 
    1179                 :            : #define BLK_MQ_RESOURCE_DELAY   3               /* ms units */
    1180                 :            : 
    1181                 :            : /*
    1182                 :            :  * Returns true if we did some work AND can potentially do more.
    1183                 :            :  */
    1184                 :      15402 : bool blk_mq_dispatch_rq_list(struct request_queue *q, struct list_head *list,
    1185                 :            :                              bool got_budget)
    1186                 :            : {
    1187                 :      15402 :         struct blk_mq_hw_ctx *hctx;
    1188                 :      15402 :         struct request *rq, *nxt;
    1189                 :      15402 :         bool no_tag = false;
    1190                 :      15402 :         int errors, queued;
    1191                 :      15402 :         blk_status_t ret = BLK_STS_OK;
    1192                 :            : 
    1193         [ +  - ]:      15402 :         if (list_empty(list))
    1194                 :            :                 return false;
    1195                 :            : 
    1196   [ +  -  -  -  :      30804 :         WARN_ON(!list_is_singular(list) && got_budget);
                   -  + ]
    1197                 :            : 
    1198                 :            :         /*
    1199                 :            :          * Now process all the entries, sending them to the driver.
    1200                 :            :          */
    1201                 :            :         errors = queued = 0;
    1202                 :      15402 :         do {
    1203                 :      15402 :                 struct blk_mq_queue_data bd;
    1204                 :            : 
    1205                 :      15402 :                 rq = list_first_entry(list, struct request, queuelist);
    1206                 :            : 
    1207                 :      15402 :                 hctx = rq->mq_hctx;
    1208   [ +  +  +  + ]:      18113 :                 if (!got_budget && !blk_mq_get_dispatch_budget(hctx))
    1209                 :            :                         break;
    1210                 :            : 
    1211         [ +  + ]:      15389 :                 if (!blk_mq_get_driver_tag(rq)) {
    1212                 :            :                         /*
    1213                 :            :                          * The initial allocation attempt failed, so we need to
    1214                 :            :                          * rerun the hardware queue when a tag is freed. The
    1215                 :            :                          * waitqueue takes care of that. If the queue is run
    1216                 :            :                          * before we add this entry back on the dispatch list,
    1217                 :            :                          * we'll re-run it below.
    1218                 :            :                          */
    1219         [ +  - ]:        612 :                         if (!blk_mq_mark_tag_wait(hctx, rq)) {
    1220         [ +  - ]:        612 :                                 blk_mq_put_dispatch_budget(hctx);
    1221                 :            :                                 /*
    1222                 :            :                                  * For non-shared tags, the RESTART check
    1223                 :            :                                  * will suffice.
    1224                 :            :                                  */
    1225         [ +  + ]:        612 :                                 if (hctx->flags & BLK_MQ_F_TAG_SHARED)
    1226                 :        599 :                                         no_tag = true;
    1227                 :            :                                 break;
    1228                 :            :                         }
    1229                 :            :                 }
    1230                 :            : 
    1231         [ +  - ]:      14777 :                 list_del_init(&rq->queuelist);
    1232                 :            : 
    1233                 :      14777 :                 bd.rq = rq;
    1234                 :            : 
    1235                 :            :                 /*
    1236                 :            :                  * Flag last if we have no more requests, or if we have more
    1237                 :            :                  * but can't assign a driver tag to it.
    1238                 :            :                  */
    1239         [ +  - ]:      14777 :                 if (list_empty(list))
    1240                 :      14777 :                         bd.last = true;
    1241                 :            :                 else {
    1242                 :          0 :                         nxt = list_first_entry(list, struct request, queuelist);
    1243                 :          0 :                         bd.last = !blk_mq_get_driver_tag(nxt);
    1244                 :            :                 }
    1245                 :            : 
    1246                 :      14777 :                 ret = q->mq_ops->queue_rq(hctx, &bd);
    1247         [ -  + ]:      14777 :                 if (ret == BLK_STS_RESOURCE || ret == BLK_STS_DEV_RESOURCE) {
    1248                 :            :                         /*
    1249                 :            :                          * If an I/O scheduler has been configured and we got a
    1250                 :            :                          * driver tag for the next request already, free it
    1251                 :            :                          * again.
    1252                 :            :                          */
    1253         [ #  # ]:          0 :                         if (!list_empty(list)) {
    1254                 :          0 :                                 nxt = list_first_entry(list, struct request, queuelist);
    1255         [ #  # ]:          0 :                                 blk_mq_put_driver_tag(nxt);
    1256                 :            :                         }
    1257                 :          0 :                         list_add(&rq->queuelist, list);
    1258                 :          0 :                         __blk_mq_requeue_request(rq);
    1259                 :          0 :                         break;
    1260                 :            :                 }
    1261                 :            : 
    1262         [ -  + ]:      14777 :                 if (unlikely(ret != BLK_STS_OK)) {
    1263                 :          0 :                         errors++;
    1264                 :          0 :                         blk_mq_end_request(rq, BLK_STS_IOERR);
    1265                 :          0 :                         continue;
    1266                 :            :                 }
    1267                 :            : 
    1268                 :      14777 :                 queued++;
    1269         [ -  + ]:      14777 :         } while (!list_empty(list));
    1270                 :            : 
    1271                 :      15402 :         hctx->dispatched[queued_to_index(queued)]++;
    1272                 :            : 
    1273                 :            :         /*
    1274                 :            :          * Any items that need requeuing? Stuff them into hctx->dispatch,
    1275                 :            :          * that is where we will continue on next queue run.
    1276                 :            :          */
    1277         [ +  + ]:      15402 :         if (!list_empty(list)) {
    1278                 :        625 :                 bool needs_restart;
    1279                 :            : 
    1280                 :            :                 /*
    1281                 :            :                  * If we didn't flush the entire list, we could have told
    1282                 :            :                  * the driver there was more coming, but that turned out to
    1283                 :            :                  * be a lie.
    1284                 :            :                  */
    1285         [ -  + ]:        625 :                 if (q->mq_ops->commit_rqs)
    1286                 :          0 :                         q->mq_ops->commit_rqs(hctx);
    1287                 :            : 
    1288                 :        625 :                 spin_lock(&hctx->lock);
    1289         [ +  - ]:        625 :                 list_splice_tail_init(list, &hctx->dispatch);
    1290                 :        625 :                 spin_unlock(&hctx->lock);
    1291                 :            : 
    1292                 :            :                 /*
    1293                 :            :                  * If SCHED_RESTART was set by the caller of this function and
    1294                 :            :                  * it is no longer set that means that it was cleared by another
    1295                 :            :                  * thread and hence that a queue rerun is needed.
    1296                 :            :                  *
    1297                 :            :                  * If 'no_tag' is set, that means that we failed getting
    1298                 :            :                  * a driver tag with an I/O scheduler attached. If our dispatch
    1299                 :            :                  * waitqueue is no longer active, ensure that we run the queue
    1300                 :            :                  * AFTER adding our entries back to the list.
    1301                 :            :                  *
    1302                 :            :                  * If no I/O scheduler has been configured it is possible that
    1303                 :            :                  * the hardware queue got stopped and restarted before requests
    1304                 :            :                  * were pushed back onto the dispatch list. Rerun the queue to
    1305                 :            :                  * avoid starvation. Notes:
    1306                 :            :                  * - blk_mq_run_hw_queue() checks whether or not a queue has
    1307                 :            :                  *   been stopped before rerunning a queue.
    1308                 :            :                  * - Some but not all block drivers stop a queue before
    1309                 :            :                  *   returning BLK_STS_RESOURCE. Two exceptions are scsi-mq
    1310                 :            :                  *   and dm-rq.
    1311                 :            :                  *
    1312                 :            :                  * If driver returns BLK_STS_RESOURCE and SCHED_RESTART
    1313                 :            :                  * bit is set, run queue after a delay to avoid IO stalls
    1314                 :            :                  * that could otherwise occur if the queue is idle.
    1315                 :            :                  */
    1316                 :        625 :                 needs_restart = blk_mq_sched_needs_restart(hctx);
    1317   [ +  +  +  + ]:        625 :                 if (!needs_restart ||
    1318         [ +  + ]:        299 :                     (no_tag && list_empty_careful(&hctx->dispatch_wait.entry)))
    1319                 :        301 :                         blk_mq_run_hw_queue(hctx, true);
    1320         [ -  + ]:        324 :                 else if (needs_restart && (ret == BLK_STS_RESOURCE))
    1321                 :          0 :                         blk_mq_delay_run_hw_queue(hctx, BLK_MQ_RESOURCE_DELAY);
    1322                 :            : 
    1323         [ -  + ]:        625 :                 blk_mq_update_dispatch_busy(hctx, true);
    1324                 :        625 :                 return false;
    1325                 :            :         } else
    1326         [ +  + ]:      14777 :                 blk_mq_update_dispatch_busy(hctx, false);
    1327                 :            : 
    1328                 :            :         /*
    1329                 :            :          * If the host/device is unable to accept more work, inform the
    1330                 :            :          * caller of that.
    1331                 :            :          */
    1332         [ +  - ]:      14777 :         if (ret == BLK_STS_RESOURCE || ret == BLK_STS_DEV_RESOURCE)
    1333                 :            :                 return false;
    1334                 :            : 
    1335                 :      14777 :         return (queued + errors) != 0;
    1336                 :            : }
    1337                 :            : 
    1338                 :            : /**
    1339                 :            :  * __blk_mq_run_hw_queue - Run a hardware queue.
    1340                 :            :  * @hctx: Pointer to the hardware queue to run.
    1341                 :            :  *
    1342                 :            :  * Send pending requests to the hardware.
    1343                 :            :  */
    1344                 :      16291 : static void __blk_mq_run_hw_queue(struct blk_mq_hw_ctx *hctx)
    1345                 :            : {
    1346                 :      16291 :         int srcu_idx;
    1347                 :            : 
    1348                 :            :         /*
    1349                 :            :          * We should be running this queue from one of the CPUs that
    1350                 :            :          * are mapped to it.
    1351                 :            :          *
    1352                 :            :          * There are at least two related races now between setting
    1353                 :            :          * hctx->next_cpu from blk_mq_hctx_next_cpu() and running
    1354                 :            :          * __blk_mq_run_hw_queue():
    1355                 :            :          *
    1356                 :            :          * - hctx->next_cpu is found offline in blk_mq_hctx_next_cpu(),
    1357                 :            :          *   but later it becomes online, then this warning is harmless
    1358                 :            :          *   at all
    1359                 :            :          *
    1360                 :            :          * - hctx->next_cpu is found online in blk_mq_hctx_next_cpu(),
    1361                 :            :          *   but later it becomes offline, then the warning can't be
    1362                 :            :          *   triggered, and we depend on blk-mq timeout handler to
    1363                 :            :          *   handle dispatched requests to this hctx
    1364                 :            :          */
    1365   [ -  +  -  - ]:      16291 :         if (!cpumask_test_cpu(raw_smp_processor_id(), hctx->cpumask) &&
    1366                 :          0 :                 cpu_online(hctx->next_cpu)) {
    1367         [ #  # ]:          0 :                 printk(KERN_WARNING "run queue from wrong CPU %d, hctx %s\n",
    1368                 :          0 :                         raw_smp_processor_id(),
    1369                 :            :                         cpumask_empty(hctx->cpumask) ? "inactive": "active");
    1370                 :          0 :                 dump_stack();
    1371                 :            :         }
    1372                 :            : 
    1373                 :            :         /*
    1374                 :            :          * We can't run the queue inline with ints disabled. Ensure that
    1375                 :            :          * we catch bad users of this early.
    1376                 :            :          */
    1377         [ -  + ]:      16291 :         WARN_ON_ONCE(in_interrupt());
    1378                 :            : 
    1379         [ -  + ]:      16291 :         might_sleep_if(hctx->flags & BLK_MQ_F_BLOCKING);
    1380                 :            : 
    1381         [ +  - ]:      16291 :         hctx_lock(hctx, &srcu_idx);
    1382                 :      16291 :         blk_mq_sched_dispatch_requests(hctx);
    1383         [ +  - ]:      16291 :         hctx_unlock(hctx, srcu_idx);
    1384                 :      16291 : }
    1385                 :            : 
    1386                 :        143 : static inline int blk_mq_first_mapped_cpu(struct blk_mq_hw_ctx *hctx)
    1387                 :            : {
    1388                 :        143 :         int cpu = cpumask_first_and(hctx->cpumask, cpu_online_mask);
    1389                 :            : 
    1390         [ -  + ]:        143 :         if (cpu >= nr_cpu_ids)
    1391                 :          0 :                 cpu = cpumask_first(hctx->cpumask);
    1392                 :        143 :         return cpu;
    1393                 :            : }
    1394                 :            : 
    1395                 :            : /*
    1396                 :            :  * It'd be great if the workqueue API had a way to pass
    1397                 :            :  * in a mask and had some smarts for more clever placement.
    1398                 :            :  * For now we just round-robin here, switching for every
    1399                 :            :  * BLK_MQ_CPU_WORK_BATCH queued items.
    1400                 :            :  */
    1401                 :       3247 : static int blk_mq_hctx_next_cpu(struct blk_mq_hw_ctx *hctx)
    1402                 :            : {
    1403                 :       3247 :         bool tried = false;
    1404                 :       3247 :         int next_cpu = hctx->next_cpu;
    1405                 :            : 
    1406         [ -  + ]:       3247 :         if (hctx->queue->nr_hw_queues == 1)
    1407                 :            :                 return WORK_CPU_UNBOUND;
    1408                 :            : 
    1409         [ #  # ]:          0 :         if (--hctx->next_cpu_batch <= 0) {
    1410                 :          0 : select_cpu:
    1411                 :          0 :                 next_cpu = cpumask_next_and(next_cpu, hctx->cpumask,
    1412                 :            :                                 cpu_online_mask);
    1413         [ #  # ]:          0 :                 if (next_cpu >= nr_cpu_ids)
    1414                 :          0 :                         next_cpu = blk_mq_first_mapped_cpu(hctx);
    1415                 :          0 :                 hctx->next_cpu_batch = BLK_MQ_CPU_WORK_BATCH;
    1416                 :            :         }
    1417                 :            : 
    1418                 :            :         /*
    1419                 :            :          * Do unbound schedule if we can't find a online CPU for this hctx,
    1420                 :            :          * and it should only happen in the path of handling CPU DEAD.
    1421                 :            :          */
    1422         [ #  # ]:          0 :         if (!cpu_online(next_cpu)) {
    1423         [ #  # ]:          0 :                 if (!tried) {
    1424                 :          0 :                         tried = true;
    1425                 :          0 :                         goto select_cpu;
    1426                 :            :                 }
    1427                 :            : 
    1428                 :            :                 /*
    1429                 :            :                  * Make sure to re-select CPU next time once after CPUs
    1430                 :            :                  * in hctx->cpumask become online again.
    1431                 :            :                  */
    1432                 :          0 :                 hctx->next_cpu = next_cpu;
    1433                 :          0 :                 hctx->next_cpu_batch = 1;
    1434                 :          0 :                 return WORK_CPU_UNBOUND;
    1435                 :            :         }
    1436                 :            : 
    1437                 :          0 :         hctx->next_cpu = next_cpu;
    1438                 :          0 :         return next_cpu;
    1439                 :            : }
    1440                 :            : 
    1441                 :            : /**
    1442                 :            :  * __blk_mq_delay_run_hw_queue - Run (or schedule to run) a hardware queue.
    1443                 :            :  * @hctx: Pointer to the hardware queue to run.
    1444                 :            :  * @async: If we want to run the queue asynchronously.
    1445                 :            :  * @msecs: Microseconds of delay to wait before running the queue.
    1446                 :            :  *
    1447                 :            :  * If !@async, try to run the queue now. Else, run the queue asynchronously and
    1448                 :            :  * with a delay of @msecs.
    1449                 :            :  */
    1450                 :      16372 : static void __blk_mq_delay_run_hw_queue(struct blk_mq_hw_ctx *hctx, bool async,
    1451                 :            :                                         unsigned long msecs)
    1452                 :            : {
    1453         [ +  - ]:      16372 :         if (unlikely(blk_mq_hctx_stopped(hctx)))
    1454                 :            :                 return;
    1455                 :            : 
    1456   [ +  +  +  - ]:      16372 :         if (!async && !(hctx->flags & BLK_MQ_F_BLOCKING)) {
    1457                 :      13125 :                 int cpu = get_cpu();
    1458         [ +  - ]:      13125 :                 if (cpumask_test_cpu(cpu, hctx->cpumask)) {
    1459                 :      13125 :                         __blk_mq_run_hw_queue(hctx);
    1460                 :      13125 :                         put_cpu();
    1461                 :      13125 :                         return;
    1462                 :            :                 }
    1463                 :            : 
    1464                 :          0 :                 put_cpu();
    1465                 :            :         }
    1466                 :            : 
    1467         [ -  + ]:       6494 :         kblockd_mod_delayed_work_on(blk_mq_hctx_next_cpu(hctx), &hctx->run_work,
    1468                 :            :                                     msecs_to_jiffies(msecs));
    1469                 :            : }
    1470                 :            : 
    1471                 :            : /**
    1472                 :            :  * blk_mq_delay_run_hw_queue - Run a hardware queue asynchronously.
    1473                 :            :  * @hctx: Pointer to the hardware queue to run.
    1474                 :            :  * @msecs: Microseconds of delay to wait before running the queue.
    1475                 :            :  *
    1476                 :            :  * Run a hardware queue asynchronously with a delay of @msecs.
    1477                 :            :  */
    1478                 :          2 : void blk_mq_delay_run_hw_queue(struct blk_mq_hw_ctx *hctx, unsigned long msecs)
    1479                 :            : {
    1480                 :          2 :         __blk_mq_delay_run_hw_queue(hctx, true, msecs);
    1481                 :          0 : }
    1482                 :            : EXPORT_SYMBOL(blk_mq_delay_run_hw_queue);
    1483                 :            : 
    1484                 :            : /**
    1485                 :            :  * blk_mq_run_hw_queue - Start to run a hardware queue.
    1486                 :            :  * @hctx: Pointer to the hardware queue to run.
    1487                 :            :  * @async: If we want to run the queue asynchronously.
    1488                 :            :  *
    1489                 :            :  * Check if the request queue is not in a quiesced state and if there are
    1490                 :            :  * pending requests to be sent. If this is true, run the queue to send requests
    1491                 :            :  * to hardware.
    1492                 :            :  */
    1493                 :      33341 : void blk_mq_run_hw_queue(struct blk_mq_hw_ctx *hctx, bool async)
    1494                 :            : {
    1495                 :      33341 :         int srcu_idx;
    1496                 :      33341 :         bool need_run;
    1497                 :            : 
    1498                 :            :         /*
    1499                 :            :          * When queue is quiesced, we may be switching io scheduler, or
    1500                 :            :          * updating nr_hw_queues, or other things, and we can't run queue
    1501                 :            :          * any more, even __blk_mq_hctx_has_pending() can't be called safely.
    1502                 :            :          *
    1503                 :            :          * And queue will be rerun in blk_mq_unquiesce_queue() if it is
    1504                 :            :          * quiesced.
    1505                 :            :          */
    1506         [ +  - ]:      33341 :         hctx_lock(hctx, &srcu_idx);
    1507   [ +  -  +  + ]:      66682 :         need_run = !blk_queue_quiesced(hctx->queue) &&
    1508                 :      33341 :                 blk_mq_hctx_has_pending(hctx);
    1509         [ +  - ]:      33341 :         hctx_unlock(hctx, srcu_idx);
    1510                 :            : 
    1511         [ +  + ]:      33341 :         if (need_run)
    1512                 :      16370 :                 __blk_mq_delay_run_hw_queue(hctx, async, 0);
    1513                 :      33341 : }
    1514                 :            : EXPORT_SYMBOL(blk_mq_run_hw_queue);
    1515                 :            : 
    1516                 :            : /**
    1517                 :            :  * blk_mq_run_hw_queue - Run all hardware queues in a request queue.
    1518                 :            :  * @q: Pointer to the request queue to run.
    1519                 :            :  * @async: If we want to run the queue asynchronously.
    1520                 :            :  */
    1521                 :      15537 : void blk_mq_run_hw_queues(struct request_queue *q, bool async)
    1522                 :            : {
    1523                 :      15537 :         struct blk_mq_hw_ctx *hctx;
    1524                 :      15537 :         int i;
    1525                 :            : 
    1526         [ +  + ]:      31074 :         queue_for_each_hw_ctx(q, hctx, i) {
    1527         [ -  + ]:      15537 :                 if (blk_mq_hctx_stopped(hctx))
    1528                 :          0 :                         continue;
    1529                 :            : 
    1530                 :      15537 :                 blk_mq_run_hw_queue(hctx, async);
    1531                 :            :         }
    1532                 :      15537 : }
    1533                 :            : EXPORT_SYMBOL(blk_mq_run_hw_queues);
    1534                 :            : 
    1535                 :            : /**
    1536                 :            :  * blk_mq_queue_stopped() - check whether one or more hctxs have been stopped
    1537                 :            :  * @q: request queue.
    1538                 :            :  *
    1539                 :            :  * The caller is responsible for serializing this function against
    1540                 :            :  * blk_mq_{start,stop}_hw_queue().
    1541                 :            :  */
    1542                 :          0 : bool blk_mq_queue_stopped(struct request_queue *q)
    1543                 :            : {
    1544                 :          0 :         struct blk_mq_hw_ctx *hctx;
    1545                 :          0 :         int i;
    1546                 :            : 
    1547         [ #  # ]:          0 :         queue_for_each_hw_ctx(q, hctx, i)
    1548         [ #  # ]:          0 :                 if (blk_mq_hctx_stopped(hctx))
    1549                 :            :                         return true;
    1550                 :            : 
    1551                 :            :         return false;
    1552                 :            : }
    1553                 :            : EXPORT_SYMBOL(blk_mq_queue_stopped);
    1554                 :            : 
    1555                 :            : /*
    1556                 :            :  * This function is often used for pausing .queue_rq() by driver when
    1557                 :            :  * there isn't enough resource or some conditions aren't satisfied, and
    1558                 :            :  * BLK_STS_RESOURCE is usually returned.
    1559                 :            :  *
    1560                 :            :  * We do not guarantee that dispatch can be drained or blocked
    1561                 :            :  * after blk_mq_stop_hw_queue() returns. Please use
    1562                 :            :  * blk_mq_quiesce_queue() for that requirement.
    1563                 :            :  */
    1564                 :          0 : void blk_mq_stop_hw_queue(struct blk_mq_hw_ctx *hctx)
    1565                 :            : {
    1566                 :          0 :         cancel_delayed_work(&hctx->run_work);
    1567                 :            : 
    1568                 :          0 :         set_bit(BLK_MQ_S_STOPPED, &hctx->state);
    1569                 :          0 : }
    1570                 :            : EXPORT_SYMBOL(blk_mq_stop_hw_queue);
    1571                 :            : 
    1572                 :            : /*
    1573                 :            :  * This function is often used for pausing .queue_rq() by driver when
    1574                 :            :  * there isn't enough resource or some conditions aren't satisfied, and
    1575                 :            :  * BLK_STS_RESOURCE is usually returned.
    1576                 :            :  *
    1577                 :            :  * We do not guarantee that dispatch can be drained or blocked
    1578                 :            :  * after blk_mq_stop_hw_queues() returns. Please use
    1579                 :            :  * blk_mq_quiesce_queue() for that requirement.
    1580                 :            :  */
    1581                 :          0 : void blk_mq_stop_hw_queues(struct request_queue *q)
    1582                 :            : {
    1583                 :          0 :         struct blk_mq_hw_ctx *hctx;
    1584                 :          0 :         int i;
    1585                 :            : 
    1586         [ #  # ]:          0 :         queue_for_each_hw_ctx(q, hctx, i)
    1587                 :          0 :                 blk_mq_stop_hw_queue(hctx);
    1588                 :          0 : }
    1589                 :            : EXPORT_SYMBOL(blk_mq_stop_hw_queues);
    1590                 :            : 
    1591                 :          0 : void blk_mq_start_hw_queue(struct blk_mq_hw_ctx *hctx)
    1592                 :            : {
    1593                 :          0 :         clear_bit(BLK_MQ_S_STOPPED, &hctx->state);
    1594                 :            : 
    1595                 :          0 :         blk_mq_run_hw_queue(hctx, false);
    1596                 :          0 : }
    1597                 :            : EXPORT_SYMBOL(blk_mq_start_hw_queue);
    1598                 :            : 
    1599                 :          0 : void blk_mq_start_hw_queues(struct request_queue *q)
    1600                 :            : {
    1601                 :          0 :         struct blk_mq_hw_ctx *hctx;
    1602                 :          0 :         int i;
    1603                 :            : 
    1604         [ #  # ]:          0 :         queue_for_each_hw_ctx(q, hctx, i)
    1605                 :          0 :                 blk_mq_start_hw_queue(hctx);
    1606                 :          0 : }
    1607                 :            : EXPORT_SYMBOL(blk_mq_start_hw_queues);
    1608                 :            : 
    1609                 :          0 : void blk_mq_start_stopped_hw_queue(struct blk_mq_hw_ctx *hctx, bool async)
    1610                 :            : {
    1611         [ #  # ]:          0 :         if (!blk_mq_hctx_stopped(hctx))
    1612                 :            :                 return;
    1613                 :            : 
    1614                 :          0 :         clear_bit(BLK_MQ_S_STOPPED, &hctx->state);
    1615                 :          0 :         blk_mq_run_hw_queue(hctx, async);
    1616                 :            : }
    1617                 :            : EXPORT_SYMBOL_GPL(blk_mq_start_stopped_hw_queue);
    1618                 :            : 
    1619                 :          0 : void blk_mq_start_stopped_hw_queues(struct request_queue *q, bool async)
    1620                 :            : {
    1621                 :          0 :         struct blk_mq_hw_ctx *hctx;
    1622                 :          0 :         int i;
    1623                 :            : 
    1624         [ #  # ]:          0 :         queue_for_each_hw_ctx(q, hctx, i)
    1625                 :          0 :                 blk_mq_start_stopped_hw_queue(hctx, async);
    1626                 :          0 : }
    1627                 :            : EXPORT_SYMBOL(blk_mq_start_stopped_hw_queues);
    1628                 :            : 
    1629                 :       3166 : static void blk_mq_run_work_fn(struct work_struct *work)
    1630                 :            : {
    1631                 :       3166 :         struct blk_mq_hw_ctx *hctx;
    1632                 :            : 
    1633                 :       3166 :         hctx = container_of(work, struct blk_mq_hw_ctx, run_work.work);
    1634                 :            : 
    1635                 :            :         /*
    1636                 :            :          * If we are stopped, don't run the queue.
    1637                 :            :          */
    1638         [ +  - ]:       3166 :         if (test_bit(BLK_MQ_S_STOPPED, &hctx->state))
    1639                 :            :                 return;
    1640                 :            : 
    1641                 :       3166 :         __blk_mq_run_hw_queue(hctx);
    1642                 :            : }
    1643                 :            : 
    1644                 :          0 : static inline void __blk_mq_insert_req_list(struct blk_mq_hw_ctx *hctx,
    1645                 :            :                                             struct request *rq,
    1646                 :            :                                             bool at_head)
    1647                 :            : {
    1648                 :          0 :         struct blk_mq_ctx *ctx = rq->mq_ctx;
    1649                 :          0 :         enum hctx_type type = hctx->type;
    1650                 :            : 
    1651                 :          0 :         lockdep_assert_held(&ctx->lock);
    1652                 :            : 
    1653                 :          0 :         trace_block_rq_insert(hctx->queue, rq);
    1654                 :            : 
    1655         [ #  # ]:          0 :         if (at_head)
    1656                 :          0 :                 list_add(&rq->queuelist, &ctx->rq_lists[type]);
    1657                 :            :         else
    1658                 :          0 :                 list_add_tail(&rq->queuelist, &ctx->rq_lists[type]);
    1659                 :          0 : }
    1660                 :            : 
    1661                 :          0 : void __blk_mq_insert_request(struct blk_mq_hw_ctx *hctx, struct request *rq,
    1662                 :            :                              bool at_head)
    1663                 :            : {
    1664                 :          0 :         struct blk_mq_ctx *ctx = rq->mq_ctx;
    1665                 :            : 
    1666                 :          0 :         lockdep_assert_held(&ctx->lock);
    1667                 :            : 
    1668                 :          0 :         __blk_mq_insert_req_list(hctx, rq, at_head);
    1669                 :          0 :         blk_mq_hctx_mark_pending(hctx, ctx);
    1670                 :          0 : }
    1671                 :            : 
    1672                 :            : /**
    1673                 :            :  * blk_mq_request_bypass_insert - Insert a request at dispatch list.
    1674                 :            :  * @rq: Pointer to request to be inserted.
    1675                 :            :  * @run_queue: If we should run the hardware queue after inserting the request.
    1676                 :            :  *
    1677                 :            :  * Should only be used carefully, when the caller knows we want to
    1678                 :            :  * bypass a potential IO scheduler on the target device.
    1679                 :            :  */
    1680                 :       2086 : void blk_mq_request_bypass_insert(struct request *rq, bool at_head,
    1681                 :            :                                   bool run_queue)
    1682                 :            : {
    1683                 :       2086 :         struct blk_mq_hw_ctx *hctx = rq->mq_hctx;
    1684                 :            : 
    1685                 :       2086 :         spin_lock(&hctx->lock);
    1686         [ +  + ]:       2086 :         if (at_head)
    1687                 :       1969 :                 list_add(&rq->queuelist, &hctx->dispatch);
    1688                 :            :         else
    1689                 :        117 :                 list_add_tail(&rq->queuelist, &hctx->dispatch);
    1690                 :       2086 :         spin_unlock(&hctx->lock);
    1691                 :            : 
    1692         [ -  + ]:       2086 :         if (run_queue)
    1693                 :          0 :                 blk_mq_run_hw_queue(hctx, false);
    1694                 :       2086 : }
    1695                 :            : 
    1696                 :          0 : void blk_mq_insert_requests(struct blk_mq_hw_ctx *hctx, struct blk_mq_ctx *ctx,
    1697                 :            :                             struct list_head *list)
    1698                 :            : 
    1699                 :            : {
    1700                 :          0 :         struct request *rq;
    1701                 :          0 :         enum hctx_type type = hctx->type;
    1702                 :            : 
    1703                 :            :         /*
    1704                 :            :          * preemption doesn't flush plug list, so it's possible ctx->cpu is
    1705                 :            :          * offline now
    1706                 :            :          */
    1707         [ #  # ]:          0 :         list_for_each_entry(rq, list, queuelist) {
    1708         [ #  # ]:          0 :                 BUG_ON(rq->mq_ctx != ctx);
    1709                 :          0 :                 trace_block_rq_insert(hctx->queue, rq);
    1710                 :            :         }
    1711                 :            : 
    1712                 :          0 :         spin_lock(&ctx->lock);
    1713         [ #  # ]:          0 :         list_splice_tail_init(list, &ctx->rq_lists[type]);
    1714                 :          0 :         blk_mq_hctx_mark_pending(hctx, ctx);
    1715                 :          0 :         spin_unlock(&ctx->lock);
    1716                 :          0 : }
    1717                 :            : 
    1718                 :          0 : static int plug_rq_cmp(void *priv, struct list_head *a, struct list_head *b)
    1719                 :            : {
    1720                 :          0 :         struct request *rqa = container_of(a, struct request, queuelist);
    1721                 :          0 :         struct request *rqb = container_of(b, struct request, queuelist);
    1722                 :            : 
    1723         [ #  # ]:          0 :         if (rqa->mq_ctx != rqb->mq_ctx)
    1724                 :          0 :                 return rqa->mq_ctx > rqb->mq_ctx;
    1725         [ #  # ]:          0 :         if (rqa->mq_hctx != rqb->mq_hctx)
    1726                 :          0 :                 return rqa->mq_hctx > rqb->mq_hctx;
    1727                 :            : 
    1728                 :          0 :         return blk_rq_pos(rqa) > blk_rq_pos(rqb);
    1729                 :            : }
    1730                 :            : 
    1731                 :      10939 : void blk_mq_flush_plug_list(struct blk_plug *plug, bool from_schedule)
    1732                 :            : {
    1733                 :      10939 :         LIST_HEAD(list);
    1734                 :            : 
    1735         [ -  + ]:      10939 :         if (list_empty(&plug->mq_list))
    1736                 :          0 :                 return;
    1737         [ +  - ]:      10939 :         list_splice_init(&plug->mq_list, &list);
    1738                 :            : 
    1739   [ -  +  -  - ]:      10939 :         if (plug->rq_count > 2 && plug->multiple_queues)
    1740                 :          0 :                 list_sort(NULL, &list, plug_rq_cmp);
    1741                 :            : 
    1742                 :      10939 :         plug->rq_count = 0;
    1743                 :            : 
    1744                 :      10939 :         do {
    1745                 :      10939 :                 struct list_head rq_list;
    1746                 :      10939 :                 struct request *rq, *head_rq = list_entry_rq(list.next);
    1747                 :      10939 :                 struct list_head *pos = &head_rq->queuelist; /* skip first */
    1748                 :      10939 :                 struct blk_mq_hw_ctx *this_hctx = head_rq->mq_hctx;
    1749                 :      10939 :                 struct blk_mq_ctx *this_ctx = head_rq->mq_ctx;
    1750                 :      10939 :                 unsigned int depth = 1;
    1751                 :            : 
    1752         [ +  + ]:      11169 :                 list_for_each_continue(pos, &list) {
    1753                 :        230 :                         rq = list_entry_rq(pos);
    1754         [ -  + ]:        230 :                         BUG_ON(!rq->q);
    1755   [ +  -  +  - ]:        230 :                         if (rq->mq_hctx != this_hctx || rq->mq_ctx != this_ctx)
    1756                 :            :                                 break;
    1757                 :        230 :                         depth++;
    1758                 :            :                 }
    1759                 :            : 
    1760         [ -  + ]:      10939 :                 list_cut_before(&rq_list, &list, pos);
    1761                 :      10939 :                 trace_block_unplug(head_rq->q, depth, !from_schedule);
    1762                 :      10939 :                 blk_mq_sched_insert_requests(this_hctx, this_ctx, &rq_list,
    1763                 :            :                                                 from_schedule);
    1764         [ -  + ]:      10939 :         } while(!list_empty(&list));
    1765                 :            : }
    1766                 :            : 
    1767                 :      12965 : static void blk_mq_bio_to_request(struct request *rq, struct bio *bio,
    1768                 :            :                 unsigned int nr_segs)
    1769                 :            : {
    1770         [ +  + ]:      12965 :         if (bio->bi_opf & REQ_RAHEAD)
    1771                 :      10972 :                 rq->cmd_flags |= REQ_FAILFAST_MASK;
    1772                 :            : 
    1773                 :      12965 :         rq->__sector = bio->bi_iter.bi_sector;
    1774                 :      12965 :         rq->write_hint = bio->bi_write_hint;
    1775         [ +  - ]:      12965 :         blk_rq_bio_prep(rq, bio, nr_segs);
    1776                 :            : 
    1777                 :      12965 :         blk_account_io_start(rq, true);
    1778                 :      12965 : }
    1779                 :            : 
    1780                 :          0 : static blk_status_t __blk_mq_issue_directly(struct blk_mq_hw_ctx *hctx,
    1781                 :            :                                             struct request *rq,
    1782                 :            :                                             blk_qc_t *cookie, bool last)
    1783                 :            : {
    1784                 :          0 :         struct request_queue *q = rq->q;
    1785                 :          0 :         struct blk_mq_queue_data bd = {
    1786                 :            :                 .rq = rq,
    1787                 :            :                 .last = last,
    1788                 :            :         };
    1789                 :          0 :         blk_qc_t new_cookie;
    1790                 :          0 :         blk_status_t ret;
    1791                 :            : 
    1792         [ #  # ]:          0 :         new_cookie = request_to_qc_t(hctx, rq);
    1793                 :            : 
    1794                 :            :         /*
    1795                 :            :          * For OK queue, we are done. For error, caller may kill it.
    1796                 :            :          * Any other error (busy), just add it to our list as we
    1797                 :            :          * previously would have done.
    1798                 :            :          */
    1799                 :          0 :         ret = q->mq_ops->queue_rq(hctx, &bd);
    1800      [ #  #  # ]:          0 :         switch (ret) {
    1801                 :            :         case BLK_STS_OK:
    1802         [ #  # ]:          0 :                 blk_mq_update_dispatch_busy(hctx, false);
    1803                 :          0 :                 *cookie = new_cookie;
    1804                 :          0 :                 break;
    1805                 :            :         case BLK_STS_RESOURCE:
    1806                 :            :         case BLK_STS_DEV_RESOURCE:
    1807         [ #  # ]:          0 :                 blk_mq_update_dispatch_busy(hctx, true);
    1808                 :          0 :                 __blk_mq_requeue_request(rq);
    1809                 :          0 :                 break;
    1810                 :            :         default:
    1811         [ #  # ]:          0 :                 blk_mq_update_dispatch_busy(hctx, false);
    1812                 :          0 :                 *cookie = BLK_QC_T_NONE;
    1813                 :          0 :                 break;
    1814                 :            :         }
    1815                 :            : 
    1816                 :          0 :         return ret;
    1817                 :            : }
    1818                 :            : 
    1819                 :          0 : static blk_status_t __blk_mq_try_issue_directly(struct blk_mq_hw_ctx *hctx,
    1820                 :            :                                                 struct request *rq,
    1821                 :            :                                                 blk_qc_t *cookie,
    1822                 :            :                                                 bool bypass_insert, bool last)
    1823                 :            : {
    1824                 :          0 :         struct request_queue *q = rq->q;
    1825                 :          0 :         bool run_queue = true;
    1826                 :            : 
    1827                 :            :         /*
    1828                 :            :          * RCU or SRCU read lock is needed before checking quiesced flag.
    1829                 :            :          *
    1830                 :            :          * When queue is stopped or quiesced, ignore 'bypass_insert' from
    1831                 :            :          * blk_mq_request_issue_directly(), and return BLK_STS_OK to caller,
    1832                 :            :          * and avoid driver to try to dispatch again.
    1833                 :            :          */
    1834   [ #  #  #  # ]:          0 :         if (blk_mq_hctx_stopped(hctx) || blk_queue_quiesced(q)) {
    1835                 :          0 :                 run_queue = false;
    1836                 :          0 :                 bypass_insert = false;
    1837                 :          0 :                 goto insert;
    1838                 :            :         }
    1839                 :            : 
    1840   [ #  #  #  # ]:          0 :         if (q->elevator && !bypass_insert)
    1841                 :          0 :                 goto insert;
    1842                 :            : 
    1843   [ #  #  #  # ]:          0 :         if (!blk_mq_get_dispatch_budget(hctx))
    1844                 :          0 :                 goto insert;
    1845                 :            : 
    1846         [ #  # ]:          0 :         if (!blk_mq_get_driver_tag(rq)) {
    1847         [ #  # ]:          0 :                 blk_mq_put_dispatch_budget(hctx);
    1848                 :          0 :                 goto insert;
    1849                 :            :         }
    1850                 :            : 
    1851                 :          0 :         return __blk_mq_issue_directly(hctx, rq, cookie, last);
    1852                 :          0 : insert:
    1853         [ #  # ]:          0 :         if (bypass_insert)
    1854                 :            :                 return BLK_STS_RESOURCE;
    1855                 :            : 
    1856                 :          0 :         blk_mq_request_bypass_insert(rq, false, run_queue);
    1857                 :          0 :         return BLK_STS_OK;
    1858                 :            : }
    1859                 :            : 
    1860                 :            : /**
    1861                 :            :  * blk_mq_try_issue_directly - Try to send a request directly to device driver.
    1862                 :            :  * @hctx: Pointer of the associated hardware queue.
    1863                 :            :  * @rq: Pointer to request to be sent.
    1864                 :            :  * @cookie: Request queue cookie.
    1865                 :            :  *
    1866                 :            :  * If the device has enough resources to accept a new request now, send the
    1867                 :            :  * request directly to device driver. Else, insert at hctx->dispatch queue, so
    1868                 :            :  * we can try send it another time in the future. Requests inserted at this
    1869                 :            :  * queue have higher priority.
    1870                 :            :  */
    1871                 :          0 : static void blk_mq_try_issue_directly(struct blk_mq_hw_ctx *hctx,
    1872                 :            :                 struct request *rq, blk_qc_t *cookie)
    1873                 :            : {
    1874                 :          0 :         blk_status_t ret;
    1875                 :          0 :         int srcu_idx;
    1876                 :            : 
    1877         [ #  # ]:          0 :         might_sleep_if(hctx->flags & BLK_MQ_F_BLOCKING);
    1878                 :            : 
    1879         [ #  # ]:          0 :         hctx_lock(hctx, &srcu_idx);
    1880                 :            : 
    1881                 :          0 :         ret = __blk_mq_try_issue_directly(hctx, rq, cookie, false, true);
    1882         [ #  # ]:          0 :         if (ret == BLK_STS_RESOURCE || ret == BLK_STS_DEV_RESOURCE)
    1883                 :          0 :                 blk_mq_request_bypass_insert(rq, false, true);
    1884         [ #  # ]:          0 :         else if (ret != BLK_STS_OK)
    1885                 :          0 :                 blk_mq_end_request(rq, ret);
    1886                 :            : 
    1887         [ #  # ]:          0 :         hctx_unlock(hctx, srcu_idx);
    1888                 :          0 : }
    1889                 :            : 
    1890                 :          0 : blk_status_t blk_mq_request_issue_directly(struct request *rq, bool last)
    1891                 :            : {
    1892                 :          0 :         blk_status_t ret;
    1893                 :          0 :         int srcu_idx;
    1894                 :          0 :         blk_qc_t unused_cookie;
    1895                 :          0 :         struct blk_mq_hw_ctx *hctx = rq->mq_hctx;
    1896                 :            : 
    1897         [ #  # ]:          0 :         hctx_lock(hctx, &srcu_idx);
    1898                 :          0 :         ret = __blk_mq_try_issue_directly(hctx, rq, &unused_cookie, true, last);
    1899         [ #  # ]:          0 :         hctx_unlock(hctx, srcu_idx);
    1900                 :            : 
    1901                 :          0 :         return ret;
    1902                 :            : }
    1903                 :            : 
    1904                 :          0 : void blk_mq_try_issue_list_directly(struct blk_mq_hw_ctx *hctx,
    1905                 :            :                 struct list_head *list)
    1906                 :            : {
    1907         [ #  # ]:          0 :         while (!list_empty(list)) {
    1908                 :          0 :                 blk_status_t ret;
    1909                 :          0 :                 struct request *rq = list_first_entry(list, struct request,
    1910                 :            :                                 queuelist);
    1911                 :            : 
    1912                 :          0 :                 list_del_init(&rq->queuelist);
    1913                 :          0 :                 ret = blk_mq_request_issue_directly(rq, list_empty(list));
    1914         [ #  # ]:          0 :                 if (ret != BLK_STS_OK) {
    1915                 :          0 :                         if (ret == BLK_STS_RESOURCE ||
    1916         [ #  # ]:          0 :                                         ret == BLK_STS_DEV_RESOURCE) {
    1917                 :          0 :                                 blk_mq_request_bypass_insert(rq, false,
    1918                 :            :                                                         list_empty(list));
    1919                 :          0 :                                 break;
    1920                 :            :                         }
    1921                 :          0 :                         blk_mq_end_request(rq, ret);
    1922                 :            :                 }
    1923                 :            :         }
    1924                 :            : 
    1925                 :            :         /*
    1926                 :            :          * If we didn't flush the entire list, we could have told
    1927                 :            :          * the driver there was more coming, but that turned out to
    1928                 :            :          * be a lie.
    1929                 :            :          */
    1930   [ #  #  #  # ]:          0 :         if (!list_empty(list) && hctx->queue->mq_ops->commit_rqs)
    1931                 :          0 :                 hctx->queue->mq_ops->commit_rqs(hctx);
    1932                 :          0 : }
    1933                 :            : 
    1934                 :      11169 : static void blk_add_rq_to_plug(struct blk_plug *plug, struct request *rq)
    1935                 :            : {
    1936         [ +  - ]:      11169 :         list_add_tail(&rq->queuelist, &plug->mq_list);
    1937                 :      11169 :         plug->rq_count++;
    1938         [ +  - ]:      11169 :         if (!plug->multiple_queues && !list_is_singular(&plug->mq_list)) {
    1939                 :        230 :                 struct request *tmp;
    1940                 :            : 
    1941                 :        230 :                 tmp = list_first_entry(&plug->mq_list, struct request,
    1942                 :            :                                                 queuelist);
    1943         [ -  + ]:        230 :                 if (tmp->q != rq->q)
    1944                 :          0 :                         plug->multiple_queues = true;
    1945                 :            :         }
    1946                 :      11169 : }
    1947                 :            : 
    1948                 :            : /**
    1949                 :            :  * blk_mq_make_request - Create and send a request to block device.
    1950                 :            :  * @q: Request queue pointer.
    1951                 :            :  * @bio: Bio pointer.
    1952                 :            :  *
    1953                 :            :  * Builds up a request structure from @q and @bio and send to the device. The
    1954                 :            :  * request may not be queued directly to hardware if:
    1955                 :            :  * * This request can be merged with another one
    1956                 :            :  * * We want to place request at plug queue for possible future merging
    1957                 :            :  * * There is an IO scheduler active at this queue
    1958                 :            :  *
    1959                 :            :  * It will not queue the request if there is an error with the bio, or at the
    1960                 :            :  * request creation.
    1961                 :            :  *
    1962                 :            :  * Returns: Request queue cookie.
    1963                 :            :  */
    1964                 :      20043 : static blk_qc_t blk_mq_make_request(struct request_queue *q, struct bio *bio)
    1965                 :            : {
    1966         [ +  + ]:      20043 :         const int is_sync = op_is_sync(bio->bi_opf);
    1967                 :      20043 :         const int is_flush_fua = op_is_flush(bio->bi_opf);
    1968                 :      20043 :         struct blk_mq_alloc_data data = { .flags = 0};
    1969                 :      20043 :         struct request *rq;
    1970                 :      20043 :         struct blk_plug *plug;
    1971                 :      20043 :         struct request *same_queue_rq = NULL;
    1972                 :      20043 :         unsigned int nr_segs;
    1973                 :      20043 :         blk_qc_t cookie;
    1974                 :            : 
    1975                 :      20043 :         blk_queue_bounce(q, &bio);
    1976                 :      20043 :         __blk_queue_split(q, &bio, &nr_segs);
    1977                 :            : 
    1978         [ +  + ]:      20043 :         if (!bio_integrity_prep(bio))
    1979                 :            :                 return BLK_QC_T_NONE;
    1980                 :            : 
    1981   [ +  +  +  -  :      39967 :         if (!is_flush_fua && !blk_queue_nomerges(q) &&
                   +  + ]
    1982                 :      19924 :             blk_attempt_plug_merge(q, bio, nr_segs, &same_queue_rq))
    1983                 :            :                 return BLK_QC_T_NONE;
    1984                 :            : 
    1985         [ +  - ]:      12965 :         if (blk_mq_sched_bio_merge(q, bio, nr_segs))
    1986                 :            :                 return BLK_QC_T_NONE;
    1987                 :            : 
    1988         [ -  + ]:      12965 :         rq_qos_throttle(q, bio);
    1989                 :            : 
    1990                 :      12965 :         data.cmd_flags = bio->bi_opf;
    1991                 :      12965 :         rq = blk_mq_get_request(q, bio, &data);
    1992         [ -  + ]:      12965 :         if (unlikely(!rq)) {
    1993         [ #  # ]:          0 :                 rq_qos_cleanup(q, bio);
    1994         [ #  # ]:          0 :                 if (bio->bi_opf & REQ_NOWAIT)
    1995                 :          0 :                         bio_wouldblock_error(bio);
    1996                 :          0 :                 return BLK_QC_T_NONE;
    1997                 :            :         }
    1998                 :            : 
    1999                 :      12965 :         trace_block_getrq(q, bio, bio->bi_opf);
    2000                 :            : 
    2001         [ -  + ]:      12965 :         rq_qos_track(q, rq, bio);
    2002                 :            : 
    2003         [ -  + ]:      12965 :         cookie = request_to_qc_t(data.hctx, rq);
    2004                 :            : 
    2005                 :      12965 :         blk_mq_bio_to_request(rq, bio, nr_segs);
    2006                 :            : 
    2007         [ -  + ]:      12965 :         plug = blk_mq_plug(q, bio);
    2008         [ +  + ]:      12965 :         if (unlikely(is_flush_fua)) {
    2009                 :            :                 /* Bypass scheduler for flush requests */
    2010                 :        119 :                 blk_insert_flush(rq);
    2011                 :        119 :                 blk_mq_run_hw_queue(data.hctx, true);
    2012   [ +  +  -  +  :      12846 :         } else if (plug && (q->nr_hw_queues == 1 || q->mq_ops->commit_rqs ||
             -  -  -  - ]
    2013                 :      11169 :                                 !blk_queue_nonrot(q))) {
    2014                 :            :                 /*
    2015                 :            :                  * Use plugging if we have a ->commit_rqs() hook as well, as
    2016                 :            :                  * we know the driver uses bd->last in a smart fashion.
    2017                 :            :                  *
    2018                 :            :                  * Use normal plugging if this disk is slow HDD, as sequential
    2019                 :            :                  * IO may benefit a lot from plug merging.
    2020                 :            :                  */
    2021                 :      11169 :                 unsigned int request_count = plug->rq_count;
    2022                 :      11169 :                 struct request *last = NULL;
    2023                 :            : 
    2024         [ +  + ]:      11169 :                 if (!request_count)
    2025                 :      10917 :                         trace_block_plug(q);
    2026                 :            :                 else
    2027                 :        252 :                         last = list_entry_rq(plug->mq_list.prev);
    2028                 :            : 
    2029   [ +  -  +  +  :      11169 :                 if (request_count >= BLK_MAX_REQUEST_COUNT || (last &&
                   +  + ]
    2030         [ +  + ]:        252 :                     blk_rq_bytes(last) >= BLK_PLUG_FLUSH_SIZE)) {
    2031                 :         22 :                         blk_flush_plug_list(plug, false);
    2032                 :         22 :                         trace_block_plug(q);
    2033                 :            :                 }
    2034                 :            : 
    2035                 :      11169 :                 blk_add_rq_to_plug(plug, rq);
    2036         [ +  - ]:       1677 :         } else if (q->elevator) {
    2037                 :            :                 /* Insert the request at the IO scheduler queue */
    2038                 :       1677 :                 blk_mq_sched_insert_request(rq, false, true, true);
    2039   [ #  #  #  # ]:          0 :         } else if (plug && !blk_queue_nomerges(q)) {
    2040                 :            :                 /*
    2041                 :            :                  * We do limited plugging. If the bio can be merged, do that.
    2042                 :            :                  * Otherwise the existing request in the plug list will be
    2043                 :            :                  * issued. So the plug list will have one request at most
    2044                 :            :                  * The plug list might get flushed before this. If that happens,
    2045                 :            :                  * the plug list is empty, and same_queue_rq is invalid.
    2046                 :            :                  */
    2047         [ #  # ]:          0 :                 if (list_empty(&plug->mq_list))
    2048                 :          0 :                         same_queue_rq = NULL;
    2049         [ #  # ]:          0 :                 if (same_queue_rq) {
    2050                 :          0 :                         list_del_init(&same_queue_rq->queuelist);
    2051                 :          0 :                         plug->rq_count--;
    2052                 :            :                 }
    2053                 :          0 :                 blk_add_rq_to_plug(plug, rq);
    2054                 :          0 :                 trace_block_plug(q);
    2055                 :            : 
    2056         [ #  # ]:          0 :                 if (same_queue_rq) {
    2057                 :          0 :                         data.hctx = same_queue_rq->mq_hctx;
    2058                 :          0 :                         trace_block_unplug(q, 1, true);
    2059                 :          0 :                         blk_mq_try_issue_directly(data.hctx, same_queue_rq,
    2060                 :            :                                         &cookie);
    2061                 :            :                 }
    2062   [ #  #  #  # ]:          0 :         } else if ((q->nr_hw_queues > 1 && is_sync) ||
    2063         [ #  # ]:          0 :                         !data.hctx->dispatch_busy) {
    2064                 :            :                 /*
    2065                 :            :                  * There is no scheduler and we can try to send directly
    2066                 :            :                  * to the hardware.
    2067                 :            :                  */
    2068                 :          0 :                 blk_mq_try_issue_directly(data.hctx, rq, &cookie);
    2069                 :            :         } else {
    2070                 :            :                 /* Default case. */
    2071                 :          0 :                 blk_mq_sched_insert_request(rq, false, true, true);
    2072                 :            :         }
    2073                 :            : 
    2074                 :      12965 :         return cookie;
    2075                 :            : }
    2076                 :            : 
    2077                 :          0 : void blk_mq_free_rqs(struct blk_mq_tag_set *set, struct blk_mq_tags *tags,
    2078                 :            :                      unsigned int hctx_idx)
    2079                 :            : {
    2080                 :          0 :         struct page *page;
    2081                 :            : 
    2082   [ #  #  #  # ]:          0 :         if (tags->rqs && set->ops->exit_request) {
    2083                 :            :                 int i;
    2084                 :            : 
    2085         [ #  # ]:          0 :                 for (i = 0; i < tags->nr_tags; i++) {
    2086                 :          0 :                         struct request *rq = tags->static_rqs[i];
    2087                 :            : 
    2088         [ #  # ]:          0 :                         if (!rq)
    2089                 :          0 :                                 continue;
    2090                 :          0 :                         set->ops->exit_request(set, rq, hctx_idx);
    2091                 :          0 :                         tags->static_rqs[i] = NULL;
    2092                 :            :                 }
    2093                 :            :         }
    2094                 :            : 
    2095         [ #  # ]:          0 :         while (!list_empty(&tags->page_list)) {
    2096                 :          0 :                 page = list_first_entry(&tags->page_list, struct page, lru);
    2097                 :          0 :                 list_del_init(&page->lru);
    2098                 :            :                 /*
    2099                 :            :                  * Remove kmemleak object previously allocated in
    2100                 :            :                  * blk_mq_alloc_rqs().
    2101                 :            :                  */
    2102                 :          0 :                 kmemleak_free(page_address(page));
    2103                 :          0 :                 __free_pages(page, page->private);
    2104                 :            :         }
    2105                 :          0 : }
    2106                 :            : 
    2107                 :          0 : void blk_mq_free_rq_map(struct blk_mq_tags *tags)
    2108                 :            : {
    2109                 :          0 :         kfree(tags->rqs);
    2110                 :          0 :         tags->rqs = NULL;
    2111                 :          0 :         kfree(tags->static_rqs);
    2112                 :          0 :         tags->static_rqs = NULL;
    2113                 :            : 
    2114                 :          0 :         blk_mq_free_tags(tags);
    2115                 :          0 : }
    2116                 :            : 
    2117                 :        273 : struct blk_mq_tags *blk_mq_alloc_rq_map(struct blk_mq_tag_set *set,
    2118                 :            :                                         unsigned int hctx_idx,
    2119                 :            :                                         unsigned int nr_tags,
    2120                 :            :                                         unsigned int reserved_tags)
    2121                 :            : {
    2122                 :        273 :         struct blk_mq_tags *tags;
    2123                 :        273 :         int node;
    2124                 :            : 
    2125                 :        273 :         node = blk_mq_hw_queue_to_node(&set->map[HCTX_TYPE_DEFAULT], hctx_idx);
    2126         [ -  + ]:        273 :         if (node == NUMA_NO_NODE)
    2127                 :          0 :                 node = set->numa_node;
    2128                 :            : 
    2129                 :        273 :         tags = blk_mq_init_tags(nr_tags, reserved_tags, node,
    2130                 :        273 :                                 BLK_MQ_FLAG_TO_ALLOC_POLICY(set->flags));
    2131         [ +  - ]:        273 :         if (!tags)
    2132                 :            :                 return NULL;
    2133                 :            : 
    2134                 :        273 :         tags->rqs = kcalloc_node(nr_tags, sizeof(struct request *),
    2135                 :            :                                  GFP_NOIO | __GFP_NOWARN | __GFP_NORETRY,
    2136                 :            :                                  node);
    2137         [ -  + ]:        273 :         if (!tags->rqs) {
    2138                 :          0 :                 blk_mq_free_tags(tags);
    2139                 :          0 :                 return NULL;
    2140                 :            :         }
    2141                 :            : 
    2142                 :        273 :         tags->static_rqs = kcalloc_node(nr_tags, sizeof(struct request *),
    2143                 :            :                                         GFP_NOIO | __GFP_NOWARN | __GFP_NORETRY,
    2144                 :            :                                         node);
    2145         [ -  + ]:        273 :         if (!tags->static_rqs) {
    2146                 :          0 :                 kfree(tags->rqs);
    2147                 :          0 :                 blk_mq_free_tags(tags);
    2148                 :          0 :                 return NULL;
    2149                 :            :         }
    2150                 :            : 
    2151                 :            :         return tags;
    2152                 :            : }
    2153                 :            : 
    2154                 :        949 : static size_t order_to_size(unsigned int order)
    2155                 :            : {
    2156                 :        949 :         return (size_t)PAGE_SIZE << order;
    2157                 :            : }
    2158                 :            : 
    2159                 :      40040 : static int blk_mq_init_request(struct blk_mq_tag_set *set, struct request *rq,
    2160                 :            :                                unsigned int hctx_idx, int node)
    2161                 :            : {
    2162                 :      40040 :         int ret;
    2163                 :            : 
    2164                 :      40040 :         if (set->ops->init_request) {
    2165                 :      40040 :                 ret = set->ops->init_request(set, rq, hctx_idx, node);
    2166         [ +  - ]:      40040 :                 if (ret)
    2167                 :            :                         return ret;
    2168                 :            :         }
    2169                 :            : 
    2170                 :      40040 :         WRITE_ONCE(rq->state, MQ_RQ_IDLE);
    2171                 :      40040 :         return 0;
    2172                 :            : }
    2173                 :            : 
    2174                 :        273 : int blk_mq_alloc_rqs(struct blk_mq_tag_set *set, struct blk_mq_tags *tags,
    2175                 :            :                      unsigned int hctx_idx, unsigned int depth)
    2176                 :            : {
    2177                 :        273 :         unsigned int i, j, entries_per_page, max_order = 4;
    2178                 :        273 :         size_t rq_size, left;
    2179                 :        273 :         int node;
    2180                 :            : 
    2181                 :        273 :         node = blk_mq_hw_queue_to_node(&set->map[HCTX_TYPE_DEFAULT], hctx_idx);
    2182         [ -  + ]:        273 :         if (node == NUMA_NO_NODE)
    2183                 :          0 :                 node = set->numa_node;
    2184                 :            : 
    2185                 :        273 :         INIT_LIST_HEAD(&tags->page_list);
    2186                 :            : 
    2187                 :            :         /*
    2188                 :            :          * rq_size is the size of the request plus driver payload, rounded
    2189                 :            :          * to the cacheline size
    2190                 :            :          */
    2191                 :        273 :         rq_size = round_up(sizeof(struct request) + set->cmd_size,
    2192                 :            :                                 cache_line_size());
    2193                 :        273 :         left = rq_size * depth;
    2194                 :            : 
    2195         [ +  + ]:        650 :         for (i = 0; i < depth; ) {
    2196                 :            :                 int this_order = max_order;
    2197                 :            :                 struct page *page;
    2198                 :            :                 int to_do;
    2199                 :            :                 void *p;
    2200                 :            : 
    2201   [ +  +  +  + ]:        637 :                 while (this_order && left < order_to_size(this_order - 1))
    2202                 :            :                         this_order--;
    2203                 :            : 
    2204                 :        377 :                 do {
    2205         [ -  + ]:        377 :                         page = alloc_pages_node(node,
    2206                 :            :                                 GFP_NOIO | __GFP_NOWARN | __GFP_NORETRY | __GFP_ZERO,
    2207                 :            :                                 this_order);
    2208         [ -  + ]:        377 :                         if (page)
    2209                 :            :                                 break;
    2210         [ #  # ]:          0 :                         if (!this_order--)
    2211                 :            :                                 break;
    2212         [ #  # ]:          0 :                         if (order_to_size(this_order) < rq_size)
    2213                 :            :                                 break;
    2214                 :            :                 } while (1);
    2215                 :            : 
    2216         [ -  + ]:        377 :                 if (!page)
    2217                 :          0 :                         goto fail;
    2218                 :            : 
    2219                 :        377 :                 page->private = this_order;
    2220                 :        377 :                 list_add_tail(&page->lru, &tags->page_list);
    2221                 :            : 
    2222                 :        377 :                 p = page_address(page);
    2223                 :            :                 /*
    2224                 :            :                  * Allow kmemleak to scan these pages as they contain pointers
    2225                 :            :                  * to additional allocations like via ops->init_request().
    2226                 :            :                  */
    2227                 :        377 :                 kmemleak_alloc(p, order_to_size(this_order), 1, GFP_NOIO);
    2228                 :        377 :                 entries_per_page = order_to_size(this_order) / rq_size;
    2229                 :        377 :                 to_do = min(entries_per_page, depth - i);
    2230                 :        377 :                 left -= to_do * rq_size;
    2231         [ +  + ]:      40417 :                 for (j = 0; j < to_do; j++) {
    2232                 :      40040 :                         struct request *rq = p;
    2233                 :            : 
    2234                 :      40040 :                         tags->static_rqs[i] = rq;
    2235         [ +  - ]:      40040 :                         if (blk_mq_init_request(set, rq, hctx_idx, node)) {
    2236                 :          0 :                                 tags->static_rqs[i] = NULL;
    2237                 :          0 :                                 goto fail;
    2238                 :            :                         }
    2239                 :            : 
    2240                 :      40040 :                         p += rq_size;
    2241                 :      40040 :                         i++;
    2242                 :            :                 }
    2243                 :            :         }
    2244                 :            :         return 0;
    2245                 :            : 
    2246                 :          0 : fail:
    2247                 :          0 :         blk_mq_free_rqs(set, tags, hctx_idx);
    2248                 :          0 :         return -ENOMEM;
    2249                 :            : }
    2250                 :            : 
    2251                 :            : /*
    2252                 :            :  * 'cpu' is going away. splice any existing rq_list entries from this
    2253                 :            :  * software queue to the hw queue dispatch list, and ensure that it
    2254                 :            :  * gets run.
    2255                 :            :  */
    2256                 :          0 : static int blk_mq_hctx_notify_dead(unsigned int cpu, struct hlist_node *node)
    2257                 :            : {
    2258                 :          0 :         struct blk_mq_hw_ctx *hctx;
    2259                 :          0 :         struct blk_mq_ctx *ctx;
    2260                 :          0 :         LIST_HEAD(tmp);
    2261                 :          0 :         enum hctx_type type;
    2262                 :            : 
    2263         [ #  # ]:          0 :         hctx = hlist_entry_safe(node, struct blk_mq_hw_ctx, cpuhp_dead);
    2264                 :          0 :         ctx = __blk_mq_get_ctx(hctx->queue, cpu);
    2265                 :          0 :         type = hctx->type;
    2266                 :            : 
    2267                 :          0 :         spin_lock(&ctx->lock);
    2268         [ #  # ]:          0 :         if (!list_empty(&ctx->rq_lists[type])) {
    2269         [ #  # ]:          0 :                 list_splice_init(&ctx->rq_lists[type], &tmp);
    2270                 :          0 :                 blk_mq_hctx_clear_pending(hctx, ctx);
    2271                 :            :         }
    2272                 :          0 :         spin_unlock(&ctx->lock);
    2273                 :            : 
    2274         [ #  # ]:          0 :         if (list_empty(&tmp))
    2275                 :            :                 return 0;
    2276                 :            : 
    2277                 :          0 :         spin_lock(&hctx->lock);
    2278         [ #  # ]:          0 :         list_splice_tail_init(&tmp, &hctx->dispatch);
    2279                 :          0 :         spin_unlock(&hctx->lock);
    2280                 :            : 
    2281                 :          0 :         blk_mq_run_hw_queue(hctx, true);
    2282                 :          0 :         return 0;
    2283                 :            : }
    2284                 :            : 
    2285                 :          0 : static void blk_mq_remove_cpuhp(struct blk_mq_hw_ctx *hctx)
    2286                 :            : {
    2287                 :          0 :         cpuhp_state_remove_instance_nocalls(CPUHP_BLK_MQ_DEAD,
    2288                 :            :                                             &hctx->cpuhp_dead);
    2289                 :            : }
    2290                 :            : 
    2291                 :            : /* hctx->ctxs will be freed in queue's release handler */
    2292                 :          0 : static void blk_mq_exit_hctx(struct request_queue *q,
    2293                 :            :                 struct blk_mq_tag_set *set,
    2294                 :            :                 struct blk_mq_hw_ctx *hctx, unsigned int hctx_idx)
    2295                 :            : {
    2296   [ #  #  #  # ]:          0 :         if (blk_mq_hw_queue_mapped(hctx))
    2297         [ #  # ]:          0 :                 blk_mq_tag_idle(hctx);
    2298                 :            : 
    2299         [ #  # ]:          0 :         if (set->ops->exit_request)
    2300                 :          0 :                 set->ops->exit_request(set, hctx->fq->flush_rq, hctx_idx);
    2301                 :            : 
    2302         [ #  # ]:          0 :         if (set->ops->exit_hctx)
    2303                 :          0 :                 set->ops->exit_hctx(hctx, hctx_idx);
    2304                 :            : 
    2305                 :          0 :         blk_mq_remove_cpuhp(hctx);
    2306                 :            : 
    2307                 :          0 :         spin_lock(&q->unused_hctx_lock);
    2308                 :          0 :         list_add(&hctx->hctx_list, &q->unused_hctx_list);
    2309                 :          0 :         spin_unlock(&q->unused_hctx_lock);
    2310                 :          0 : }
    2311                 :            : 
    2312                 :          0 : static void blk_mq_exit_hw_queues(struct request_queue *q,
    2313                 :            :                 struct blk_mq_tag_set *set, int nr_queue)
    2314                 :            : {
    2315                 :          0 :         struct blk_mq_hw_ctx *hctx;
    2316                 :          0 :         unsigned int i;
    2317                 :            : 
    2318         [ #  # ]:          0 :         queue_for_each_hw_ctx(q, hctx, i) {
    2319         [ #  # ]:          0 :                 if (i == nr_queue)
    2320                 :            :                         break;
    2321                 :          0 :                 blk_mq_debugfs_unregister_hctx(hctx);
    2322                 :          0 :                 blk_mq_exit_hctx(q, set, hctx, i);
    2323                 :            :         }
    2324                 :          0 : }
    2325                 :            : 
    2326                 :        143 : static int blk_mq_hw_ctx_size(struct blk_mq_tag_set *tag_set)
    2327                 :            : {
    2328                 :        143 :         int hw_ctx_size = sizeof(struct blk_mq_hw_ctx);
    2329                 :            : 
    2330                 :        143 :         BUILD_BUG_ON(ALIGN(offsetof(struct blk_mq_hw_ctx, srcu),
    2331                 :            :                            __alignof__(struct blk_mq_hw_ctx)) !=
    2332                 :            :                      sizeof(struct blk_mq_hw_ctx));
    2333                 :            : 
    2334                 :        143 :         if (tag_set->flags & BLK_MQ_F_BLOCKING)
    2335                 :          0 :                 hw_ctx_size += sizeof(struct srcu_struct);
    2336                 :            : 
    2337                 :        143 :         return hw_ctx_size;
    2338                 :            : }
    2339                 :            : 
    2340                 :            : static int blk_mq_init_hctx(struct request_queue *q,
    2341                 :            :                 struct blk_mq_tag_set *set,
    2342                 :            :                 struct blk_mq_hw_ctx *hctx, unsigned hctx_idx)
    2343                 :            : {
    2344                 :            :         hctx->queue_num = hctx_idx;
    2345                 :            : 
    2346                 :            :         cpuhp_state_add_instance_nocalls(CPUHP_BLK_MQ_DEAD, &hctx->cpuhp_dead);
    2347                 :            : 
    2348                 :            :         hctx->tags = set->tags[hctx_idx];
    2349                 :            : 
    2350                 :            :         if (set->ops->init_hctx &&
    2351                 :            :             set->ops->init_hctx(hctx, set->driver_data, hctx_idx))
    2352                 :            :                 goto unregister_cpu_notifier;
    2353                 :            : 
    2354                 :            :         if (blk_mq_init_request(set, hctx->fq->flush_rq, hctx_idx,
    2355                 :            :                                 hctx->numa_node))
    2356                 :            :                 goto exit_hctx;
    2357                 :            :         return 0;
    2358                 :            : 
    2359                 :            :  exit_hctx:
    2360                 :            :         if (set->ops->exit_hctx)
    2361                 :            :                 set->ops->exit_hctx(hctx, hctx_idx);
    2362                 :            :  unregister_cpu_notifier:
    2363                 :            :         blk_mq_remove_cpuhp(hctx);
    2364                 :            :         return -1;
    2365                 :            : }
    2366                 :            : 
    2367                 :            : static struct blk_mq_hw_ctx *
    2368                 :        143 : blk_mq_alloc_hctx(struct request_queue *q, struct blk_mq_tag_set *set,
    2369                 :            :                 int node)
    2370                 :            : {
    2371                 :        143 :         struct blk_mq_hw_ctx *hctx;
    2372                 :        143 :         gfp_t gfp = GFP_NOIO | __GFP_NOWARN | __GFP_NORETRY;
    2373                 :            : 
    2374         [ -  + ]:        143 :         hctx = kzalloc_node(blk_mq_hw_ctx_size(set), gfp, node);
    2375         [ -  + ]:        143 :         if (!hctx)
    2376                 :          0 :                 goto fail_alloc_hctx;
    2377                 :            : 
    2378                 :        143 :         if (!zalloc_cpumask_var_node(&hctx->cpumask, gfp, node))
    2379                 :            :                 goto free_hctx;
    2380                 :            : 
    2381                 :        143 :         atomic_set(&hctx->nr_active, 0);
    2382         [ -  + ]:        143 :         if (node == NUMA_NO_NODE)
    2383                 :          0 :                 node = set->numa_node;
    2384                 :        143 :         hctx->numa_node = node;
    2385                 :            : 
    2386                 :        143 :         INIT_DELAYED_WORK(&hctx->run_work, blk_mq_run_work_fn);
    2387                 :        143 :         spin_lock_init(&hctx->lock);
    2388                 :        143 :         INIT_LIST_HEAD(&hctx->dispatch);
    2389                 :        143 :         hctx->queue = q;
    2390                 :        143 :         hctx->flags = set->flags & ~BLK_MQ_F_TAG_SHARED;
    2391                 :            : 
    2392                 :        143 :         INIT_LIST_HEAD(&hctx->hctx_list);
    2393                 :            : 
    2394                 :            :         /*
    2395                 :            :          * Allocate space for all possible cpus to avoid allocation at
    2396                 :            :          * runtime
    2397                 :            :          */
    2398                 :        143 :         hctx->ctxs = kmalloc_array_node(nr_cpu_ids, sizeof(void *),
    2399                 :            :                         gfp, node);
    2400         [ -  + ]:        143 :         if (!hctx->ctxs)
    2401                 :          0 :                 goto free_cpumask;
    2402                 :            : 
    2403         [ -  + ]:        143 :         if (sbitmap_init_node(&hctx->ctx_map, nr_cpu_ids, ilog2(8),
    2404                 :            :                                 gfp, node))
    2405                 :          0 :                 goto free_ctxs;
    2406                 :        143 :         hctx->nr_ctx = 0;
    2407                 :            : 
    2408                 :        143 :         spin_lock_init(&hctx->dispatch_wait_lock);
    2409                 :        143 :         init_waitqueue_func_entry(&hctx->dispatch_wait, blk_mq_dispatch_wake);
    2410                 :        143 :         INIT_LIST_HEAD(&hctx->dispatch_wait.entry);
    2411                 :            : 
    2412                 :        143 :         hctx->fq = blk_alloc_flush_queue(q, hctx->numa_node, set->cmd_size,
    2413                 :            :                         gfp);
    2414         [ -  + ]:        143 :         if (!hctx->fq)
    2415                 :          0 :                 goto free_bitmap;
    2416                 :            : 
    2417         [ -  + ]:        143 :         if (hctx->flags & BLK_MQ_F_BLOCKING)
    2418                 :          0 :                 init_srcu_struct(hctx->srcu);
    2419                 :        143 :         blk_mq_hctx_kobj_init(hctx);
    2420                 :            : 
    2421                 :        143 :         return hctx;
    2422                 :            : 
    2423                 :            :  free_bitmap:
    2424                 :          0 :         sbitmap_free(&hctx->ctx_map);
    2425                 :          0 :  free_ctxs:
    2426                 :          0 :         kfree(hctx->ctxs);
    2427                 :          0 :  free_cpumask:
    2428                 :          0 :         free_cpumask_var(hctx->cpumask);
    2429                 :            :  free_hctx:
    2430                 :          0 :         kfree(hctx);
    2431                 :            :  fail_alloc_hctx:
    2432                 :            :         return NULL;
    2433                 :            : }
    2434                 :            : 
    2435                 :        143 : static void blk_mq_init_cpu_queues(struct request_queue *q,
    2436                 :            :                                    unsigned int nr_hw_queues)
    2437                 :            : {
    2438                 :        143 :         struct blk_mq_tag_set *set = q->tag_set;
    2439                 :        143 :         unsigned int i, j;
    2440                 :            : 
    2441         [ +  + ]:        286 :         for_each_possible_cpu(i) {
    2442                 :        143 :                 struct blk_mq_ctx *__ctx = per_cpu_ptr(q->queue_ctx, i);
    2443                 :        143 :                 struct blk_mq_hw_ctx *hctx;
    2444                 :        143 :                 int k;
    2445                 :            : 
    2446                 :        143 :                 __ctx->cpu = i;
    2447                 :        143 :                 spin_lock_init(&__ctx->lock);
    2448         [ +  + ]:        572 :                 for (k = HCTX_TYPE_DEFAULT; k < HCTX_MAX_TYPES; k++)
    2449                 :        429 :                         INIT_LIST_HEAD(&__ctx->rq_lists[k]);
    2450                 :            : 
    2451                 :        143 :                 __ctx->queue = q;
    2452                 :            : 
    2453                 :            :                 /*
    2454                 :            :                  * Set local node, IFF we have more than one hw queue. If
    2455                 :            :                  * not, we remain on the home node of the device
    2456                 :            :                  */
    2457         [ +  + ]:        286 :                 for (j = 0; j < set->nr_maps; j++) {
    2458         [ -  + ]:        143 :                         hctx = blk_mq_map_queue_type(q, j, i);
    2459   [ -  +  -  - ]:        143 :                         if (nr_hw_queues > 1 && hctx->numa_node == NUMA_NO_NODE)
    2460                 :          0 :                                 hctx->numa_node = local_memory_node(cpu_to_node(i));
    2461                 :            :                 }
    2462                 :            :         }
    2463                 :        143 : }
    2464                 :            : 
    2465                 :        130 : static bool __blk_mq_alloc_rq_map(struct blk_mq_tag_set *set, int hctx_idx)
    2466                 :            : {
    2467                 :        130 :         int ret = 0;
    2468                 :            : 
    2469                 :        130 :         set->tags[hctx_idx] = blk_mq_alloc_rq_map(set, hctx_idx,
    2470                 :            :                                         set->queue_depth, set->reserved_tags);
    2471         [ +  - ]:        130 :         if (!set->tags[hctx_idx])
    2472                 :            :                 return false;
    2473                 :            : 
    2474                 :        130 :         ret = blk_mq_alloc_rqs(set, set->tags[hctx_idx], hctx_idx,
    2475                 :            :                                 set->queue_depth);
    2476         [ -  + ]:        130 :         if (!ret)
    2477                 :            :                 return true;
    2478                 :            : 
    2479                 :          0 :         blk_mq_free_rq_map(set->tags[hctx_idx]);
    2480                 :          0 :         set->tags[hctx_idx] = NULL;
    2481                 :          0 :         return false;
    2482                 :            : }
    2483                 :            : 
    2484                 :          0 : static void blk_mq_free_map_and_requests(struct blk_mq_tag_set *set,
    2485                 :            :                                          unsigned int hctx_idx)
    2486                 :            : {
    2487   [ #  #  #  # ]:          0 :         if (set->tags && set->tags[hctx_idx]) {
    2488                 :          0 :                 blk_mq_free_rqs(set, set->tags[hctx_idx], hctx_idx);
    2489                 :          0 :                 blk_mq_free_rq_map(set->tags[hctx_idx]);
    2490                 :          0 :                 set->tags[hctx_idx] = NULL;
    2491                 :            :         }
    2492                 :          0 : }
    2493                 :            : 
    2494                 :        143 : static void blk_mq_map_swqueue(struct request_queue *q)
    2495                 :            : {
    2496                 :        143 :         unsigned int i, j, hctx_idx;
    2497                 :        143 :         struct blk_mq_hw_ctx *hctx;
    2498                 :        143 :         struct blk_mq_ctx *ctx;
    2499                 :        143 :         struct blk_mq_tag_set *set = q->tag_set;
    2500                 :            : 
    2501         [ +  + ]:        286 :         queue_for_each_hw_ctx(q, hctx, i) {
    2502                 :        143 :                 cpumask_clear(hctx->cpumask);
    2503                 :        143 :                 hctx->nr_ctx = 0;
    2504                 :        143 :                 hctx->dispatch_from = NULL;
    2505                 :            :         }
    2506                 :            : 
    2507                 :            :         /*
    2508                 :            :          * Map software to hardware queues.
    2509                 :            :          *
    2510                 :            :          * If the cpu isn't present, the cpu is mapped to first hctx.
    2511                 :            :          */
    2512         [ +  + ]:        286 :         for_each_possible_cpu(i) {
    2513                 :        143 :                 hctx_idx = set->map[HCTX_TYPE_DEFAULT].mq_map[i];
    2514                 :            :                 /* unmapped hw queue can be remapped after CPU topo changed */
    2515   [ -  +  -  - ]:        143 :                 if (!set->tags[hctx_idx] &&
    2516                 :          0 :                     !__blk_mq_alloc_rq_map(set, hctx_idx)) {
    2517                 :            :                         /*
    2518                 :            :                          * If tags initialization fail for some hctx,
    2519                 :            :                          * that hctx won't be brought online.  In this
    2520                 :            :                          * case, remap the current ctx to hctx[0] which
    2521                 :            :                          * is guaranteed to always have tags allocated
    2522                 :            :                          */
    2523                 :          0 :                         set->map[HCTX_TYPE_DEFAULT].mq_map[i] = 0;
    2524                 :            :                 }
    2525                 :            : 
    2526                 :        143 :                 ctx = per_cpu_ptr(q->queue_ctx, i);
    2527         [ +  + ]:        286 :                 for (j = 0; j < set->nr_maps; j++) {
    2528         [ -  + ]:        143 :                         if (!set->map[j].nr_queues) {
    2529                 :          0 :                                 ctx->hctxs[j] = blk_mq_map_queue_type(q,
    2530                 :            :                                                 HCTX_TYPE_DEFAULT, i);
    2531                 :          0 :                                 continue;
    2532                 :            :                         }
    2533                 :            : 
    2534                 :        143 :                         hctx = blk_mq_map_queue_type(q, j, i);
    2535                 :        143 :                         ctx->hctxs[j] = hctx;
    2536                 :            :                         /*
    2537                 :            :                          * If the CPU is already set in the mask, then we've
    2538                 :            :                          * mapped this one already. This can happen if
    2539                 :            :                          * devices share queues across queue maps.
    2540                 :            :                          */
    2541         [ -  + ]:        143 :                         if (cpumask_test_cpu(i, hctx->cpumask))
    2542                 :          0 :                                 continue;
    2543                 :            : 
    2544                 :        143 :                         cpumask_set_cpu(i, hctx->cpumask);
    2545                 :        143 :                         hctx->type = j;
    2546                 :        143 :                         ctx->index_hw[hctx->type] = hctx->nr_ctx;
    2547                 :        143 :                         hctx->ctxs[hctx->nr_ctx++] = ctx;
    2548                 :            : 
    2549                 :            :                         /*
    2550                 :            :                          * If the nr_ctx type overflows, we have exceeded the
    2551                 :            :                          * amount of sw queues we can support.
    2552                 :            :                          */
    2553         [ -  + ]:        143 :                         BUG_ON(!hctx->nr_ctx);
    2554                 :            :                 }
    2555                 :            : 
    2556         [ +  + ]:        429 :                 for (; j < HCTX_MAX_TYPES; j++)
    2557                 :        286 :                         ctx->hctxs[j] = blk_mq_map_queue_type(q,
    2558                 :            :                                         HCTX_TYPE_DEFAULT, i);
    2559                 :            :         }
    2560                 :            : 
    2561         [ +  + ]:        286 :         queue_for_each_hw_ctx(q, hctx, i) {
    2562                 :            :                 /*
    2563                 :            :                  * If no software queues are mapped to this hardware queue,
    2564                 :            :                  * disable it and free the request entries.
    2565                 :            :                  */
    2566         [ -  + ]:        143 :                 if (!hctx->nr_ctx) {
    2567                 :            :                         /* Never unmap queue 0.  We need it as a
    2568                 :            :                          * fallback in case of a new remap fails
    2569                 :            :                          * allocation
    2570                 :            :                          */
    2571   [ #  #  #  # ]:          0 :                         if (i && set->tags[i])
    2572                 :          0 :                                 blk_mq_free_map_and_requests(set, i);
    2573                 :            : 
    2574                 :          0 :                         hctx->tags = NULL;
    2575                 :          0 :                         continue;
    2576                 :            :                 }
    2577                 :            : 
    2578                 :        143 :                 hctx->tags = set->tags[i];
    2579         [ -  + ]:        143 :                 WARN_ON(!hctx->tags);
    2580                 :            : 
    2581                 :            :                 /*
    2582                 :            :                  * Set the map size to the number of mapped software queues.
    2583                 :            :                  * This is more accurate and more efficient than looping
    2584                 :            :                  * over all possibly mapped software queues.
    2585                 :            :                  */
    2586                 :        143 :                 sbitmap_resize(&hctx->ctx_map, hctx->nr_ctx);
    2587                 :            : 
    2588                 :            :                 /*
    2589                 :            :                  * Initialize batch roundrobin counts
    2590                 :            :                  */
    2591                 :        143 :                 hctx->next_cpu = blk_mq_first_mapped_cpu(hctx);
    2592                 :        143 :                 hctx->next_cpu_batch = BLK_MQ_CPU_WORK_BATCH;
    2593                 :            :         }
    2594                 :        143 : }
    2595                 :            : 
    2596                 :            : /*
    2597                 :            :  * Caller needs to ensure that we're either frozen/quiesced, or that
    2598                 :            :  * the queue isn't live yet.
    2599                 :            :  */
    2600                 :         13 : static void queue_set_hctx_shared(struct request_queue *q, bool shared)
    2601                 :            : {
    2602                 :            :         struct blk_mq_hw_ctx *hctx;
    2603                 :            :         int i;
    2604                 :            : 
    2605   [ +  +  +  + ]:         52 :         queue_for_each_hw_ctx(q, hctx, i) {
    2606         [ +  - ]:         13 :                 if (shared)
    2607                 :         26 :                         hctx->flags |= BLK_MQ_F_TAG_SHARED;
    2608                 :            :                 else
    2609                 :          0 :                         hctx->flags &= ~BLK_MQ_F_TAG_SHARED;
    2610                 :            :         }
    2611                 :            : }
    2612                 :            : 
    2613                 :         13 : static void blk_mq_update_tag_set_depth(struct blk_mq_tag_set *set,
    2614                 :            :                                         bool shared)
    2615                 :            : {
    2616                 :         13 :         struct request_queue *q;
    2617                 :            : 
    2618                 :         13 :         lockdep_assert_held(&set->tag_list_lock);
    2619                 :            : 
    2620         [ +  + ]:         26 :         list_for_each_entry(q, &set->tag_list, tag_set_list) {
    2621                 :         13 :                 blk_mq_freeze_queue(q);
    2622                 :         13 :                 queue_set_hctx_shared(q, shared);
    2623                 :         13 :                 blk_mq_unfreeze_queue(q);
    2624                 :            :         }
    2625                 :         13 : }
    2626                 :            : 
    2627                 :          0 : static void blk_mq_del_queue_tag_set(struct request_queue *q)
    2628                 :            : {
    2629                 :          0 :         struct blk_mq_tag_set *set = q->tag_set;
    2630                 :            : 
    2631                 :          0 :         mutex_lock(&set->tag_list_lock);
    2632         [ #  # ]:          0 :         list_del_rcu(&q->tag_set_list);
    2633         [ #  # ]:          0 :         if (list_is_singular(&set->tag_list)) {
    2634                 :            :                 /* just transitioned to unshared */
    2635                 :          0 :                 set->flags &= ~BLK_MQ_F_TAG_SHARED;
    2636                 :            :                 /* update existing queue */
    2637                 :          0 :                 blk_mq_update_tag_set_depth(set, false);
    2638                 :            :         }
    2639                 :          0 :         mutex_unlock(&set->tag_list_lock);
    2640                 :          0 :         INIT_LIST_HEAD(&q->tag_set_list);
    2641                 :          0 : }
    2642                 :            : 
    2643                 :        143 : static void blk_mq_add_queue_tag_set(struct blk_mq_tag_set *set,
    2644                 :            :                                      struct request_queue *q)
    2645                 :            : {
    2646                 :        143 :         mutex_lock(&set->tag_list_lock);
    2647                 :            : 
    2648                 :            :         /*
    2649                 :            :          * Check to see if we're transitioning to shared (from 1 to 2 queues).
    2650                 :            :          */
    2651         [ +  + ]:        143 :         if (!list_empty(&set->tag_list) &&
    2652         [ +  - ]:         13 :             !(set->flags & BLK_MQ_F_TAG_SHARED)) {
    2653                 :         13 :                 set->flags |= BLK_MQ_F_TAG_SHARED;
    2654                 :            :                 /* update existing queue */
    2655                 :         13 :                 blk_mq_update_tag_set_depth(set, true);
    2656                 :            :         }
    2657         [ +  + ]:        143 :         if (set->flags & BLK_MQ_F_TAG_SHARED)
    2658                 :            :                 queue_set_hctx_shared(q, true);
    2659                 :        143 :         list_add_tail_rcu(&q->tag_set_list, &set->tag_list);
    2660                 :            : 
    2661                 :        143 :         mutex_unlock(&set->tag_list_lock);
    2662                 :        143 : }
    2663                 :            : 
    2664                 :            : /* All allocations will be freed in release handler of q->mq_kobj */
    2665                 :            : static int blk_mq_alloc_ctxs(struct request_queue *q)
    2666                 :            : {
    2667                 :            :         struct blk_mq_ctxs *ctxs;
    2668                 :            :         int cpu;
    2669                 :            : 
    2670                 :            :         ctxs = kzalloc(sizeof(*ctxs), GFP_KERNEL);
    2671                 :            :         if (!ctxs)
    2672                 :            :                 return -ENOMEM;
    2673                 :            : 
    2674                 :            :         ctxs->queue_ctx = alloc_percpu(struct blk_mq_ctx);
    2675                 :            :         if (!ctxs->queue_ctx)
    2676                 :            :                 goto fail;
    2677                 :            : 
    2678                 :            :         for_each_possible_cpu(cpu) {
    2679                 :            :                 struct blk_mq_ctx *ctx = per_cpu_ptr(ctxs->queue_ctx, cpu);
    2680                 :            :                 ctx->ctxs = ctxs;
    2681                 :            :         }
    2682                 :            : 
    2683                 :            :         q->mq_kobj = &ctxs->kobj;
    2684                 :            :         q->queue_ctx = ctxs->queue_ctx;
    2685                 :            : 
    2686                 :            :         return 0;
    2687                 :            :  fail:
    2688                 :            :         kfree(ctxs);
    2689                 :            :         return -ENOMEM;
    2690                 :            : }
    2691                 :            : 
    2692                 :            : /*
    2693                 :            :  * It is the actual release handler for mq, but we do it from
    2694                 :            :  * request queue's release handler for avoiding use-after-free
    2695                 :            :  * and headache because q->mq_kobj shouldn't have been introduced,
    2696                 :            :  * but we can't group ctx/kctx kobj without it.
    2697                 :            :  */
    2698                 :          0 : void blk_mq_release(struct request_queue *q)
    2699                 :            : {
    2700                 :          0 :         struct blk_mq_hw_ctx *hctx, *next;
    2701                 :          0 :         int i;
    2702                 :            : 
    2703         [ #  # ]:          0 :         queue_for_each_hw_ctx(q, hctx, i)
    2704   [ #  #  #  #  :          0 :                 WARN_ON_ONCE(hctx && list_empty(&hctx->hctx_list));
                   #  # ]
    2705                 :            : 
    2706                 :            :         /* all hctx are in .unused_hctx_list now */
    2707         [ #  # ]:          0 :         list_for_each_entry_safe(hctx, next, &q->unused_hctx_list, hctx_list) {
    2708                 :          0 :                 list_del_init(&hctx->hctx_list);
    2709                 :          0 :                 kobject_put(&hctx->kobj);
    2710                 :            :         }
    2711                 :            : 
    2712                 :          0 :         kfree(q->queue_hw_ctx);
    2713                 :            : 
    2714                 :            :         /*
    2715                 :            :          * release .mq_kobj and sw queue's kobject now because
    2716                 :            :          * both share lifetime with request queue.
    2717                 :            :          */
    2718                 :          0 :         blk_mq_sysfs_deinit(q);
    2719                 :          0 : }
    2720                 :            : 
    2721                 :        143 : struct request_queue *blk_mq_init_queue(struct blk_mq_tag_set *set)
    2722                 :            : {
    2723                 :        143 :         struct request_queue *uninit_q, *q;
    2724                 :            : 
    2725                 :        143 :         uninit_q = blk_alloc_queue_node(GFP_KERNEL, set->numa_node);
    2726         [ +  - ]:        143 :         if (!uninit_q)
    2727                 :            :                 return ERR_PTR(-ENOMEM);
    2728                 :            : 
    2729                 :            :         /*
    2730                 :            :          * Initialize the queue without an elevator. device_add_disk() will do
    2731                 :            :          * the initialization.
    2732                 :            :          */
    2733                 :        143 :         q = blk_mq_init_allocated_queue(set, uninit_q, false);
    2734         [ -  + ]:        143 :         if (IS_ERR(q))
    2735                 :          0 :                 blk_cleanup_queue(uninit_q);
    2736                 :            : 
    2737                 :            :         return q;
    2738                 :            : }
    2739                 :            : EXPORT_SYMBOL(blk_mq_init_queue);
    2740                 :            : 
    2741                 :            : /*
    2742                 :            :  * Helper for setting up a queue with mq ops, given queue depth, and
    2743                 :            :  * the passed in mq ops flags.
    2744                 :            :  */
    2745                 :          0 : struct request_queue *blk_mq_init_sq_queue(struct blk_mq_tag_set *set,
    2746                 :            :                                            const struct blk_mq_ops *ops,
    2747                 :            :                                            unsigned int queue_depth,
    2748                 :            :                                            unsigned int set_flags)
    2749                 :            : {
    2750                 :          0 :         struct request_queue *q;
    2751                 :          0 :         int ret;
    2752                 :            : 
    2753                 :          0 :         memset(set, 0, sizeof(*set));
    2754                 :          0 :         set->ops = ops;
    2755                 :          0 :         set->nr_hw_queues = 1;
    2756                 :          0 :         set->nr_maps = 1;
    2757                 :          0 :         set->queue_depth = queue_depth;
    2758                 :          0 :         set->numa_node = NUMA_NO_NODE;
    2759                 :          0 :         set->flags = set_flags;
    2760                 :            : 
    2761                 :          0 :         ret = blk_mq_alloc_tag_set(set);
    2762         [ #  # ]:          0 :         if (ret)
    2763                 :          0 :                 return ERR_PTR(ret);
    2764                 :            : 
    2765                 :          0 :         q = blk_mq_init_queue(set);
    2766         [ #  # ]:          0 :         if (IS_ERR(q)) {
    2767                 :          0 :                 blk_mq_free_tag_set(set);
    2768                 :          0 :                 return q;
    2769                 :            :         }
    2770                 :            : 
    2771                 :            :         return q;
    2772                 :            : }
    2773                 :            : EXPORT_SYMBOL(blk_mq_init_sq_queue);
    2774                 :            : 
    2775                 :        143 : static struct blk_mq_hw_ctx *blk_mq_alloc_and_init_hctx(
    2776                 :            :                 struct blk_mq_tag_set *set, struct request_queue *q,
    2777                 :            :                 int hctx_idx, int node)
    2778                 :            : {
    2779                 :        143 :         struct blk_mq_hw_ctx *hctx = NULL, *tmp;
    2780                 :            : 
    2781                 :            :         /* reuse dead hctx first */
    2782                 :        143 :         spin_lock(&q->unused_hctx_lock);
    2783         [ -  + ]:        143 :         list_for_each_entry(tmp, &q->unused_hctx_list, hctx_list) {
    2784         [ #  # ]:          0 :                 if (tmp->numa_node == node) {
    2785                 :            :                         hctx = tmp;
    2786                 :            :                         break;
    2787                 :            :                 }
    2788                 :            :         }
    2789         [ -  + ]:        143 :         if (hctx)
    2790                 :          0 :                 list_del_init(&hctx->hctx_list);
    2791                 :        143 :         spin_unlock(&q->unused_hctx_lock);
    2792                 :            : 
    2793         [ +  - ]:        143 :         if (!hctx)
    2794                 :        143 :                 hctx = blk_mq_alloc_hctx(q, set, node);
    2795         [ -  + ]:        143 :         if (!hctx)
    2796                 :          0 :                 goto fail;
    2797                 :            : 
    2798         [ -  + ]:        143 :         if (blk_mq_init_hctx(q, set, hctx, hctx_idx))
    2799                 :          0 :                 goto free_hctx;
    2800                 :            : 
    2801                 :            :         return hctx;
    2802                 :            : 
    2803                 :            :  free_hctx:
    2804                 :          0 :         kobject_put(&hctx->kobj);
    2805                 :            :  fail:
    2806                 :            :         return NULL;
    2807                 :            : }
    2808                 :            : 
    2809                 :        143 : static void blk_mq_realloc_hw_ctxs(struct blk_mq_tag_set *set,
    2810                 :            :                                                 struct request_queue *q)
    2811                 :            : {
    2812                 :        143 :         int i, j, end;
    2813                 :        143 :         struct blk_mq_hw_ctx **hctxs = q->queue_hw_ctx;
    2814                 :            : 
    2815         [ +  - ]:        143 :         if (q->nr_hw_queues < set->nr_hw_queues) {
    2816                 :        143 :                 struct blk_mq_hw_ctx **new_hctxs;
    2817                 :            : 
    2818                 :        143 :                 new_hctxs = kcalloc_node(set->nr_hw_queues,
    2819                 :            :                                        sizeof(*new_hctxs), GFP_KERNEL,
    2820                 :            :                                        set->numa_node);
    2821         [ +  - ]:        143 :                 if (!new_hctxs)
    2822                 :            :                         return;
    2823         [ -  + ]:        143 :                 if (hctxs)
    2824                 :          0 :                         memcpy(new_hctxs, hctxs, q->nr_hw_queues *
    2825                 :            :                                sizeof(*hctxs));
    2826                 :        143 :                 q->queue_hw_ctx = new_hctxs;
    2827                 :        143 :                 q->nr_hw_queues = set->nr_hw_queues;
    2828                 :        143 :                 kfree(hctxs);
    2829                 :        143 :                 hctxs = new_hctxs;
    2830                 :            :         }
    2831                 :            : 
    2832                 :            :         /* protect against switching io scheduler  */
    2833                 :        143 :         mutex_lock(&q->sysfs_lock);
    2834         [ +  + ]:        429 :         for (i = 0; i < set->nr_hw_queues; i++) {
    2835                 :        143 :                 int node;
    2836                 :        143 :                 struct blk_mq_hw_ctx *hctx;
    2837                 :            : 
    2838                 :        143 :                 node = blk_mq_hw_queue_to_node(&set->map[HCTX_TYPE_DEFAULT], i);
    2839                 :            :                 /*
    2840                 :            :                  * If the hw queue has been mapped to another numa node,
    2841                 :            :                  * we need to realloc the hctx. If allocation fails, fallback
    2842                 :            :                  * to use the previous one.
    2843                 :            :                  */
    2844   [ -  +  -  - ]:        143 :                 if (hctxs[i] && (hctxs[i]->numa_node == node))
    2845                 :          0 :                         continue;
    2846                 :            : 
    2847                 :        143 :                 hctx = blk_mq_alloc_and_init_hctx(set, q, i, node);
    2848         [ +  - ]:        143 :                 if (hctx) {
    2849         [ -  + ]:        143 :                         if (hctxs[i])
    2850                 :          0 :                                 blk_mq_exit_hctx(q, set, hctxs[i], i);
    2851                 :        143 :                         hctxs[i] = hctx;
    2852                 :            :                 } else {
    2853         [ #  # ]:          0 :                         if (hctxs[i])
    2854                 :          0 :                                 pr_warn("Allocate new hctx on node %d fails,\
    2855                 :            :                                                 fallback to previous one on node %d\n",
    2856                 :            :                                                 node, hctxs[i]->numa_node);
    2857                 :            :                         else
    2858                 :            :                                 break;
    2859                 :            :                 }
    2860                 :            :         }
    2861                 :            :         /*
    2862                 :            :          * Increasing nr_hw_queues fails. Free the newly allocated
    2863                 :            :          * hctxs and keep the previous q->nr_hw_queues.
    2864                 :            :          */
    2865         [ -  + ]:        143 :         if (i != set->nr_hw_queues) {
    2866                 :          0 :                 j = q->nr_hw_queues;
    2867                 :          0 :                 end = i;
    2868                 :            :         } else {
    2869                 :        143 :                 j = i;
    2870                 :        143 :                 end = q->nr_hw_queues;
    2871                 :        143 :                 q->nr_hw_queues = set->nr_hw_queues;
    2872                 :            :         }
    2873                 :            : 
    2874         [ -  + ]:        143 :         for (; j < end; j++) {
    2875                 :          0 :                 struct blk_mq_hw_ctx *hctx = hctxs[j];
    2876                 :            : 
    2877         [ #  # ]:          0 :                 if (hctx) {
    2878         [ #  # ]:          0 :                         if (hctx->tags)
    2879                 :          0 :                                 blk_mq_free_map_and_requests(set, j);
    2880                 :          0 :                         blk_mq_exit_hctx(q, set, hctx, j);
    2881                 :          0 :                         hctxs[j] = NULL;
    2882                 :            :                 }
    2883                 :            :         }
    2884                 :        143 :         mutex_unlock(&q->sysfs_lock);
    2885                 :            : }
    2886                 :            : 
    2887                 :        143 : struct request_queue *blk_mq_init_allocated_queue(struct blk_mq_tag_set *set,
    2888                 :            :                                                   struct request_queue *q,
    2889                 :            :                                                   bool elevator_init)
    2890                 :            : {
    2891                 :            :         /* mark the queue as mq asap */
    2892                 :        143 :         q->mq_ops = set->ops;
    2893                 :            : 
    2894                 :        143 :         q->poll_cb = blk_stat_alloc_callback(blk_mq_poll_stats_fn,
    2895                 :            :                                              blk_mq_poll_stats_bkt,
    2896                 :            :                                              BLK_MQ_POLL_STATS_BKTS, q);
    2897         [ -  + ]:        143 :         if (!q->poll_cb)
    2898                 :          0 :                 goto err_exit;
    2899                 :            : 
    2900         [ -  + ]:        143 :         if (blk_mq_alloc_ctxs(q))
    2901                 :          0 :                 goto err_poll;
    2902                 :            : 
    2903                 :            :         /* init q->mq_kobj and sw queues' kobjects */
    2904                 :        143 :         blk_mq_sysfs_init(q);
    2905                 :            : 
    2906                 :        143 :         INIT_LIST_HEAD(&q->unused_hctx_list);
    2907                 :        143 :         spin_lock_init(&q->unused_hctx_lock);
    2908                 :            : 
    2909                 :        143 :         blk_mq_realloc_hw_ctxs(set, q);
    2910         [ -  + ]:        143 :         if (!q->nr_hw_queues)
    2911                 :          0 :                 goto err_hctxs;
    2912                 :            : 
    2913         [ -  + ]:        143 :         INIT_WORK(&q->timeout_work, blk_mq_timeout_work);
    2914         [ -  + ]:        143 :         blk_queue_rq_timeout(q, set->timeout ? set->timeout : 30 * HZ);
    2915                 :            : 
    2916                 :        143 :         q->tag_set = set;
    2917                 :            : 
    2918                 :        143 :         q->queue_flags |= QUEUE_FLAG_MQ_DEFAULT;
    2919         [ -  + ]:        143 :         if (set->nr_maps > HCTX_TYPE_POLL &&
    2920         [ #  # ]:          0 :             set->map[HCTX_TYPE_POLL].nr_queues)
    2921                 :          0 :                 blk_queue_flag_set(QUEUE_FLAG_POLL, q);
    2922                 :            : 
    2923                 :        143 :         q->sg_reserved_size = INT_MAX;
    2924                 :            : 
    2925                 :        143 :         INIT_DELAYED_WORK(&q->requeue_work, blk_mq_requeue_work);
    2926                 :        143 :         INIT_LIST_HEAD(&q->requeue_list);
    2927                 :        143 :         spin_lock_init(&q->requeue_lock);
    2928                 :            : 
    2929                 :        143 :         blk_queue_make_request(q, blk_mq_make_request);
    2930                 :            : 
    2931                 :            :         /*
    2932                 :            :          * Do this after blk_queue_make_request() overrides it...
    2933                 :            :          */
    2934                 :        143 :         q->nr_requests = set->queue_depth;
    2935                 :            : 
    2936                 :            :         /*
    2937                 :            :          * Default to classic polling
    2938                 :            :          */
    2939                 :        143 :         q->poll_nsec = BLK_MQ_POLL_CLASSIC;
    2940                 :            : 
    2941                 :        143 :         blk_mq_init_cpu_queues(q, set->nr_hw_queues);
    2942                 :        143 :         blk_mq_add_queue_tag_set(set, q);
    2943                 :        143 :         blk_mq_map_swqueue(q);
    2944                 :            : 
    2945         [ -  + ]:        143 :         if (elevator_init)
    2946                 :          0 :                 elevator_init_mq(q);
    2947                 :            : 
    2948                 :            :         return q;
    2949                 :            : 
    2950                 :            : err_hctxs:
    2951                 :          0 :         kfree(q->queue_hw_ctx);
    2952                 :          0 :         q->nr_hw_queues = 0;
    2953                 :          0 :         blk_mq_sysfs_deinit(q);
    2954                 :          0 : err_poll:
    2955                 :          0 :         blk_stat_free_callback(q->poll_cb);
    2956                 :          0 :         q->poll_cb = NULL;
    2957                 :          0 : err_exit:
    2958                 :          0 :         q->mq_ops = NULL;
    2959                 :          0 :         return ERR_PTR(-ENOMEM);
    2960                 :            : }
    2961                 :            : EXPORT_SYMBOL(blk_mq_init_allocated_queue);
    2962                 :            : 
    2963                 :            : /* tags can _not_ be used after returning from blk_mq_exit_queue */
    2964                 :          0 : void blk_mq_exit_queue(struct request_queue *q)
    2965                 :            : {
    2966                 :          0 :         struct blk_mq_tag_set   *set = q->tag_set;
    2967                 :            : 
    2968                 :          0 :         blk_mq_del_queue_tag_set(q);
    2969                 :          0 :         blk_mq_exit_hw_queues(q, set, set->nr_hw_queues);
    2970                 :          0 : }
    2971                 :            : 
    2972                 :        130 : static int __blk_mq_alloc_rq_maps(struct blk_mq_tag_set *set)
    2973                 :            : {
    2974                 :        130 :         int i;
    2975                 :            : 
    2976         [ +  + ]:        260 :         for (i = 0; i < set->nr_hw_queues; i++)
    2977         [ -  + ]:        130 :                 if (!__blk_mq_alloc_rq_map(set, i))
    2978                 :          0 :                         goto out_unwind;
    2979                 :            : 
    2980                 :            :         return 0;
    2981                 :            : 
    2982                 :            : out_unwind:
    2983         [ #  # ]:          0 :         while (--i >= 0)
    2984                 :          0 :                 blk_mq_free_rq_map(set->tags[i]);
    2985                 :            : 
    2986                 :            :         return -ENOMEM;
    2987                 :            : }
    2988                 :            : 
    2989                 :            : /*
    2990                 :            :  * Allocate the request maps associated with this tag_set. Note that this
    2991                 :            :  * may reduce the depth asked for, if memory is tight. set->queue_depth
    2992                 :            :  * will be updated to reflect the allocated depth.
    2993                 :            :  */
    2994                 :        130 : static int blk_mq_alloc_rq_maps(struct blk_mq_tag_set *set)
    2995                 :            : {
    2996                 :        130 :         unsigned int depth;
    2997                 :        130 :         int err;
    2998                 :            : 
    2999                 :        130 :         depth = set->queue_depth;
    3000                 :        130 :         do {
    3001                 :        130 :                 err = __blk_mq_alloc_rq_maps(set);
    3002         [ -  + ]:        130 :                 if (!err)
    3003                 :            :                         break;
    3004                 :            : 
    3005                 :          0 :                 set->queue_depth >>= 1;
    3006         [ #  # ]:          0 :                 if (set->queue_depth < set->reserved_tags + BLK_MQ_TAG_MIN) {
    3007                 :            :                         err = -ENOMEM;
    3008                 :            :                         break;
    3009                 :            :                 }
    3010         [ #  # ]:          0 :         } while (set->queue_depth);
    3011                 :            : 
    3012   [ +  -  -  + ]:        130 :         if (!set->queue_depth || err) {
    3013                 :          0 :                 pr_err("blk-mq: failed to allocate request map\n");
    3014                 :          0 :                 return -ENOMEM;
    3015                 :            :         }
    3016                 :            : 
    3017         [ -  + ]:        130 :         if (depth != set->queue_depth)
    3018                 :          0 :                 pr_info("blk-mq: reduced tag depth (%u -> %u)\n",
    3019                 :            :                                                 depth, set->queue_depth);
    3020                 :            : 
    3021                 :            :         return 0;
    3022                 :            : }
    3023                 :            : 
    3024                 :        130 : static int blk_mq_update_queue_map(struct blk_mq_tag_set *set)
    3025                 :            : {
    3026   [ +  +  +  - ]:        130 :         if (set->ops->map_queues && !is_kdump_kernel()) {
    3027                 :            :                 int i;
    3028                 :            : 
    3029                 :            :                 /*
    3030                 :            :                  * transport .map_queues is usually done in the following
    3031                 :            :                  * way:
    3032                 :            :                  *
    3033                 :            :                  * for (queue = 0; queue < set->nr_hw_queues; queue++) {
    3034                 :            :                  *      mask = get_cpu_mask(queue)
    3035                 :            :                  *      for_each_cpu(cpu, mask)
    3036                 :            :                  *              set->map[x].mq_map[cpu] = queue;
    3037                 :            :                  * }
    3038                 :            :                  *
    3039                 :            :                  * When we need to remap, the table has to be cleared for
    3040                 :            :                  * killing stale mapping since one CPU may not be mapped
    3041                 :            :                  * to any hw queue.
    3042                 :            :                  */
    3043         [ +  + ]:         52 :                 for (i = 0; i < set->nr_maps; i++)
    3044                 :         26 :                         blk_mq_clear_mq_map(&set->map[i]);
    3045                 :            : 
    3046                 :         26 :                 return set->ops->map_queues(set);
    3047                 :            :         } else {
    3048         [ -  + ]:        104 :                 BUG_ON(set->nr_maps > 1);
    3049                 :        104 :                 return blk_mq_map_queues(&set->map[HCTX_TYPE_DEFAULT]);
    3050                 :            :         }
    3051                 :            : }
    3052                 :            : 
    3053                 :        130 : static int blk_mq_realloc_tag_set_tags(struct blk_mq_tag_set *set,
    3054                 :            :                                   int cur_nr_hw_queues, int new_nr_hw_queues)
    3055                 :            : {
    3056                 :        130 :         struct blk_mq_tags **new_tags;
    3057                 :            : 
    3058         [ +  - ]:        130 :         if (cur_nr_hw_queues >= new_nr_hw_queues)
    3059                 :            :                 return 0;
    3060                 :            : 
    3061                 :        130 :         new_tags = kcalloc_node(new_nr_hw_queues, sizeof(struct blk_mq_tags *),
    3062                 :            :                                 GFP_KERNEL, set->numa_node);
    3063         [ +  - ]:        130 :         if (!new_tags)
    3064                 :            :                 return -ENOMEM;
    3065                 :            : 
    3066         [ -  + ]:        130 :         if (set->tags)
    3067                 :          0 :                 memcpy(new_tags, set->tags, cur_nr_hw_queues *
    3068                 :            :                        sizeof(*set->tags));
    3069                 :        130 :         kfree(set->tags);
    3070                 :        130 :         set->tags = new_tags;
    3071                 :        130 :         set->nr_hw_queues = new_nr_hw_queues;
    3072                 :            : 
    3073                 :        130 :         return 0;
    3074                 :            : }
    3075                 :            : 
    3076                 :            : /*
    3077                 :            :  * Alloc a tag set to be associated with one or more request queues.
    3078                 :            :  * May fail with EINVAL for various error conditions. May adjust the
    3079                 :            :  * requested depth down, if it's too large. In that case, the set
    3080                 :            :  * value will be stored in set->queue_depth.
    3081                 :            :  */
    3082                 :        130 : int blk_mq_alloc_tag_set(struct blk_mq_tag_set *set)
    3083                 :            : {
    3084                 :        130 :         int i, ret;
    3085                 :            : 
    3086                 :        130 :         BUILD_BUG_ON(BLK_MQ_MAX_DEPTH > 1 << BLK_MQ_UNIQUE_TAG_BITS);
    3087                 :            : 
    3088         [ +  - ]:        130 :         if (!set->nr_hw_queues)
    3089                 :            :                 return -EINVAL;
    3090         [ +  - ]:        130 :         if (!set->queue_depth)
    3091                 :            :                 return -EINVAL;
    3092         [ +  - ]:        130 :         if (set->queue_depth < set->reserved_tags + BLK_MQ_TAG_MIN)
    3093                 :            :                 return -EINVAL;
    3094                 :            : 
    3095         [ +  - ]:        130 :         if (!set->ops->queue_rq)
    3096                 :            :                 return -EINVAL;
    3097                 :            : 
    3098         [ +  - ]:        130 :         if (!set->ops->get_budget ^ !set->ops->put_budget)
    3099                 :            :                 return -EINVAL;
    3100                 :            : 
    3101         [ -  + ]:        130 :         if (set->queue_depth > BLK_MQ_MAX_DEPTH) {
    3102                 :          0 :                 pr_info("blk-mq: reduced tag depth to %u\n",
    3103                 :            :                         BLK_MQ_MAX_DEPTH);
    3104                 :          0 :                 set->queue_depth = BLK_MQ_MAX_DEPTH;
    3105                 :            :         }
    3106                 :            : 
    3107         [ +  - ]:        130 :         if (!set->nr_maps)
    3108                 :        130 :                 set->nr_maps = 1;
    3109         [ #  # ]:          0 :         else if (set->nr_maps > HCTX_MAX_TYPES)
    3110                 :            :                 return -EINVAL;
    3111                 :            : 
    3112                 :            :         /*
    3113                 :            :          * If a crashdump is active, then we are potentially in a very
    3114                 :            :          * memory constrained environment. Limit us to 1 queue and
    3115                 :            :          * 64 tags to prevent using too much memory.
    3116                 :            :          */
    3117         [ -  + ]:        130 :         if (is_kdump_kernel()) {
    3118                 :          0 :                 set->nr_hw_queues = 1;
    3119                 :          0 :                 set->nr_maps = 1;
    3120                 :          0 :                 set->queue_depth = min(64U, set->queue_depth);
    3121                 :            :         }
    3122                 :            :         /*
    3123                 :            :          * There is no use for more h/w queues than cpus if we just have
    3124                 :            :          * a single map
    3125                 :            :          */
    3126   [ +  -  -  + ]:        130 :         if (set->nr_maps == 1 && set->nr_hw_queues > nr_cpu_ids)
    3127                 :          0 :                 set->nr_hw_queues = nr_cpu_ids;
    3128                 :            : 
    3129         [ +  - ]:        130 :         if (blk_mq_realloc_tag_set_tags(set, 0, set->nr_hw_queues) < 0)
    3130                 :            :                 return -ENOMEM;
    3131                 :            : 
    3132                 :            :         ret = -ENOMEM;
    3133         [ +  + ]:        260 :         for (i = 0; i < set->nr_maps; i++) {
    3134                 :        130 :                 set->map[i].mq_map = kcalloc_node(nr_cpu_ids,
    3135                 :            :                                                   sizeof(set->map[i].mq_map[0]),
    3136                 :            :                                                   GFP_KERNEL, set->numa_node);
    3137         [ -  + ]:        130 :                 if (!set->map[i].mq_map)
    3138                 :          0 :                         goto out_free_mq_map;
    3139         [ +  - ]:        130 :                 set->map[i].nr_queues = is_kdump_kernel() ? 1 : set->nr_hw_queues;
    3140                 :            :         }
    3141                 :            : 
    3142                 :        130 :         ret = blk_mq_update_queue_map(set);
    3143         [ -  + ]:        130 :         if (ret)
    3144                 :          0 :                 goto out_free_mq_map;
    3145                 :            : 
    3146                 :        130 :         ret = blk_mq_alloc_rq_maps(set);
    3147         [ -  + ]:        130 :         if (ret)
    3148                 :          0 :                 goto out_free_mq_map;
    3149                 :            : 
    3150                 :        130 :         mutex_init(&set->tag_list_lock);
    3151                 :        130 :         INIT_LIST_HEAD(&set->tag_list);
    3152                 :            : 
    3153                 :        130 :         return 0;
    3154                 :            : 
    3155                 :          0 : out_free_mq_map:
    3156         [ #  # ]:          0 :         for (i = 0; i < set->nr_maps; i++) {
    3157                 :          0 :                 kfree(set->map[i].mq_map);
    3158                 :          0 :                 set->map[i].mq_map = NULL;
    3159                 :            :         }
    3160                 :          0 :         kfree(set->tags);
    3161                 :          0 :         set->tags = NULL;
    3162                 :          0 :         return ret;
    3163                 :            : }
    3164                 :            : EXPORT_SYMBOL(blk_mq_alloc_tag_set);
    3165                 :            : 
    3166                 :          0 : void blk_mq_free_tag_set(struct blk_mq_tag_set *set)
    3167                 :            : {
    3168                 :          0 :         int i, j;
    3169                 :            : 
    3170         [ #  # ]:          0 :         for (i = 0; i < set->nr_hw_queues; i++)
    3171                 :          0 :                 blk_mq_free_map_and_requests(set, i);
    3172                 :            : 
    3173         [ #  # ]:          0 :         for (j = 0; j < set->nr_maps; j++) {
    3174                 :          0 :                 kfree(set->map[j].mq_map);
    3175                 :          0 :                 set->map[j].mq_map = NULL;
    3176                 :            :         }
    3177                 :            : 
    3178                 :          0 :         kfree(set->tags);
    3179                 :          0 :         set->tags = NULL;
    3180                 :          0 : }
    3181                 :            : EXPORT_SYMBOL(blk_mq_free_tag_set);
    3182                 :            : 
    3183                 :          0 : int blk_mq_update_nr_requests(struct request_queue *q, unsigned int nr)
    3184                 :            : {
    3185                 :          0 :         struct blk_mq_tag_set *set = q->tag_set;
    3186                 :          0 :         struct blk_mq_hw_ctx *hctx;
    3187                 :          0 :         int i, ret;
    3188                 :            : 
    3189         [ #  # ]:          0 :         if (!set)
    3190                 :            :                 return -EINVAL;
    3191                 :            : 
    3192         [ #  # ]:          0 :         if (q->nr_requests == nr)
    3193                 :            :                 return 0;
    3194                 :            : 
    3195                 :          0 :         blk_mq_freeze_queue(q);
    3196                 :          0 :         blk_mq_quiesce_queue(q);
    3197                 :            : 
    3198                 :          0 :         ret = 0;
    3199         [ #  # ]:          0 :         queue_for_each_hw_ctx(q, hctx, i) {
    3200         [ #  # ]:          0 :                 if (!hctx->tags)
    3201                 :          0 :                         continue;
    3202                 :            :                 /*
    3203                 :            :                  * If we're using an MQ scheduler, just update the scheduler
    3204                 :            :                  * queue depth. This is similar to what the old code would do.
    3205                 :            :                  */
    3206         [ #  # ]:          0 :                 if (!hctx->sched_tags) {
    3207                 :          0 :                         ret = blk_mq_tag_update_depth(hctx, &hctx->tags, nr,
    3208                 :            :                                                         false);
    3209                 :            :                 } else {
    3210                 :          0 :                         ret = blk_mq_tag_update_depth(hctx, &hctx->sched_tags,
    3211                 :            :                                                         nr, true);
    3212                 :            :                 }
    3213         [ #  # ]:          0 :                 if (ret)
    3214                 :            :                         break;
    3215   [ #  #  #  # ]:          0 :                 if (q->elevator && q->elevator->type->ops.depth_updated)
    3216                 :          0 :                         q->elevator->type->ops.depth_updated(hctx);
    3217                 :            :         }
    3218                 :            : 
    3219         [ #  # ]:          0 :         if (!ret)
    3220                 :          0 :                 q->nr_requests = nr;
    3221                 :            : 
    3222                 :          0 :         blk_mq_unquiesce_queue(q);
    3223                 :          0 :         blk_mq_unfreeze_queue(q);
    3224                 :            : 
    3225                 :          0 :         return ret;
    3226                 :            : }
    3227                 :            : 
    3228                 :            : /*
    3229                 :            :  * request_queue and elevator_type pair.
    3230                 :            :  * It is just used by __blk_mq_update_nr_hw_queues to cache
    3231                 :            :  * the elevator_type associated with a request_queue.
    3232                 :            :  */
    3233                 :            : struct blk_mq_qe_pair {
    3234                 :            :         struct list_head node;
    3235                 :            :         struct request_queue *q;
    3236                 :            :         struct elevator_type *type;
    3237                 :            : };
    3238                 :            : 
    3239                 :            : /*
    3240                 :            :  * Cache the elevator_type in qe pair list and switch the
    3241                 :            :  * io scheduler to 'none'
    3242                 :            :  */
    3243                 :          0 : static bool blk_mq_elv_switch_none(struct list_head *head,
    3244                 :            :                 struct request_queue *q)
    3245                 :            : {
    3246                 :          0 :         struct blk_mq_qe_pair *qe;
    3247                 :            : 
    3248         [ #  # ]:          0 :         if (!q->elevator)
    3249                 :            :                 return true;
    3250                 :            : 
    3251                 :          0 :         qe = kmalloc(sizeof(*qe), GFP_NOIO | __GFP_NOWARN | __GFP_NORETRY);
    3252         [ #  # ]:          0 :         if (!qe)
    3253                 :            :                 return false;
    3254                 :            : 
    3255                 :          0 :         INIT_LIST_HEAD(&qe->node);
    3256                 :          0 :         qe->q = q;
    3257                 :          0 :         qe->type = q->elevator->type;
    3258                 :          0 :         list_add(&qe->node, head);
    3259                 :            : 
    3260                 :          0 :         mutex_lock(&q->sysfs_lock);
    3261                 :            :         /*
    3262                 :            :          * After elevator_switch_mq, the previous elevator_queue will be
    3263                 :            :          * released by elevator_release. The reference of the io scheduler
    3264                 :            :          * module get by elevator_get will also be put. So we need to get
    3265                 :            :          * a reference of the io scheduler module here to prevent it to be
    3266                 :            :          * removed.
    3267                 :            :          */
    3268                 :          0 :         __module_get(qe->type->elevator_owner);
    3269                 :          0 :         elevator_switch_mq(q, NULL);
    3270                 :          0 :         mutex_unlock(&q->sysfs_lock);
    3271                 :            : 
    3272                 :          0 :         return true;
    3273                 :            : }
    3274                 :            : 
    3275                 :          0 : static void blk_mq_elv_switch_back(struct list_head *head,
    3276                 :            :                 struct request_queue *q)
    3277                 :            : {
    3278                 :          0 :         struct blk_mq_qe_pair *qe;
    3279                 :          0 :         struct elevator_type *t = NULL;
    3280                 :            : 
    3281         [ #  # ]:          0 :         list_for_each_entry(qe, head, node)
    3282         [ #  # ]:          0 :                 if (qe->q == q) {
    3283                 :          0 :                         t = qe->type;
    3284                 :          0 :                         break;
    3285                 :            :                 }
    3286                 :            : 
    3287         [ #  # ]:          0 :         if (!t)
    3288                 :            :                 return;
    3289                 :            : 
    3290                 :          0 :         list_del(&qe->node);
    3291                 :          0 :         kfree(qe);
    3292                 :            : 
    3293                 :          0 :         mutex_lock(&q->sysfs_lock);
    3294                 :          0 :         elevator_switch_mq(q, t);
    3295                 :          0 :         mutex_unlock(&q->sysfs_lock);
    3296                 :            : }
    3297                 :            : 
    3298                 :          0 : static void __blk_mq_update_nr_hw_queues(struct blk_mq_tag_set *set,
    3299                 :            :                                                         int nr_hw_queues)
    3300                 :            : {
    3301                 :          0 :         struct request_queue *q;
    3302                 :          0 :         LIST_HEAD(head);
    3303                 :          0 :         int prev_nr_hw_queues;
    3304                 :            : 
    3305                 :          0 :         lockdep_assert_held(&set->tag_list_lock);
    3306                 :            : 
    3307   [ #  #  #  # ]:          0 :         if (set->nr_maps == 1 && nr_hw_queues > nr_cpu_ids)
    3308                 :          0 :                 nr_hw_queues = nr_cpu_ids;
    3309   [ #  #  #  # ]:          0 :         if (nr_hw_queues < 1 || nr_hw_queues == set->nr_hw_queues)
    3310                 :          0 :                 return;
    3311                 :            : 
    3312         [ #  # ]:          0 :         list_for_each_entry(q, &set->tag_list, tag_set_list)
    3313                 :          0 :                 blk_mq_freeze_queue(q);
    3314                 :            :         /*
    3315                 :            :          * Switch IO scheduler to 'none', cleaning up the data associated
    3316                 :            :          * with the previous scheduler. We will switch back once we are done
    3317                 :            :          * updating the new sw to hw queue mappings.
    3318                 :            :          */
    3319         [ #  # ]:          0 :         list_for_each_entry(q, &set->tag_list, tag_set_list)
    3320         [ #  # ]:          0 :                 if (!blk_mq_elv_switch_none(&head, q))
    3321                 :          0 :                         goto switch_back;
    3322                 :            : 
    3323         [ #  # ]:          0 :         list_for_each_entry(q, &set->tag_list, tag_set_list) {
    3324                 :          0 :                 blk_mq_debugfs_unregister_hctxs(q);
    3325                 :          0 :                 blk_mq_sysfs_unregister(q);
    3326                 :            :         }
    3327                 :            : 
    3328         [ #  # ]:          0 :         if (blk_mq_realloc_tag_set_tags(set, set->nr_hw_queues, nr_hw_queues) <
    3329                 :            :             0)
    3330                 :          0 :                 goto reregister;
    3331                 :            : 
    3332                 :          0 :         prev_nr_hw_queues = set->nr_hw_queues;
    3333                 :          0 :         set->nr_hw_queues = nr_hw_queues;
    3334                 :          0 :         blk_mq_update_queue_map(set);
    3335                 :          0 : fallback:
    3336         [ #  # ]:          0 :         list_for_each_entry(q, &set->tag_list, tag_set_list) {
    3337                 :          0 :                 blk_mq_realloc_hw_ctxs(set, q);
    3338         [ #  # ]:          0 :                 if (q->nr_hw_queues != set->nr_hw_queues) {
    3339                 :          0 :                         pr_warn("Increasing nr_hw_queues to %d fails, fallback to %d\n",
    3340                 :            :                                         nr_hw_queues, prev_nr_hw_queues);
    3341                 :          0 :                         set->nr_hw_queues = prev_nr_hw_queues;
    3342                 :          0 :                         blk_mq_map_queues(&set->map[HCTX_TYPE_DEFAULT]);
    3343                 :          0 :                         goto fallback;
    3344                 :            :                 }
    3345                 :          0 :                 blk_mq_map_swqueue(q);
    3346                 :            :         }
    3347                 :            : 
    3348                 :          0 : reregister:
    3349         [ #  # ]:          0 :         list_for_each_entry(q, &set->tag_list, tag_set_list) {
    3350                 :          0 :                 blk_mq_sysfs_register(q);
    3351                 :          0 :                 blk_mq_debugfs_register_hctxs(q);
    3352                 :            :         }
    3353                 :            : 
    3354                 :          0 : switch_back:
    3355         [ #  # ]:          0 :         list_for_each_entry(q, &set->tag_list, tag_set_list)
    3356                 :          0 :                 blk_mq_elv_switch_back(&head, q);
    3357                 :            : 
    3358         [ #  # ]:          0 :         list_for_each_entry(q, &set->tag_list, tag_set_list)
    3359                 :          0 :                 blk_mq_unfreeze_queue(q);
    3360                 :            : }
    3361                 :            : 
    3362                 :          0 : void blk_mq_update_nr_hw_queues(struct blk_mq_tag_set *set, int nr_hw_queues)
    3363                 :            : {
    3364                 :          0 :         mutex_lock(&set->tag_list_lock);
    3365                 :          0 :         __blk_mq_update_nr_hw_queues(set, nr_hw_queues);
    3366                 :          0 :         mutex_unlock(&set->tag_list_lock);
    3367                 :          0 : }
    3368                 :            : EXPORT_SYMBOL_GPL(blk_mq_update_nr_hw_queues);
    3369                 :            : 
    3370                 :            : /* Enable polling stats and return whether they were already enabled. */
    3371                 :          0 : static bool blk_poll_stats_enable(struct request_queue *q)
    3372                 :            : {
    3373   [ #  #  #  # ]:          0 :         if (test_bit(QUEUE_FLAG_POLL_STATS, &q->queue_flags) ||
    3374                 :          0 :             blk_queue_flag_test_and_set(QUEUE_FLAG_POLL_STATS, q))
    3375                 :          0 :                 return true;
    3376                 :          0 :         blk_stat_add_callback(q, q->poll_cb);
    3377                 :          0 :         return false;
    3378                 :            : }
    3379                 :            : 
    3380                 :          0 : static void blk_mq_poll_stats_start(struct request_queue *q)
    3381                 :            : {
    3382                 :            :         /*
    3383                 :            :          * We don't arm the callback if polling stats are not enabled or the
    3384                 :            :          * callback is already active.
    3385                 :            :          */
    3386   [ #  #  #  # ]:          0 :         if (!test_bit(QUEUE_FLAG_POLL_STATS, &q->queue_flags) ||
    3387         [ #  # ]:          0 :             blk_stat_is_active(q->poll_cb))
    3388                 :            :                 return;
    3389                 :            : 
    3390                 :          0 :         blk_stat_activate_msecs(q->poll_cb, 100);
    3391                 :            : }
    3392                 :            : 
    3393                 :          0 : static void blk_mq_poll_stats_fn(struct blk_stat_callback *cb)
    3394                 :            : {
    3395                 :          0 :         struct request_queue *q = cb->data;
    3396                 :          0 :         int bucket;
    3397                 :            : 
    3398         [ #  # ]:          0 :         for (bucket = 0; bucket < BLK_MQ_POLL_STATS_BKTS; bucket++) {
    3399         [ #  # ]:          0 :                 if (cb->stat[bucket].nr_samples)
    3400                 :          0 :                         q->poll_stat[bucket] = cb->stat[bucket];
    3401                 :            :         }
    3402                 :          0 : }
    3403                 :            : 
    3404                 :          0 : static unsigned long blk_mq_poll_nsecs(struct request_queue *q,
    3405                 :            :                                        struct request *rq)
    3406                 :            : {
    3407                 :          0 :         unsigned long ret = 0;
    3408                 :          0 :         int bucket;
    3409                 :            : 
    3410                 :            :         /*
    3411                 :            :          * If stats collection isn't on, don't sleep but turn it on for
    3412                 :            :          * future users
    3413                 :            :          */
    3414         [ #  # ]:          0 :         if (!blk_poll_stats_enable(q))
    3415                 :            :                 return 0;
    3416                 :            : 
    3417                 :            :         /*
    3418                 :            :          * As an optimistic guess, use half of the mean service time
    3419                 :            :          * for this type of request. We can (and should) make this smarter.
    3420                 :            :          * For instance, if the completion latencies are tight, we can
    3421                 :            :          * get closer than just half the mean. This is especially
    3422                 :            :          * important on devices where the completion latencies are longer
    3423                 :            :          * than ~10 usec. We do use the stats for the relevant IO size
    3424                 :            :          * if available which does lead to better estimates.
    3425                 :            :          */
    3426                 :          0 :         bucket = blk_mq_poll_stats_bkt(rq);
    3427         [ #  # ]:          0 :         if (bucket < 0)
    3428                 :            :                 return ret;
    3429                 :            : 
    3430         [ #  # ]:          0 :         if (q->poll_stat[bucket].nr_samples)
    3431                 :          0 :                 ret = (q->poll_stat[bucket].mean + 1) / 2;
    3432                 :            : 
    3433                 :            :         return ret;
    3434                 :            : }
    3435                 :            : 
    3436                 :          0 : static bool blk_mq_poll_hybrid_sleep(struct request_queue *q,
    3437                 :            :                                      struct request *rq)
    3438                 :            : {
    3439                 :          0 :         struct hrtimer_sleeper hs;
    3440                 :          0 :         enum hrtimer_mode mode;
    3441                 :          0 :         unsigned int nsecs;
    3442                 :          0 :         ktime_t kt;
    3443                 :            : 
    3444         [ #  # ]:          0 :         if (rq->rq_flags & RQF_MQ_POLL_SLEPT)
    3445                 :            :                 return false;
    3446                 :            : 
    3447                 :            :         /*
    3448                 :            :          * If we get here, hybrid polling is enabled. Hence poll_nsec can be:
    3449                 :            :          *
    3450                 :            :          *  0:  use half of prev avg
    3451                 :            :          * >0:       use this specific value
    3452                 :            :          */
    3453         [ #  # ]:          0 :         if (q->poll_nsec > 0)
    3454                 :          0 :                 nsecs = q->poll_nsec;
    3455                 :            :         else
    3456                 :          0 :                 nsecs = blk_mq_poll_nsecs(q, rq);
    3457                 :            : 
    3458         [ #  # ]:          0 :         if (!nsecs)
    3459                 :            :                 return false;
    3460                 :            : 
    3461                 :          0 :         rq->rq_flags |= RQF_MQ_POLL_SLEPT;
    3462                 :            : 
    3463                 :            :         /*
    3464                 :            :          * This will be replaced with the stats tracking code, using
    3465                 :            :          * 'avg_completion_time / 2' as the pre-sleep target.
    3466                 :            :          */
    3467                 :          0 :         kt = nsecs;
    3468                 :            : 
    3469                 :          0 :         mode = HRTIMER_MODE_REL;
    3470                 :          0 :         hrtimer_init_sleeper_on_stack(&hs, CLOCK_MONOTONIC, mode);
    3471                 :          0 :         hrtimer_set_expires(&hs.timer, kt);
    3472                 :            : 
    3473                 :          0 :         do {
    3474         [ #  # ]:          0 :                 if (blk_mq_rq_state(rq) == MQ_RQ_COMPLETE)
    3475                 :            :                         break;
    3476                 :          0 :                 set_current_state(TASK_UNINTERRUPTIBLE);
    3477                 :          0 :                 hrtimer_sleeper_start_expires(&hs, mode);
    3478         [ #  # ]:          0 :                 if (hs.task)
    3479                 :          0 :                         io_schedule();
    3480                 :          0 :                 hrtimer_cancel(&hs.timer);
    3481                 :          0 :                 mode = HRTIMER_MODE_ABS;
    3482   [ #  #  #  # ]:          0 :         } while (hs.task && !signal_pending(current));
    3483                 :            : 
    3484                 :          0 :         __set_current_state(TASK_RUNNING);
    3485                 :          0 :         destroy_hrtimer_on_stack(&hs.timer);
    3486                 :          0 :         return true;
    3487                 :            : }
    3488                 :            : 
    3489                 :            : static bool blk_mq_poll_hybrid(struct request_queue *q,
    3490                 :            :                                struct blk_mq_hw_ctx *hctx, blk_qc_t cookie)
    3491                 :            : {
    3492                 :            :         struct request *rq;
    3493                 :            : 
    3494                 :            :         if (q->poll_nsec == BLK_MQ_POLL_CLASSIC)
    3495                 :            :                 return false;
    3496                 :            : 
    3497                 :            :         if (!blk_qc_t_is_internal(cookie))
    3498                 :            :                 rq = blk_mq_tag_to_rq(hctx->tags, blk_qc_t_to_tag(cookie));
    3499                 :            :         else {
    3500                 :            :                 rq = blk_mq_tag_to_rq(hctx->sched_tags, blk_qc_t_to_tag(cookie));
    3501                 :            :                 /*
    3502                 :            :                  * With scheduling, if the request has completed, we'll
    3503                 :            :                  * get a NULL return here, as we clear the sched tag when
    3504                 :            :                  * that happens. The request still remains valid, like always,
    3505                 :            :                  * so we should be safe with just the NULL check.
    3506                 :            :                  */
    3507                 :            :                 if (!rq)
    3508                 :            :                         return false;
    3509                 :            :         }
    3510                 :            : 
    3511                 :            :         return blk_mq_poll_hybrid_sleep(q, rq);
    3512                 :            : }
    3513                 :            : 
    3514                 :            : /**
    3515                 :            :  * blk_poll - poll for IO completions
    3516                 :            :  * @q:  the queue
    3517                 :            :  * @cookie: cookie passed back at IO submission time
    3518                 :            :  * @spin: whether to spin for completions
    3519                 :            :  *
    3520                 :            :  * Description:
    3521                 :            :  *    Poll for completions on the passed in queue. Returns number of
    3522                 :            :  *    completed entries found. If @spin is true, then blk_poll will continue
    3523                 :            :  *    looping until at least one completion is found, unless the task is
    3524                 :            :  *    otherwise marked running (or we need to reschedule).
    3525                 :            :  */
    3526                 :          0 : int blk_poll(struct request_queue *q, blk_qc_t cookie, bool spin)
    3527                 :            : {
    3528                 :          0 :         struct blk_mq_hw_ctx *hctx;
    3529                 :          0 :         long state;
    3530                 :            : 
    3531   [ #  #  #  # ]:          0 :         if (!blk_qc_t_valid(cookie) ||
    3532                 :          0 :             !test_bit(QUEUE_FLAG_POLL, &q->queue_flags))
    3533                 :          0 :                 return 0;
    3534                 :            : 
    3535         [ #  # ]:          0 :         if (current->plug)
    3536                 :          0 :                 blk_flush_plug_list(current->plug, false);
    3537                 :            : 
    3538                 :          0 :         hctx = q->queue_hw_ctx[blk_qc_t_to_queue_num(cookie)];
    3539                 :            : 
    3540                 :            :         /*
    3541                 :            :          * If we sleep, have the caller restart the poll loop to reset
    3542                 :            :          * the state. Like for the other success return cases, the
    3543                 :            :          * caller is responsible for checking if the IO completed. If
    3544                 :            :          * the IO isn't complete, we'll get called again and will go
    3545                 :            :          * straight to the busy poll loop.
    3546                 :            :          */
    3547         [ #  # ]:          0 :         if (blk_mq_poll_hybrid(q, hctx, cookie))
    3548                 :            :                 return 1;
    3549                 :            : 
    3550                 :          0 :         hctx->poll_considered++;
    3551                 :            : 
    3552                 :          0 :         state = current->state;
    3553                 :          0 :         do {
    3554                 :          0 :                 int ret;
    3555                 :            : 
    3556                 :          0 :                 hctx->poll_invoked++;
    3557                 :            : 
    3558                 :          0 :                 ret = q->mq_ops->poll(hctx);
    3559         [ #  # ]:          0 :                 if (ret > 0) {
    3560                 :          0 :                         hctx->poll_success++;
    3561                 :          0 :                         __set_current_state(TASK_RUNNING);
    3562                 :          0 :                         return ret;
    3563                 :            :                 }
    3564                 :            : 
    3565         [ #  # ]:          0 :                 if (signal_pending_state(state, current))
    3566                 :          0 :                         __set_current_state(TASK_RUNNING);
    3567                 :            : 
    3568         [ #  # ]:          0 :                 if (current->state == TASK_RUNNING)
    3569                 :            :                         return 1;
    3570         [ #  # ]:          0 :                 if (ret < 0 || !spin)
    3571                 :            :                         break;
    3572                 :          0 :                 cpu_relax();
    3573         [ #  # ]:          0 :         } while (!need_resched());
    3574                 :            : 
    3575                 :          0 :         __set_current_state(TASK_RUNNING);
    3576                 :          0 :         return 0;
    3577                 :            : }
    3578                 :            : EXPORT_SYMBOL_GPL(blk_poll);
    3579                 :            : 
    3580                 :          0 : unsigned int blk_mq_rq_cpu(struct request *rq)
    3581                 :            : {
    3582                 :          0 :         return rq->mq_ctx->cpu;
    3583                 :            : }
    3584                 :            : EXPORT_SYMBOL(blk_mq_rq_cpu);
    3585                 :            : 
    3586                 :         13 : static int __init blk_mq_init(void)
    3587                 :            : {
    3588                 :         13 :         cpuhp_setup_state_multi(CPUHP_BLK_MQ_DEAD, "block/mq:dead", NULL,
    3589                 :            :                                 blk_mq_hctx_notify_dead);
    3590                 :         13 :         return 0;
    3591                 :            : }
    3592                 :            : subsys_initcall(blk_mq_init);

Generated by: LCOV version 1.14