LCOV - code coverage report
Current view: top level - block - blk-mq.c (source / functions) Hit Total Coverage
Test: gcov_data_raspi2_qemu_modules_combined.info Lines: 552 1331 41.5 %
Date: 2020-09-30 20:25:01 Functions: 52 128 40.6 %
Branches: 287 1163 24.7 %

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

Generated by: LCOV version 1.14