1320ae51fSJens Axboe #include <linux/kernel.h> 2320ae51fSJens Axboe #include <linux/module.h> 3320ae51fSJens Axboe #include <linux/backing-dev.h> 4320ae51fSJens Axboe #include <linux/bio.h> 5320ae51fSJens Axboe #include <linux/blkdev.h> 6320ae51fSJens Axboe #include <linux/mm.h> 7320ae51fSJens Axboe #include <linux/init.h> 8320ae51fSJens Axboe #include <linux/slab.h> 9320ae51fSJens Axboe #include <linux/workqueue.h> 10320ae51fSJens Axboe #include <linux/smp.h> 11320ae51fSJens Axboe #include <linux/llist.h> 12320ae51fSJens Axboe #include <linux/list_sort.h> 13320ae51fSJens Axboe #include <linux/cpu.h> 14320ae51fSJens Axboe #include <linux/cache.h> 15320ae51fSJens Axboe #include <linux/sched/sysctl.h> 16320ae51fSJens Axboe #include <linux/delay.h> 17320ae51fSJens Axboe 18320ae51fSJens Axboe #include <trace/events/block.h> 19320ae51fSJens Axboe 20320ae51fSJens Axboe #include <linux/blk-mq.h> 21320ae51fSJens Axboe #include "blk.h" 22320ae51fSJens Axboe #include "blk-mq.h" 23320ae51fSJens Axboe #include "blk-mq-tag.h" 24320ae51fSJens Axboe 25320ae51fSJens Axboe static DEFINE_MUTEX(all_q_mutex); 26320ae51fSJens Axboe static LIST_HEAD(all_q_list); 27320ae51fSJens Axboe 28320ae51fSJens Axboe static void __blk_mq_run_hw_queue(struct blk_mq_hw_ctx *hctx); 29320ae51fSJens Axboe 30320ae51fSJens Axboe DEFINE_PER_CPU(struct llist_head, ipi_lists); 31320ae51fSJens Axboe 32320ae51fSJens Axboe static struct blk_mq_ctx *__blk_mq_get_ctx(struct request_queue *q, 33320ae51fSJens Axboe unsigned int cpu) 34320ae51fSJens Axboe { 35320ae51fSJens Axboe return per_cpu_ptr(q->queue_ctx, cpu); 36320ae51fSJens Axboe } 37320ae51fSJens Axboe 38320ae51fSJens Axboe /* 39320ae51fSJens Axboe * This assumes per-cpu software queueing queues. They could be per-node 40320ae51fSJens Axboe * as well, for instance. For now this is hardcoded as-is. Note that we don't 41320ae51fSJens Axboe * care about preemption, since we know the ctx's are persistent. This does 42320ae51fSJens Axboe * mean that we can't rely on ctx always matching the currently running CPU. 43320ae51fSJens Axboe */ 44320ae51fSJens Axboe static struct blk_mq_ctx *blk_mq_get_ctx(struct request_queue *q) 45320ae51fSJens Axboe { 46320ae51fSJens Axboe return __blk_mq_get_ctx(q, get_cpu()); 47320ae51fSJens Axboe } 48320ae51fSJens Axboe 49320ae51fSJens Axboe static void blk_mq_put_ctx(struct blk_mq_ctx *ctx) 50320ae51fSJens Axboe { 51320ae51fSJens Axboe put_cpu(); 52320ae51fSJens Axboe } 53320ae51fSJens Axboe 54320ae51fSJens Axboe /* 55320ae51fSJens Axboe * Check if any of the ctx's have pending work in this hardware queue 56320ae51fSJens Axboe */ 57320ae51fSJens Axboe static bool blk_mq_hctx_has_pending(struct blk_mq_hw_ctx *hctx) 58320ae51fSJens Axboe { 59320ae51fSJens Axboe unsigned int i; 60320ae51fSJens Axboe 61320ae51fSJens Axboe for (i = 0; i < hctx->nr_ctx_map; i++) 62320ae51fSJens Axboe if (hctx->ctx_map[i]) 63320ae51fSJens Axboe return true; 64320ae51fSJens Axboe 65320ae51fSJens Axboe return false; 66320ae51fSJens Axboe } 67320ae51fSJens Axboe 68320ae51fSJens Axboe /* 69320ae51fSJens Axboe * Mark this ctx as having pending work in this hardware queue 70320ae51fSJens Axboe */ 71320ae51fSJens Axboe static void blk_mq_hctx_mark_pending(struct blk_mq_hw_ctx *hctx, 72320ae51fSJens Axboe struct blk_mq_ctx *ctx) 73320ae51fSJens Axboe { 74320ae51fSJens Axboe if (!test_bit(ctx->index_hw, hctx->ctx_map)) 75320ae51fSJens Axboe set_bit(ctx->index_hw, hctx->ctx_map); 76320ae51fSJens Axboe } 77320ae51fSJens Axboe 78320ae51fSJens Axboe static struct request *blk_mq_alloc_rq(struct blk_mq_hw_ctx *hctx, gfp_t gfp, 79320ae51fSJens Axboe bool reserved) 80320ae51fSJens Axboe { 81320ae51fSJens Axboe struct request *rq; 82320ae51fSJens Axboe unsigned int tag; 83320ae51fSJens Axboe 84320ae51fSJens Axboe tag = blk_mq_get_tag(hctx->tags, gfp, reserved); 85320ae51fSJens Axboe if (tag != BLK_MQ_TAG_FAIL) { 86320ae51fSJens Axboe rq = hctx->rqs[tag]; 87320ae51fSJens Axboe rq->tag = tag; 88320ae51fSJens Axboe 89320ae51fSJens Axboe return rq; 90320ae51fSJens Axboe } 91320ae51fSJens Axboe 92320ae51fSJens Axboe return NULL; 93320ae51fSJens Axboe } 94320ae51fSJens Axboe 95320ae51fSJens Axboe static int blk_mq_queue_enter(struct request_queue *q) 96320ae51fSJens Axboe { 97320ae51fSJens Axboe int ret; 98320ae51fSJens Axboe 99320ae51fSJens Axboe __percpu_counter_add(&q->mq_usage_counter, 1, 1000000); 100320ae51fSJens Axboe smp_wmb(); 101320ae51fSJens Axboe /* we have problems to freeze the queue if it's initializing */ 102320ae51fSJens Axboe if (!blk_queue_bypass(q) || !blk_queue_init_done(q)) 103320ae51fSJens Axboe return 0; 104320ae51fSJens Axboe 105320ae51fSJens Axboe __percpu_counter_add(&q->mq_usage_counter, -1, 1000000); 106320ae51fSJens Axboe 107320ae51fSJens Axboe spin_lock_irq(q->queue_lock); 108320ae51fSJens Axboe ret = wait_event_interruptible_lock_irq(q->mq_freeze_wq, 109320ae51fSJens Axboe !blk_queue_bypass(q), *q->queue_lock); 110320ae51fSJens Axboe /* inc usage with lock hold to avoid freeze_queue runs here */ 111320ae51fSJens Axboe if (!ret) 112320ae51fSJens Axboe __percpu_counter_add(&q->mq_usage_counter, 1, 1000000); 113320ae51fSJens Axboe spin_unlock_irq(q->queue_lock); 114320ae51fSJens Axboe 115320ae51fSJens Axboe return ret; 116320ae51fSJens Axboe } 117320ae51fSJens Axboe 118320ae51fSJens Axboe static void blk_mq_queue_exit(struct request_queue *q) 119320ae51fSJens Axboe { 120320ae51fSJens Axboe __percpu_counter_add(&q->mq_usage_counter, -1, 1000000); 121320ae51fSJens Axboe } 122320ae51fSJens Axboe 123320ae51fSJens Axboe /* 124320ae51fSJens Axboe * Guarantee no request is in use, so we can change any data structure of 125320ae51fSJens Axboe * the queue afterward. 126320ae51fSJens Axboe */ 127320ae51fSJens Axboe static void blk_mq_freeze_queue(struct request_queue *q) 128320ae51fSJens Axboe { 129320ae51fSJens Axboe bool drain; 130320ae51fSJens Axboe 131320ae51fSJens Axboe spin_lock_irq(q->queue_lock); 132320ae51fSJens Axboe drain = !q->bypass_depth++; 133320ae51fSJens Axboe queue_flag_set(QUEUE_FLAG_BYPASS, q); 134320ae51fSJens Axboe spin_unlock_irq(q->queue_lock); 135320ae51fSJens Axboe 136320ae51fSJens Axboe if (!drain) 137320ae51fSJens Axboe return; 138320ae51fSJens Axboe 139320ae51fSJens Axboe while (true) { 140320ae51fSJens Axboe s64 count; 141320ae51fSJens Axboe 142320ae51fSJens Axboe spin_lock_irq(q->queue_lock); 143320ae51fSJens Axboe count = percpu_counter_sum(&q->mq_usage_counter); 144320ae51fSJens Axboe spin_unlock_irq(q->queue_lock); 145320ae51fSJens Axboe 146320ae51fSJens Axboe if (count == 0) 147320ae51fSJens Axboe break; 148320ae51fSJens Axboe blk_mq_run_queues(q, false); 149320ae51fSJens Axboe msleep(10); 150320ae51fSJens Axboe } 151320ae51fSJens Axboe } 152320ae51fSJens Axboe 153320ae51fSJens Axboe static void blk_mq_unfreeze_queue(struct request_queue *q) 154320ae51fSJens Axboe { 155320ae51fSJens Axboe bool wake = false; 156320ae51fSJens Axboe 157320ae51fSJens Axboe spin_lock_irq(q->queue_lock); 158320ae51fSJens Axboe if (!--q->bypass_depth) { 159320ae51fSJens Axboe queue_flag_clear(QUEUE_FLAG_BYPASS, q); 160320ae51fSJens Axboe wake = true; 161320ae51fSJens Axboe } 162320ae51fSJens Axboe WARN_ON_ONCE(q->bypass_depth < 0); 163320ae51fSJens Axboe spin_unlock_irq(q->queue_lock); 164320ae51fSJens Axboe if (wake) 165320ae51fSJens Axboe wake_up_all(&q->mq_freeze_wq); 166320ae51fSJens Axboe } 167320ae51fSJens Axboe 168320ae51fSJens Axboe bool blk_mq_can_queue(struct blk_mq_hw_ctx *hctx) 169320ae51fSJens Axboe { 170320ae51fSJens Axboe return blk_mq_has_free_tags(hctx->tags); 171320ae51fSJens Axboe } 172320ae51fSJens Axboe EXPORT_SYMBOL(blk_mq_can_queue); 173320ae51fSJens Axboe 174*94eddfbeSJens Axboe static void blk_mq_rq_ctx_init(struct request_queue *q, struct blk_mq_ctx *ctx, 175*94eddfbeSJens Axboe struct request *rq, unsigned int rw_flags) 176320ae51fSJens Axboe { 177*94eddfbeSJens Axboe if (blk_queue_io_stat(q)) 178*94eddfbeSJens Axboe rw_flags |= REQ_IO_STAT; 179*94eddfbeSJens Axboe 180320ae51fSJens Axboe rq->mq_ctx = ctx; 181320ae51fSJens Axboe rq->cmd_flags = rw_flags; 182320ae51fSJens Axboe ctx->rq_dispatched[rw_is_sync(rw_flags)]++; 183320ae51fSJens Axboe } 184320ae51fSJens Axboe 185320ae51fSJens Axboe static struct request *__blk_mq_alloc_request(struct blk_mq_hw_ctx *hctx, 186320ae51fSJens Axboe gfp_t gfp, bool reserved) 187320ae51fSJens Axboe { 188320ae51fSJens Axboe return blk_mq_alloc_rq(hctx, gfp, reserved); 189320ae51fSJens Axboe } 190320ae51fSJens Axboe 191320ae51fSJens Axboe static struct request *blk_mq_alloc_request_pinned(struct request_queue *q, 192320ae51fSJens Axboe int rw, gfp_t gfp, 193320ae51fSJens Axboe bool reserved) 194320ae51fSJens Axboe { 195320ae51fSJens Axboe struct request *rq; 196320ae51fSJens Axboe 197320ae51fSJens Axboe do { 198320ae51fSJens Axboe struct blk_mq_ctx *ctx = blk_mq_get_ctx(q); 199320ae51fSJens Axboe struct blk_mq_hw_ctx *hctx = q->mq_ops->map_queue(q, ctx->cpu); 200320ae51fSJens Axboe 201320ae51fSJens Axboe rq = __blk_mq_alloc_request(hctx, gfp & ~__GFP_WAIT, reserved); 202320ae51fSJens Axboe if (rq) { 203*94eddfbeSJens Axboe blk_mq_rq_ctx_init(q, ctx, rq, rw); 204320ae51fSJens Axboe break; 205320ae51fSJens Axboe } else if (!(gfp & __GFP_WAIT)) 206320ae51fSJens Axboe break; 207320ae51fSJens Axboe 208320ae51fSJens Axboe blk_mq_put_ctx(ctx); 209320ae51fSJens Axboe __blk_mq_run_hw_queue(hctx); 210320ae51fSJens Axboe blk_mq_wait_for_tags(hctx->tags); 211320ae51fSJens Axboe } while (1); 212320ae51fSJens Axboe 213320ae51fSJens Axboe return rq; 214320ae51fSJens Axboe } 215320ae51fSJens Axboe 2163228f48bSChristoph Hellwig struct request *blk_mq_alloc_request(struct request_queue *q, int rw, 2173228f48bSChristoph Hellwig gfp_t gfp, bool reserved) 218320ae51fSJens Axboe { 219320ae51fSJens Axboe struct request *rq; 220320ae51fSJens Axboe 221320ae51fSJens Axboe if (blk_mq_queue_enter(q)) 222320ae51fSJens Axboe return NULL; 223320ae51fSJens Axboe 2243228f48bSChristoph Hellwig rq = blk_mq_alloc_request_pinned(q, rw, gfp, reserved); 225320ae51fSJens Axboe blk_mq_put_ctx(rq->mq_ctx); 226320ae51fSJens Axboe return rq; 227320ae51fSJens Axboe } 228320ae51fSJens Axboe 229320ae51fSJens Axboe struct request *blk_mq_alloc_reserved_request(struct request_queue *q, int rw, 230320ae51fSJens Axboe gfp_t gfp) 231320ae51fSJens Axboe { 232320ae51fSJens Axboe struct request *rq; 233320ae51fSJens Axboe 234320ae51fSJens Axboe if (blk_mq_queue_enter(q)) 235320ae51fSJens Axboe return NULL; 236320ae51fSJens Axboe 237320ae51fSJens Axboe rq = blk_mq_alloc_request_pinned(q, rw, gfp, true); 238320ae51fSJens Axboe blk_mq_put_ctx(rq->mq_ctx); 239320ae51fSJens Axboe return rq; 240320ae51fSJens Axboe } 241320ae51fSJens Axboe EXPORT_SYMBOL(blk_mq_alloc_reserved_request); 242320ae51fSJens Axboe 243320ae51fSJens Axboe /* 244320ae51fSJens Axboe * Re-init and set pdu, if we have it 245320ae51fSJens Axboe */ 246320ae51fSJens Axboe static void blk_mq_rq_init(struct blk_mq_hw_ctx *hctx, struct request *rq) 247320ae51fSJens Axboe { 248320ae51fSJens Axboe blk_rq_init(hctx->queue, rq); 249320ae51fSJens Axboe 250320ae51fSJens Axboe if (hctx->cmd_size) 251320ae51fSJens Axboe rq->special = blk_mq_rq_to_pdu(rq); 252320ae51fSJens Axboe } 253320ae51fSJens Axboe 254320ae51fSJens Axboe static void __blk_mq_free_request(struct blk_mq_hw_ctx *hctx, 255320ae51fSJens Axboe struct blk_mq_ctx *ctx, struct request *rq) 256320ae51fSJens Axboe { 257320ae51fSJens Axboe const int tag = rq->tag; 258320ae51fSJens Axboe struct request_queue *q = rq->q; 259320ae51fSJens Axboe 260320ae51fSJens Axboe blk_mq_rq_init(hctx, rq); 261320ae51fSJens Axboe blk_mq_put_tag(hctx->tags, tag); 262320ae51fSJens Axboe 263320ae51fSJens Axboe blk_mq_queue_exit(q); 264320ae51fSJens Axboe } 265320ae51fSJens Axboe 266320ae51fSJens Axboe void blk_mq_free_request(struct request *rq) 267320ae51fSJens Axboe { 268320ae51fSJens Axboe struct blk_mq_ctx *ctx = rq->mq_ctx; 269320ae51fSJens Axboe struct blk_mq_hw_ctx *hctx; 270320ae51fSJens Axboe struct request_queue *q = rq->q; 271320ae51fSJens Axboe 272320ae51fSJens Axboe ctx->rq_completed[rq_is_sync(rq)]++; 273320ae51fSJens Axboe 274320ae51fSJens Axboe hctx = q->mq_ops->map_queue(q, ctx->cpu); 275320ae51fSJens Axboe __blk_mq_free_request(hctx, ctx, rq); 276320ae51fSJens Axboe } 277320ae51fSJens Axboe 278320ae51fSJens Axboe static void blk_mq_bio_endio(struct request *rq, struct bio *bio, int error) 279320ae51fSJens Axboe { 280320ae51fSJens Axboe if (error) 281320ae51fSJens Axboe clear_bit(BIO_UPTODATE, &bio->bi_flags); 282320ae51fSJens Axboe else if (!test_bit(BIO_UPTODATE, &bio->bi_flags)) 283320ae51fSJens Axboe error = -EIO; 284320ae51fSJens Axboe 285320ae51fSJens Axboe if (unlikely(rq->cmd_flags & REQ_QUIET)) 286320ae51fSJens Axboe set_bit(BIO_QUIET, &bio->bi_flags); 287320ae51fSJens Axboe 288320ae51fSJens Axboe /* don't actually finish bio if it's part of flush sequence */ 289320ae51fSJens Axboe if (!(rq->cmd_flags & REQ_FLUSH_SEQ)) 290320ae51fSJens Axboe bio_endio(bio, error); 291320ae51fSJens Axboe } 292320ae51fSJens Axboe 293320ae51fSJens Axboe void blk_mq_complete_request(struct request *rq, int error) 294320ae51fSJens Axboe { 295320ae51fSJens Axboe struct bio *bio = rq->bio; 296320ae51fSJens Axboe unsigned int bytes = 0; 297320ae51fSJens Axboe 298320ae51fSJens Axboe trace_block_rq_complete(rq->q, rq); 299320ae51fSJens Axboe 300320ae51fSJens Axboe while (bio) { 301320ae51fSJens Axboe struct bio *next = bio->bi_next; 302320ae51fSJens Axboe 303320ae51fSJens Axboe bio->bi_next = NULL; 304320ae51fSJens Axboe bytes += bio->bi_size; 305320ae51fSJens Axboe blk_mq_bio_endio(rq, bio, error); 306320ae51fSJens Axboe bio = next; 307320ae51fSJens Axboe } 308320ae51fSJens Axboe 309320ae51fSJens Axboe blk_account_io_completion(rq, bytes); 310320ae51fSJens Axboe 311320ae51fSJens Axboe if (rq->end_io) 312320ae51fSJens Axboe rq->end_io(rq, error); 313320ae51fSJens Axboe else 314320ae51fSJens Axboe blk_mq_free_request(rq); 315320ae51fSJens Axboe 316320ae51fSJens Axboe blk_account_io_done(rq); 317320ae51fSJens Axboe } 318320ae51fSJens Axboe 319320ae51fSJens Axboe void __blk_mq_end_io(struct request *rq, int error) 320320ae51fSJens Axboe { 321320ae51fSJens Axboe if (!blk_mark_rq_complete(rq)) 322320ae51fSJens Axboe blk_mq_complete_request(rq, error); 323320ae51fSJens Axboe } 324320ae51fSJens Axboe 3250a06ff06SChristoph Hellwig #if defined(CONFIG_SMP) 326320ae51fSJens Axboe 327320ae51fSJens Axboe /* 328320ae51fSJens Axboe * Called with interrupts disabled. 329320ae51fSJens Axboe */ 330320ae51fSJens Axboe static void ipi_end_io(void *data) 331320ae51fSJens Axboe { 332320ae51fSJens Axboe struct llist_head *list = &per_cpu(ipi_lists, smp_processor_id()); 333320ae51fSJens Axboe struct llist_node *entry, *next; 334320ae51fSJens Axboe struct request *rq; 335320ae51fSJens Axboe 336320ae51fSJens Axboe entry = llist_del_all(list); 337320ae51fSJens Axboe 338320ae51fSJens Axboe while (entry) { 339320ae51fSJens Axboe next = entry->next; 340320ae51fSJens Axboe rq = llist_entry(entry, struct request, ll_list); 341320ae51fSJens Axboe __blk_mq_end_io(rq, rq->errors); 342320ae51fSJens Axboe entry = next; 343320ae51fSJens Axboe } 344320ae51fSJens Axboe } 345320ae51fSJens Axboe 346320ae51fSJens Axboe static int ipi_remote_cpu(struct blk_mq_ctx *ctx, const int cpu, 347320ae51fSJens Axboe struct request *rq, const int error) 348320ae51fSJens Axboe { 349320ae51fSJens Axboe struct call_single_data *data = &rq->csd; 350320ae51fSJens Axboe 351320ae51fSJens Axboe rq->errors = error; 352320ae51fSJens Axboe rq->ll_list.next = NULL; 353320ae51fSJens Axboe 354320ae51fSJens Axboe /* 355320ae51fSJens Axboe * If the list is non-empty, an existing IPI must already 356320ae51fSJens Axboe * be "in flight". If that is the case, we need not schedule 357320ae51fSJens Axboe * a new one. 358320ae51fSJens Axboe */ 359320ae51fSJens Axboe if (llist_add(&rq->ll_list, &per_cpu(ipi_lists, ctx->cpu))) { 360320ae51fSJens Axboe data->func = ipi_end_io; 361320ae51fSJens Axboe data->flags = 0; 362320ae51fSJens Axboe __smp_call_function_single(ctx->cpu, data, 0); 363320ae51fSJens Axboe } 364320ae51fSJens Axboe 365320ae51fSJens Axboe return true; 366320ae51fSJens Axboe } 3670a06ff06SChristoph Hellwig #else /* CONFIG_SMP */ 368320ae51fSJens Axboe static int ipi_remote_cpu(struct blk_mq_ctx *ctx, const int cpu, 369320ae51fSJens Axboe struct request *rq, const int error) 370320ae51fSJens Axboe { 371320ae51fSJens Axboe return false; 372320ae51fSJens Axboe } 373320ae51fSJens Axboe #endif 374320ae51fSJens Axboe 375320ae51fSJens Axboe /* 376320ae51fSJens Axboe * End IO on this request on a multiqueue enabled driver. We'll either do 377320ae51fSJens Axboe * it directly inline, or punt to a local IPI handler on the matching 378320ae51fSJens Axboe * remote CPU. 379320ae51fSJens Axboe */ 380320ae51fSJens Axboe void blk_mq_end_io(struct request *rq, int error) 381320ae51fSJens Axboe { 382320ae51fSJens Axboe struct blk_mq_ctx *ctx = rq->mq_ctx; 383320ae51fSJens Axboe int cpu; 384320ae51fSJens Axboe 385320ae51fSJens Axboe if (!ctx->ipi_redirect) 386320ae51fSJens Axboe return __blk_mq_end_io(rq, error); 387320ae51fSJens Axboe 388320ae51fSJens Axboe cpu = get_cpu(); 389320ae51fSJens Axboe 390320ae51fSJens Axboe if (cpu == ctx->cpu || !cpu_online(ctx->cpu) || 391320ae51fSJens Axboe !ipi_remote_cpu(ctx, cpu, rq, error)) 392320ae51fSJens Axboe __blk_mq_end_io(rq, error); 393320ae51fSJens Axboe 394320ae51fSJens Axboe put_cpu(); 395320ae51fSJens Axboe } 396320ae51fSJens Axboe EXPORT_SYMBOL(blk_mq_end_io); 397320ae51fSJens Axboe 398320ae51fSJens Axboe static void blk_mq_start_request(struct request *rq) 399320ae51fSJens Axboe { 400320ae51fSJens Axboe struct request_queue *q = rq->q; 401320ae51fSJens Axboe 402320ae51fSJens Axboe trace_block_rq_issue(q, rq); 403320ae51fSJens Axboe 404320ae51fSJens Axboe /* 405320ae51fSJens Axboe * Just mark start time and set the started bit. Due to memory 406320ae51fSJens Axboe * ordering, we know we'll see the correct deadline as long as 407320ae51fSJens Axboe * REQ_ATOMIC_STARTED is seen. 408320ae51fSJens Axboe */ 409320ae51fSJens Axboe rq->deadline = jiffies + q->rq_timeout; 410320ae51fSJens Axboe set_bit(REQ_ATOM_STARTED, &rq->atomic_flags); 411320ae51fSJens Axboe } 412320ae51fSJens Axboe 413320ae51fSJens Axboe static void blk_mq_requeue_request(struct request *rq) 414320ae51fSJens Axboe { 415320ae51fSJens Axboe struct request_queue *q = rq->q; 416320ae51fSJens Axboe 417320ae51fSJens Axboe trace_block_rq_requeue(q, rq); 418320ae51fSJens Axboe clear_bit(REQ_ATOM_STARTED, &rq->atomic_flags); 419320ae51fSJens Axboe } 420320ae51fSJens Axboe 421320ae51fSJens Axboe struct blk_mq_timeout_data { 422320ae51fSJens Axboe struct blk_mq_hw_ctx *hctx; 423320ae51fSJens Axboe unsigned long *next; 424320ae51fSJens Axboe unsigned int *next_set; 425320ae51fSJens Axboe }; 426320ae51fSJens Axboe 427320ae51fSJens Axboe static void blk_mq_timeout_check(void *__data, unsigned long *free_tags) 428320ae51fSJens Axboe { 429320ae51fSJens Axboe struct blk_mq_timeout_data *data = __data; 430320ae51fSJens Axboe struct blk_mq_hw_ctx *hctx = data->hctx; 431320ae51fSJens Axboe unsigned int tag; 432320ae51fSJens Axboe 433320ae51fSJens Axboe /* It may not be in flight yet (this is where 434320ae51fSJens Axboe * the REQ_ATOMIC_STARTED flag comes in). The requests are 435320ae51fSJens Axboe * statically allocated, so we know it's always safe to access the 436320ae51fSJens Axboe * memory associated with a bit offset into ->rqs[]. 437320ae51fSJens Axboe */ 438320ae51fSJens Axboe tag = 0; 439320ae51fSJens Axboe do { 440320ae51fSJens Axboe struct request *rq; 441320ae51fSJens Axboe 442320ae51fSJens Axboe tag = find_next_zero_bit(free_tags, hctx->queue_depth, tag); 443320ae51fSJens Axboe if (tag >= hctx->queue_depth) 444320ae51fSJens Axboe break; 445320ae51fSJens Axboe 446320ae51fSJens Axboe rq = hctx->rqs[tag++]; 447320ae51fSJens Axboe 448320ae51fSJens Axboe if (!test_bit(REQ_ATOM_STARTED, &rq->atomic_flags)) 449320ae51fSJens Axboe continue; 450320ae51fSJens Axboe 451320ae51fSJens Axboe blk_rq_check_expired(rq, data->next, data->next_set); 452320ae51fSJens Axboe } while (1); 453320ae51fSJens Axboe } 454320ae51fSJens Axboe 455320ae51fSJens Axboe static void blk_mq_hw_ctx_check_timeout(struct blk_mq_hw_ctx *hctx, 456320ae51fSJens Axboe unsigned long *next, 457320ae51fSJens Axboe unsigned int *next_set) 458320ae51fSJens Axboe { 459320ae51fSJens Axboe struct blk_mq_timeout_data data = { 460320ae51fSJens Axboe .hctx = hctx, 461320ae51fSJens Axboe .next = next, 462320ae51fSJens Axboe .next_set = next_set, 463320ae51fSJens Axboe }; 464320ae51fSJens Axboe 465320ae51fSJens Axboe /* 466320ae51fSJens Axboe * Ask the tagging code to iterate busy requests, so we can 467320ae51fSJens Axboe * check them for timeout. 468320ae51fSJens Axboe */ 469320ae51fSJens Axboe blk_mq_tag_busy_iter(hctx->tags, blk_mq_timeout_check, &data); 470320ae51fSJens Axboe } 471320ae51fSJens Axboe 472320ae51fSJens Axboe static void blk_mq_rq_timer(unsigned long data) 473320ae51fSJens Axboe { 474320ae51fSJens Axboe struct request_queue *q = (struct request_queue *) data; 475320ae51fSJens Axboe struct blk_mq_hw_ctx *hctx; 476320ae51fSJens Axboe unsigned long next = 0; 477320ae51fSJens Axboe int i, next_set = 0; 478320ae51fSJens Axboe 479320ae51fSJens Axboe queue_for_each_hw_ctx(q, hctx, i) 480320ae51fSJens Axboe blk_mq_hw_ctx_check_timeout(hctx, &next, &next_set); 481320ae51fSJens Axboe 482320ae51fSJens Axboe if (next_set) 483320ae51fSJens Axboe mod_timer(&q->timeout, round_jiffies_up(next)); 484320ae51fSJens Axboe } 485320ae51fSJens Axboe 486320ae51fSJens Axboe /* 487320ae51fSJens Axboe * Reverse check our software queue for entries that we could potentially 488320ae51fSJens Axboe * merge with. Currently includes a hand-wavy stop count of 8, to not spend 489320ae51fSJens Axboe * too much time checking for merges. 490320ae51fSJens Axboe */ 491320ae51fSJens Axboe static bool blk_mq_attempt_merge(struct request_queue *q, 492320ae51fSJens Axboe struct blk_mq_ctx *ctx, struct bio *bio) 493320ae51fSJens Axboe { 494320ae51fSJens Axboe struct request *rq; 495320ae51fSJens Axboe int checked = 8; 496320ae51fSJens Axboe 497320ae51fSJens Axboe list_for_each_entry_reverse(rq, &ctx->rq_list, queuelist) { 498320ae51fSJens Axboe int el_ret; 499320ae51fSJens Axboe 500320ae51fSJens Axboe if (!checked--) 501320ae51fSJens Axboe break; 502320ae51fSJens Axboe 503320ae51fSJens Axboe if (!blk_rq_merge_ok(rq, bio)) 504320ae51fSJens Axboe continue; 505320ae51fSJens Axboe 506320ae51fSJens Axboe el_ret = blk_try_merge(rq, bio); 507320ae51fSJens Axboe if (el_ret == ELEVATOR_BACK_MERGE) { 508320ae51fSJens Axboe if (bio_attempt_back_merge(q, rq, bio)) { 509320ae51fSJens Axboe ctx->rq_merged++; 510320ae51fSJens Axboe return true; 511320ae51fSJens Axboe } 512320ae51fSJens Axboe break; 513320ae51fSJens Axboe } else if (el_ret == ELEVATOR_FRONT_MERGE) { 514320ae51fSJens Axboe if (bio_attempt_front_merge(q, rq, bio)) { 515320ae51fSJens Axboe ctx->rq_merged++; 516320ae51fSJens Axboe return true; 517320ae51fSJens Axboe } 518320ae51fSJens Axboe break; 519320ae51fSJens Axboe } 520320ae51fSJens Axboe } 521320ae51fSJens Axboe 522320ae51fSJens Axboe return false; 523320ae51fSJens Axboe } 524320ae51fSJens Axboe 525320ae51fSJens Axboe void blk_mq_add_timer(struct request *rq) 526320ae51fSJens Axboe { 527320ae51fSJens Axboe __blk_add_timer(rq, NULL); 528320ae51fSJens Axboe } 529320ae51fSJens Axboe 530320ae51fSJens Axboe /* 531320ae51fSJens Axboe * Run this hardware queue, pulling any software queues mapped to it in. 532320ae51fSJens Axboe * Note that this function currently has various problems around ordering 533320ae51fSJens Axboe * of IO. In particular, we'd like FIFO behaviour on handling existing 534320ae51fSJens Axboe * items on the hctx->dispatch list. Ignore that for now. 535320ae51fSJens Axboe */ 536320ae51fSJens Axboe static void __blk_mq_run_hw_queue(struct blk_mq_hw_ctx *hctx) 537320ae51fSJens Axboe { 538320ae51fSJens Axboe struct request_queue *q = hctx->queue; 539320ae51fSJens Axboe struct blk_mq_ctx *ctx; 540320ae51fSJens Axboe struct request *rq; 541320ae51fSJens Axboe LIST_HEAD(rq_list); 542320ae51fSJens Axboe int bit, queued; 543320ae51fSJens Axboe 544320ae51fSJens Axboe if (unlikely(test_bit(BLK_MQ_S_STOPPED, &hctx->flags))) 545320ae51fSJens Axboe return; 546320ae51fSJens Axboe 547320ae51fSJens Axboe hctx->run++; 548320ae51fSJens Axboe 549320ae51fSJens Axboe /* 550320ae51fSJens Axboe * Touch any software queue that has pending entries. 551320ae51fSJens Axboe */ 552320ae51fSJens Axboe for_each_set_bit(bit, hctx->ctx_map, hctx->nr_ctx) { 553320ae51fSJens Axboe clear_bit(bit, hctx->ctx_map); 554320ae51fSJens Axboe ctx = hctx->ctxs[bit]; 555320ae51fSJens Axboe BUG_ON(bit != ctx->index_hw); 556320ae51fSJens Axboe 557320ae51fSJens Axboe spin_lock(&ctx->lock); 558320ae51fSJens Axboe list_splice_tail_init(&ctx->rq_list, &rq_list); 559320ae51fSJens Axboe spin_unlock(&ctx->lock); 560320ae51fSJens Axboe } 561320ae51fSJens Axboe 562320ae51fSJens Axboe /* 563320ae51fSJens Axboe * If we have previous entries on our dispatch list, grab them 564320ae51fSJens Axboe * and stuff them at the front for more fair dispatch. 565320ae51fSJens Axboe */ 566320ae51fSJens Axboe if (!list_empty_careful(&hctx->dispatch)) { 567320ae51fSJens Axboe spin_lock(&hctx->lock); 568320ae51fSJens Axboe if (!list_empty(&hctx->dispatch)) 569320ae51fSJens Axboe list_splice_init(&hctx->dispatch, &rq_list); 570320ae51fSJens Axboe spin_unlock(&hctx->lock); 571320ae51fSJens Axboe } 572320ae51fSJens Axboe 573320ae51fSJens Axboe /* 574320ae51fSJens Axboe * Delete and return all entries from our dispatch list 575320ae51fSJens Axboe */ 576320ae51fSJens Axboe queued = 0; 577320ae51fSJens Axboe 578320ae51fSJens Axboe /* 579320ae51fSJens Axboe * Now process all the entries, sending them to the driver. 580320ae51fSJens Axboe */ 581320ae51fSJens Axboe while (!list_empty(&rq_list)) { 582320ae51fSJens Axboe int ret; 583320ae51fSJens Axboe 584320ae51fSJens Axboe rq = list_first_entry(&rq_list, struct request, queuelist); 585320ae51fSJens Axboe list_del_init(&rq->queuelist); 586320ae51fSJens Axboe blk_mq_start_request(rq); 587320ae51fSJens Axboe 588320ae51fSJens Axboe /* 589320ae51fSJens Axboe * Last request in the series. Flag it as such, this 590320ae51fSJens Axboe * enables drivers to know when IO should be kicked off, 591320ae51fSJens Axboe * if they don't do it on a per-request basis. 592320ae51fSJens Axboe * 593320ae51fSJens Axboe * Note: the flag isn't the only condition drivers 594320ae51fSJens Axboe * should do kick off. If drive is busy, the last 595320ae51fSJens Axboe * request might not have the bit set. 596320ae51fSJens Axboe */ 597320ae51fSJens Axboe if (list_empty(&rq_list)) 598320ae51fSJens Axboe rq->cmd_flags |= REQ_END; 599320ae51fSJens Axboe 600320ae51fSJens Axboe ret = q->mq_ops->queue_rq(hctx, rq); 601320ae51fSJens Axboe switch (ret) { 602320ae51fSJens Axboe case BLK_MQ_RQ_QUEUE_OK: 603320ae51fSJens Axboe queued++; 604320ae51fSJens Axboe continue; 605320ae51fSJens Axboe case BLK_MQ_RQ_QUEUE_BUSY: 606320ae51fSJens Axboe /* 607320ae51fSJens Axboe * FIXME: we should have a mechanism to stop the queue 608320ae51fSJens Axboe * like blk_stop_queue, otherwise we will waste cpu 609320ae51fSJens Axboe * time 610320ae51fSJens Axboe */ 611320ae51fSJens Axboe list_add(&rq->queuelist, &rq_list); 612320ae51fSJens Axboe blk_mq_requeue_request(rq); 613320ae51fSJens Axboe break; 614320ae51fSJens Axboe default: 615320ae51fSJens Axboe pr_err("blk-mq: bad return on queue: %d\n", ret); 616320ae51fSJens Axboe rq->errors = -EIO; 617320ae51fSJens Axboe case BLK_MQ_RQ_QUEUE_ERROR: 618320ae51fSJens Axboe blk_mq_end_io(rq, rq->errors); 619320ae51fSJens Axboe break; 620320ae51fSJens Axboe } 621320ae51fSJens Axboe 622320ae51fSJens Axboe if (ret == BLK_MQ_RQ_QUEUE_BUSY) 623320ae51fSJens Axboe break; 624320ae51fSJens Axboe } 625320ae51fSJens Axboe 626320ae51fSJens Axboe if (!queued) 627320ae51fSJens Axboe hctx->dispatched[0]++; 628320ae51fSJens Axboe else if (queued < (1 << (BLK_MQ_MAX_DISPATCH_ORDER - 1))) 629320ae51fSJens Axboe hctx->dispatched[ilog2(queued) + 1]++; 630320ae51fSJens Axboe 631320ae51fSJens Axboe /* 632320ae51fSJens Axboe * Any items that need requeuing? Stuff them into hctx->dispatch, 633320ae51fSJens Axboe * that is where we will continue on next queue run. 634320ae51fSJens Axboe */ 635320ae51fSJens Axboe if (!list_empty(&rq_list)) { 636320ae51fSJens Axboe spin_lock(&hctx->lock); 637320ae51fSJens Axboe list_splice(&rq_list, &hctx->dispatch); 638320ae51fSJens Axboe spin_unlock(&hctx->lock); 639320ae51fSJens Axboe } 640320ae51fSJens Axboe } 641320ae51fSJens Axboe 642320ae51fSJens Axboe void blk_mq_run_hw_queue(struct blk_mq_hw_ctx *hctx, bool async) 643320ae51fSJens Axboe { 644320ae51fSJens Axboe if (unlikely(test_bit(BLK_MQ_S_STOPPED, &hctx->flags))) 645320ae51fSJens Axboe return; 646320ae51fSJens Axboe 647320ae51fSJens Axboe if (!async) 648320ae51fSJens Axboe __blk_mq_run_hw_queue(hctx); 649320ae51fSJens Axboe else { 650320ae51fSJens Axboe struct request_queue *q = hctx->queue; 651320ae51fSJens Axboe 652320ae51fSJens Axboe kblockd_schedule_delayed_work(q, &hctx->delayed_work, 0); 653320ae51fSJens Axboe } 654320ae51fSJens Axboe } 655320ae51fSJens Axboe 656320ae51fSJens Axboe void blk_mq_run_queues(struct request_queue *q, bool async) 657320ae51fSJens Axboe { 658320ae51fSJens Axboe struct blk_mq_hw_ctx *hctx; 659320ae51fSJens Axboe int i; 660320ae51fSJens Axboe 661320ae51fSJens Axboe queue_for_each_hw_ctx(q, hctx, i) { 662320ae51fSJens Axboe if ((!blk_mq_hctx_has_pending(hctx) && 663320ae51fSJens Axboe list_empty_careful(&hctx->dispatch)) || 664320ae51fSJens Axboe test_bit(BLK_MQ_S_STOPPED, &hctx->flags)) 665320ae51fSJens Axboe continue; 666320ae51fSJens Axboe 667320ae51fSJens Axboe blk_mq_run_hw_queue(hctx, async); 668320ae51fSJens Axboe } 669320ae51fSJens Axboe } 670320ae51fSJens Axboe EXPORT_SYMBOL(blk_mq_run_queues); 671320ae51fSJens Axboe 672320ae51fSJens Axboe void blk_mq_stop_hw_queue(struct blk_mq_hw_ctx *hctx) 673320ae51fSJens Axboe { 674320ae51fSJens Axboe cancel_delayed_work(&hctx->delayed_work); 675320ae51fSJens Axboe set_bit(BLK_MQ_S_STOPPED, &hctx->state); 676320ae51fSJens Axboe } 677320ae51fSJens Axboe EXPORT_SYMBOL(blk_mq_stop_hw_queue); 678320ae51fSJens Axboe 679280d45f6SChristoph Hellwig void blk_mq_stop_hw_queues(struct request_queue *q) 680280d45f6SChristoph Hellwig { 681280d45f6SChristoph Hellwig struct blk_mq_hw_ctx *hctx; 682280d45f6SChristoph Hellwig int i; 683280d45f6SChristoph Hellwig 684280d45f6SChristoph Hellwig queue_for_each_hw_ctx(q, hctx, i) 685280d45f6SChristoph Hellwig blk_mq_stop_hw_queue(hctx); 686280d45f6SChristoph Hellwig } 687280d45f6SChristoph Hellwig EXPORT_SYMBOL(blk_mq_stop_hw_queues); 688280d45f6SChristoph Hellwig 689320ae51fSJens Axboe void blk_mq_start_hw_queue(struct blk_mq_hw_ctx *hctx) 690320ae51fSJens Axboe { 691320ae51fSJens Axboe clear_bit(BLK_MQ_S_STOPPED, &hctx->state); 692320ae51fSJens Axboe __blk_mq_run_hw_queue(hctx); 693320ae51fSJens Axboe } 694320ae51fSJens Axboe EXPORT_SYMBOL(blk_mq_start_hw_queue); 695320ae51fSJens Axboe 696320ae51fSJens Axboe void blk_mq_start_stopped_hw_queues(struct request_queue *q) 697320ae51fSJens Axboe { 698320ae51fSJens Axboe struct blk_mq_hw_ctx *hctx; 699320ae51fSJens Axboe int i; 700320ae51fSJens Axboe 701320ae51fSJens Axboe queue_for_each_hw_ctx(q, hctx, i) { 702320ae51fSJens Axboe if (!test_bit(BLK_MQ_S_STOPPED, &hctx->state)) 703320ae51fSJens Axboe continue; 704320ae51fSJens Axboe 705320ae51fSJens Axboe clear_bit(BLK_MQ_S_STOPPED, &hctx->state); 706320ae51fSJens Axboe blk_mq_run_hw_queue(hctx, true); 707320ae51fSJens Axboe } 708320ae51fSJens Axboe } 709320ae51fSJens Axboe EXPORT_SYMBOL(blk_mq_start_stopped_hw_queues); 710320ae51fSJens Axboe 711320ae51fSJens Axboe static void blk_mq_work_fn(struct work_struct *work) 712320ae51fSJens Axboe { 713320ae51fSJens Axboe struct blk_mq_hw_ctx *hctx; 714320ae51fSJens Axboe 715320ae51fSJens Axboe hctx = container_of(work, struct blk_mq_hw_ctx, delayed_work.work); 716320ae51fSJens Axboe __blk_mq_run_hw_queue(hctx); 717320ae51fSJens Axboe } 718320ae51fSJens Axboe 719320ae51fSJens Axboe static void __blk_mq_insert_request(struct blk_mq_hw_ctx *hctx, 720320ae51fSJens Axboe struct request *rq) 721320ae51fSJens Axboe { 722320ae51fSJens Axboe struct blk_mq_ctx *ctx = rq->mq_ctx; 723320ae51fSJens Axboe 724320ae51fSJens Axboe list_add_tail(&rq->queuelist, &ctx->rq_list); 725320ae51fSJens Axboe blk_mq_hctx_mark_pending(hctx, ctx); 726320ae51fSJens Axboe 727320ae51fSJens Axboe /* 728320ae51fSJens Axboe * We do this early, to ensure we are on the right CPU. 729320ae51fSJens Axboe */ 730320ae51fSJens Axboe blk_mq_add_timer(rq); 731320ae51fSJens Axboe } 732320ae51fSJens Axboe 733320ae51fSJens Axboe void blk_mq_insert_request(struct request_queue *q, struct request *rq, 734320ae51fSJens Axboe bool run_queue) 735320ae51fSJens Axboe { 736320ae51fSJens Axboe struct blk_mq_hw_ctx *hctx; 737320ae51fSJens Axboe struct blk_mq_ctx *ctx, *current_ctx; 738320ae51fSJens Axboe 739320ae51fSJens Axboe ctx = rq->mq_ctx; 740320ae51fSJens Axboe hctx = q->mq_ops->map_queue(q, ctx->cpu); 741320ae51fSJens Axboe 742320ae51fSJens Axboe if (rq->cmd_flags & (REQ_FLUSH | REQ_FUA)) { 743320ae51fSJens Axboe blk_insert_flush(rq); 744320ae51fSJens Axboe } else { 745320ae51fSJens Axboe current_ctx = blk_mq_get_ctx(q); 746320ae51fSJens Axboe 747320ae51fSJens Axboe if (!cpu_online(ctx->cpu)) { 748320ae51fSJens Axboe ctx = current_ctx; 749320ae51fSJens Axboe hctx = q->mq_ops->map_queue(q, ctx->cpu); 750320ae51fSJens Axboe rq->mq_ctx = ctx; 751320ae51fSJens Axboe } 752320ae51fSJens Axboe spin_lock(&ctx->lock); 753320ae51fSJens Axboe __blk_mq_insert_request(hctx, rq); 754320ae51fSJens Axboe spin_unlock(&ctx->lock); 755320ae51fSJens Axboe 756320ae51fSJens Axboe blk_mq_put_ctx(current_ctx); 757320ae51fSJens Axboe } 758320ae51fSJens Axboe 759320ae51fSJens Axboe if (run_queue) 760320ae51fSJens Axboe __blk_mq_run_hw_queue(hctx); 761320ae51fSJens Axboe } 762320ae51fSJens Axboe EXPORT_SYMBOL(blk_mq_insert_request); 763320ae51fSJens Axboe 764320ae51fSJens Axboe /* 765320ae51fSJens Axboe * This is a special version of blk_mq_insert_request to bypass FLUSH request 766320ae51fSJens Axboe * check. Should only be used internally. 767320ae51fSJens Axboe */ 768320ae51fSJens Axboe void blk_mq_run_request(struct request *rq, bool run_queue, bool async) 769320ae51fSJens Axboe { 770320ae51fSJens Axboe struct request_queue *q = rq->q; 771320ae51fSJens Axboe struct blk_mq_hw_ctx *hctx; 772320ae51fSJens Axboe struct blk_mq_ctx *ctx, *current_ctx; 773320ae51fSJens Axboe 774320ae51fSJens Axboe current_ctx = blk_mq_get_ctx(q); 775320ae51fSJens Axboe 776320ae51fSJens Axboe ctx = rq->mq_ctx; 777320ae51fSJens Axboe if (!cpu_online(ctx->cpu)) { 778320ae51fSJens Axboe ctx = current_ctx; 779320ae51fSJens Axboe rq->mq_ctx = ctx; 780320ae51fSJens Axboe } 781320ae51fSJens Axboe hctx = q->mq_ops->map_queue(q, ctx->cpu); 782320ae51fSJens Axboe 783320ae51fSJens Axboe /* ctx->cpu might be offline */ 784320ae51fSJens Axboe spin_lock(&ctx->lock); 785320ae51fSJens Axboe __blk_mq_insert_request(hctx, rq); 786320ae51fSJens Axboe spin_unlock(&ctx->lock); 787320ae51fSJens Axboe 788320ae51fSJens Axboe blk_mq_put_ctx(current_ctx); 789320ae51fSJens Axboe 790320ae51fSJens Axboe if (run_queue) 791320ae51fSJens Axboe blk_mq_run_hw_queue(hctx, async); 792320ae51fSJens Axboe } 793320ae51fSJens Axboe 794320ae51fSJens Axboe static void blk_mq_insert_requests(struct request_queue *q, 795320ae51fSJens Axboe struct blk_mq_ctx *ctx, 796320ae51fSJens Axboe struct list_head *list, 797320ae51fSJens Axboe int depth, 798320ae51fSJens Axboe bool from_schedule) 799320ae51fSJens Axboe 800320ae51fSJens Axboe { 801320ae51fSJens Axboe struct blk_mq_hw_ctx *hctx; 802320ae51fSJens Axboe struct blk_mq_ctx *current_ctx; 803320ae51fSJens Axboe 804320ae51fSJens Axboe trace_block_unplug(q, depth, !from_schedule); 805320ae51fSJens Axboe 806320ae51fSJens Axboe current_ctx = blk_mq_get_ctx(q); 807320ae51fSJens Axboe 808320ae51fSJens Axboe if (!cpu_online(ctx->cpu)) 809320ae51fSJens Axboe ctx = current_ctx; 810320ae51fSJens Axboe hctx = q->mq_ops->map_queue(q, ctx->cpu); 811320ae51fSJens Axboe 812320ae51fSJens Axboe /* 813320ae51fSJens Axboe * preemption doesn't flush plug list, so it's possible ctx->cpu is 814320ae51fSJens Axboe * offline now 815320ae51fSJens Axboe */ 816320ae51fSJens Axboe spin_lock(&ctx->lock); 817320ae51fSJens Axboe while (!list_empty(list)) { 818320ae51fSJens Axboe struct request *rq; 819320ae51fSJens Axboe 820320ae51fSJens Axboe rq = list_first_entry(list, struct request, queuelist); 821320ae51fSJens Axboe list_del_init(&rq->queuelist); 822320ae51fSJens Axboe rq->mq_ctx = ctx; 823320ae51fSJens Axboe __blk_mq_insert_request(hctx, rq); 824320ae51fSJens Axboe } 825320ae51fSJens Axboe spin_unlock(&ctx->lock); 826320ae51fSJens Axboe 827320ae51fSJens Axboe blk_mq_put_ctx(current_ctx); 828320ae51fSJens Axboe 829320ae51fSJens Axboe blk_mq_run_hw_queue(hctx, from_schedule); 830320ae51fSJens Axboe } 831320ae51fSJens Axboe 832320ae51fSJens Axboe static int plug_ctx_cmp(void *priv, struct list_head *a, struct list_head *b) 833320ae51fSJens Axboe { 834320ae51fSJens Axboe struct request *rqa = container_of(a, struct request, queuelist); 835320ae51fSJens Axboe struct request *rqb = container_of(b, struct request, queuelist); 836320ae51fSJens Axboe 837320ae51fSJens Axboe return !(rqa->mq_ctx < rqb->mq_ctx || 838320ae51fSJens Axboe (rqa->mq_ctx == rqb->mq_ctx && 839320ae51fSJens Axboe blk_rq_pos(rqa) < blk_rq_pos(rqb))); 840320ae51fSJens Axboe } 841320ae51fSJens Axboe 842320ae51fSJens Axboe void blk_mq_flush_plug_list(struct blk_plug *plug, bool from_schedule) 843320ae51fSJens Axboe { 844320ae51fSJens Axboe struct blk_mq_ctx *this_ctx; 845320ae51fSJens Axboe struct request_queue *this_q; 846320ae51fSJens Axboe struct request *rq; 847320ae51fSJens Axboe LIST_HEAD(list); 848320ae51fSJens Axboe LIST_HEAD(ctx_list); 849320ae51fSJens Axboe unsigned int depth; 850320ae51fSJens Axboe 851320ae51fSJens Axboe list_splice_init(&plug->mq_list, &list); 852320ae51fSJens Axboe 853320ae51fSJens Axboe list_sort(NULL, &list, plug_ctx_cmp); 854320ae51fSJens Axboe 855320ae51fSJens Axboe this_q = NULL; 856320ae51fSJens Axboe this_ctx = NULL; 857320ae51fSJens Axboe depth = 0; 858320ae51fSJens Axboe 859320ae51fSJens Axboe while (!list_empty(&list)) { 860320ae51fSJens Axboe rq = list_entry_rq(list.next); 861320ae51fSJens Axboe list_del_init(&rq->queuelist); 862320ae51fSJens Axboe BUG_ON(!rq->q); 863320ae51fSJens Axboe if (rq->mq_ctx != this_ctx) { 864320ae51fSJens Axboe if (this_ctx) { 865320ae51fSJens Axboe blk_mq_insert_requests(this_q, this_ctx, 866320ae51fSJens Axboe &ctx_list, depth, 867320ae51fSJens Axboe from_schedule); 868320ae51fSJens Axboe } 869320ae51fSJens Axboe 870320ae51fSJens Axboe this_ctx = rq->mq_ctx; 871320ae51fSJens Axboe this_q = rq->q; 872320ae51fSJens Axboe depth = 0; 873320ae51fSJens Axboe } 874320ae51fSJens Axboe 875320ae51fSJens Axboe depth++; 876320ae51fSJens Axboe list_add_tail(&rq->queuelist, &ctx_list); 877320ae51fSJens Axboe } 878320ae51fSJens Axboe 879320ae51fSJens Axboe /* 880320ae51fSJens Axboe * If 'this_ctx' is set, we know we have entries to complete 881320ae51fSJens Axboe * on 'ctx_list'. Do those. 882320ae51fSJens Axboe */ 883320ae51fSJens Axboe if (this_ctx) { 884320ae51fSJens Axboe blk_mq_insert_requests(this_q, this_ctx, &ctx_list, depth, 885320ae51fSJens Axboe from_schedule); 886320ae51fSJens Axboe } 887320ae51fSJens Axboe } 888320ae51fSJens Axboe 889320ae51fSJens Axboe static void blk_mq_bio_to_request(struct request *rq, struct bio *bio) 890320ae51fSJens Axboe { 891320ae51fSJens Axboe init_request_from_bio(rq, bio); 892320ae51fSJens Axboe blk_account_io_start(rq, 1); 893320ae51fSJens Axboe } 894320ae51fSJens Axboe 895320ae51fSJens Axboe static void blk_mq_make_request(struct request_queue *q, struct bio *bio) 896320ae51fSJens Axboe { 897320ae51fSJens Axboe struct blk_mq_hw_ctx *hctx; 898320ae51fSJens Axboe struct blk_mq_ctx *ctx; 899320ae51fSJens Axboe const int is_sync = rw_is_sync(bio->bi_rw); 900320ae51fSJens Axboe const int is_flush_fua = bio->bi_rw & (REQ_FLUSH | REQ_FUA); 901320ae51fSJens Axboe int rw = bio_data_dir(bio); 902320ae51fSJens Axboe struct request *rq; 903320ae51fSJens Axboe unsigned int use_plug, request_count = 0; 904320ae51fSJens Axboe 905320ae51fSJens Axboe /* 906320ae51fSJens Axboe * If we have multiple hardware queues, just go directly to 907320ae51fSJens Axboe * one of those for sync IO. 908320ae51fSJens Axboe */ 909320ae51fSJens Axboe use_plug = !is_flush_fua && ((q->nr_hw_queues == 1) || !is_sync); 910320ae51fSJens Axboe 911320ae51fSJens Axboe blk_queue_bounce(q, &bio); 912320ae51fSJens Axboe 913320ae51fSJens Axboe if (use_plug && blk_attempt_plug_merge(q, bio, &request_count)) 914320ae51fSJens Axboe return; 915320ae51fSJens Axboe 916320ae51fSJens Axboe if (blk_mq_queue_enter(q)) { 917320ae51fSJens Axboe bio_endio(bio, -EIO); 918320ae51fSJens Axboe return; 919320ae51fSJens Axboe } 920320ae51fSJens Axboe 921320ae51fSJens Axboe ctx = blk_mq_get_ctx(q); 922320ae51fSJens Axboe hctx = q->mq_ops->map_queue(q, ctx->cpu); 923320ae51fSJens Axboe 924320ae51fSJens Axboe trace_block_getrq(q, bio, rw); 925320ae51fSJens Axboe rq = __blk_mq_alloc_request(hctx, GFP_ATOMIC, false); 926320ae51fSJens Axboe if (likely(rq)) 927*94eddfbeSJens Axboe blk_mq_rq_ctx_init(q, ctx, rq, rw); 928320ae51fSJens Axboe else { 929320ae51fSJens Axboe blk_mq_put_ctx(ctx); 930320ae51fSJens Axboe trace_block_sleeprq(q, bio, rw); 931320ae51fSJens Axboe rq = blk_mq_alloc_request_pinned(q, rw, __GFP_WAIT|GFP_ATOMIC, 932320ae51fSJens Axboe false); 933320ae51fSJens Axboe ctx = rq->mq_ctx; 934320ae51fSJens Axboe hctx = q->mq_ops->map_queue(q, ctx->cpu); 935320ae51fSJens Axboe } 936320ae51fSJens Axboe 937320ae51fSJens Axboe hctx->queued++; 938320ae51fSJens Axboe 939320ae51fSJens Axboe if (unlikely(is_flush_fua)) { 940320ae51fSJens Axboe blk_mq_bio_to_request(rq, bio); 941320ae51fSJens Axboe blk_mq_put_ctx(ctx); 942320ae51fSJens Axboe blk_insert_flush(rq); 943320ae51fSJens Axboe goto run_queue; 944320ae51fSJens Axboe } 945320ae51fSJens Axboe 946320ae51fSJens Axboe /* 947320ae51fSJens Axboe * A task plug currently exists. Since this is completely lockless, 948320ae51fSJens Axboe * utilize that to temporarily store requests until the task is 949320ae51fSJens Axboe * either done or scheduled away. 950320ae51fSJens Axboe */ 951320ae51fSJens Axboe if (use_plug) { 952320ae51fSJens Axboe struct blk_plug *plug = current->plug; 953320ae51fSJens Axboe 954320ae51fSJens Axboe if (plug) { 955320ae51fSJens Axboe blk_mq_bio_to_request(rq, bio); 95692f399c7SShaohua Li if (list_empty(&plug->mq_list)) 957320ae51fSJens Axboe trace_block_plug(q); 958320ae51fSJens Axboe else if (request_count >= BLK_MAX_REQUEST_COUNT) { 959320ae51fSJens Axboe blk_flush_plug_list(plug, false); 960320ae51fSJens Axboe trace_block_plug(q); 961320ae51fSJens Axboe } 962320ae51fSJens Axboe list_add_tail(&rq->queuelist, &plug->mq_list); 963320ae51fSJens Axboe blk_mq_put_ctx(ctx); 964320ae51fSJens Axboe return; 965320ae51fSJens Axboe } 966320ae51fSJens Axboe } 967320ae51fSJens Axboe 968320ae51fSJens Axboe spin_lock(&ctx->lock); 969320ae51fSJens Axboe 970320ae51fSJens Axboe if ((hctx->flags & BLK_MQ_F_SHOULD_MERGE) && 971320ae51fSJens Axboe blk_mq_attempt_merge(q, ctx, bio)) 972320ae51fSJens Axboe __blk_mq_free_request(hctx, ctx, rq); 973320ae51fSJens Axboe else { 974320ae51fSJens Axboe blk_mq_bio_to_request(rq, bio); 975320ae51fSJens Axboe __blk_mq_insert_request(hctx, rq); 976320ae51fSJens Axboe } 977320ae51fSJens Axboe 978320ae51fSJens Axboe spin_unlock(&ctx->lock); 979320ae51fSJens Axboe blk_mq_put_ctx(ctx); 980320ae51fSJens Axboe 981320ae51fSJens Axboe /* 982320ae51fSJens Axboe * For a SYNC request, send it to the hardware immediately. For an 983320ae51fSJens Axboe * ASYNC request, just ensure that we run it later on. The latter 984320ae51fSJens Axboe * allows for merging opportunities and more efficient dispatching. 985320ae51fSJens Axboe */ 986320ae51fSJens Axboe run_queue: 987320ae51fSJens Axboe blk_mq_run_hw_queue(hctx, !is_sync || is_flush_fua); 988320ae51fSJens Axboe } 989320ae51fSJens Axboe 990320ae51fSJens Axboe /* 991320ae51fSJens Axboe * Default mapping to a software queue, since we use one per CPU. 992320ae51fSJens Axboe */ 993320ae51fSJens Axboe struct blk_mq_hw_ctx *blk_mq_map_queue(struct request_queue *q, const int cpu) 994320ae51fSJens Axboe { 995320ae51fSJens Axboe return q->queue_hw_ctx[q->mq_map[cpu]]; 996320ae51fSJens Axboe } 997320ae51fSJens Axboe EXPORT_SYMBOL(blk_mq_map_queue); 998320ae51fSJens Axboe 999320ae51fSJens Axboe struct blk_mq_hw_ctx *blk_mq_alloc_single_hw_queue(struct blk_mq_reg *reg, 1000320ae51fSJens Axboe unsigned int hctx_index) 1001320ae51fSJens Axboe { 1002320ae51fSJens Axboe return kmalloc_node(sizeof(struct blk_mq_hw_ctx), 1003320ae51fSJens Axboe GFP_KERNEL | __GFP_ZERO, reg->numa_node); 1004320ae51fSJens Axboe } 1005320ae51fSJens Axboe EXPORT_SYMBOL(blk_mq_alloc_single_hw_queue); 1006320ae51fSJens Axboe 1007320ae51fSJens Axboe void blk_mq_free_single_hw_queue(struct blk_mq_hw_ctx *hctx, 1008320ae51fSJens Axboe unsigned int hctx_index) 1009320ae51fSJens Axboe { 1010320ae51fSJens Axboe kfree(hctx); 1011320ae51fSJens Axboe } 1012320ae51fSJens Axboe EXPORT_SYMBOL(blk_mq_free_single_hw_queue); 1013320ae51fSJens Axboe 1014320ae51fSJens Axboe static void blk_mq_hctx_notify(void *data, unsigned long action, 1015320ae51fSJens Axboe unsigned int cpu) 1016320ae51fSJens Axboe { 1017320ae51fSJens Axboe struct blk_mq_hw_ctx *hctx = data; 1018320ae51fSJens Axboe struct blk_mq_ctx *ctx; 1019320ae51fSJens Axboe LIST_HEAD(tmp); 1020320ae51fSJens Axboe 1021320ae51fSJens Axboe if (action != CPU_DEAD && action != CPU_DEAD_FROZEN) 1022320ae51fSJens Axboe return; 1023320ae51fSJens Axboe 1024320ae51fSJens Axboe /* 1025320ae51fSJens Axboe * Move ctx entries to new CPU, if this one is going away. 1026320ae51fSJens Axboe */ 1027320ae51fSJens Axboe ctx = __blk_mq_get_ctx(hctx->queue, cpu); 1028320ae51fSJens Axboe 1029320ae51fSJens Axboe spin_lock(&ctx->lock); 1030320ae51fSJens Axboe if (!list_empty(&ctx->rq_list)) { 1031320ae51fSJens Axboe list_splice_init(&ctx->rq_list, &tmp); 1032320ae51fSJens Axboe clear_bit(ctx->index_hw, hctx->ctx_map); 1033320ae51fSJens Axboe } 1034320ae51fSJens Axboe spin_unlock(&ctx->lock); 1035320ae51fSJens Axboe 1036320ae51fSJens Axboe if (list_empty(&tmp)) 1037320ae51fSJens Axboe return; 1038320ae51fSJens Axboe 1039320ae51fSJens Axboe ctx = blk_mq_get_ctx(hctx->queue); 1040320ae51fSJens Axboe spin_lock(&ctx->lock); 1041320ae51fSJens Axboe 1042320ae51fSJens Axboe while (!list_empty(&tmp)) { 1043320ae51fSJens Axboe struct request *rq; 1044320ae51fSJens Axboe 1045320ae51fSJens Axboe rq = list_first_entry(&tmp, struct request, queuelist); 1046320ae51fSJens Axboe rq->mq_ctx = ctx; 1047320ae51fSJens Axboe list_move_tail(&rq->queuelist, &ctx->rq_list); 1048320ae51fSJens Axboe } 1049320ae51fSJens Axboe 1050320ae51fSJens Axboe blk_mq_hctx_mark_pending(hctx, ctx); 1051320ae51fSJens Axboe 1052320ae51fSJens Axboe spin_unlock(&ctx->lock); 1053320ae51fSJens Axboe blk_mq_put_ctx(ctx); 1054320ae51fSJens Axboe } 1055320ae51fSJens Axboe 1056320ae51fSJens Axboe static void blk_mq_init_hw_commands(struct blk_mq_hw_ctx *hctx, 1057320ae51fSJens Axboe void (*init)(void *, struct blk_mq_hw_ctx *, 1058320ae51fSJens Axboe struct request *, unsigned int), 1059320ae51fSJens Axboe void *data) 1060320ae51fSJens Axboe { 1061320ae51fSJens Axboe unsigned int i; 1062320ae51fSJens Axboe 1063320ae51fSJens Axboe for (i = 0; i < hctx->queue_depth; i++) { 1064320ae51fSJens Axboe struct request *rq = hctx->rqs[i]; 1065320ae51fSJens Axboe 1066320ae51fSJens Axboe init(data, hctx, rq, i); 1067320ae51fSJens Axboe } 1068320ae51fSJens Axboe } 1069320ae51fSJens Axboe 1070320ae51fSJens Axboe void blk_mq_init_commands(struct request_queue *q, 1071320ae51fSJens Axboe void (*init)(void *, struct blk_mq_hw_ctx *, 1072320ae51fSJens Axboe struct request *, unsigned int), 1073320ae51fSJens Axboe void *data) 1074320ae51fSJens Axboe { 1075320ae51fSJens Axboe struct blk_mq_hw_ctx *hctx; 1076320ae51fSJens Axboe unsigned int i; 1077320ae51fSJens Axboe 1078320ae51fSJens Axboe queue_for_each_hw_ctx(q, hctx, i) 1079320ae51fSJens Axboe blk_mq_init_hw_commands(hctx, init, data); 1080320ae51fSJens Axboe } 1081320ae51fSJens Axboe EXPORT_SYMBOL(blk_mq_init_commands); 1082320ae51fSJens Axboe 1083320ae51fSJens Axboe static void blk_mq_free_rq_map(struct blk_mq_hw_ctx *hctx) 1084320ae51fSJens Axboe { 1085320ae51fSJens Axboe struct page *page; 1086320ae51fSJens Axboe 1087320ae51fSJens Axboe while (!list_empty(&hctx->page_list)) { 1088320ae51fSJens Axboe page = list_first_entry(&hctx->page_list, struct page, list); 1089320ae51fSJens Axboe list_del_init(&page->list); 1090320ae51fSJens Axboe __free_pages(page, page->private); 1091320ae51fSJens Axboe } 1092320ae51fSJens Axboe 1093320ae51fSJens Axboe kfree(hctx->rqs); 1094320ae51fSJens Axboe 1095320ae51fSJens Axboe if (hctx->tags) 1096320ae51fSJens Axboe blk_mq_free_tags(hctx->tags); 1097320ae51fSJens Axboe } 1098320ae51fSJens Axboe 1099320ae51fSJens Axboe static size_t order_to_size(unsigned int order) 1100320ae51fSJens Axboe { 1101320ae51fSJens Axboe size_t ret = PAGE_SIZE; 1102320ae51fSJens Axboe 1103320ae51fSJens Axboe while (order--) 1104320ae51fSJens Axboe ret *= 2; 1105320ae51fSJens Axboe 1106320ae51fSJens Axboe return ret; 1107320ae51fSJens Axboe } 1108320ae51fSJens Axboe 1109320ae51fSJens Axboe static int blk_mq_init_rq_map(struct blk_mq_hw_ctx *hctx, 1110320ae51fSJens Axboe unsigned int reserved_tags, int node) 1111320ae51fSJens Axboe { 1112320ae51fSJens Axboe unsigned int i, j, entries_per_page, max_order = 4; 1113320ae51fSJens Axboe size_t rq_size, left; 1114320ae51fSJens Axboe 1115320ae51fSJens Axboe INIT_LIST_HEAD(&hctx->page_list); 1116320ae51fSJens Axboe 1117320ae51fSJens Axboe hctx->rqs = kmalloc_node(hctx->queue_depth * sizeof(struct request *), 1118320ae51fSJens Axboe GFP_KERNEL, node); 1119320ae51fSJens Axboe if (!hctx->rqs) 1120320ae51fSJens Axboe return -ENOMEM; 1121320ae51fSJens Axboe 1122320ae51fSJens Axboe /* 1123320ae51fSJens Axboe * rq_size is the size of the request plus driver payload, rounded 1124320ae51fSJens Axboe * to the cacheline size 1125320ae51fSJens Axboe */ 1126320ae51fSJens Axboe rq_size = round_up(sizeof(struct request) + hctx->cmd_size, 1127320ae51fSJens Axboe cache_line_size()); 1128320ae51fSJens Axboe left = rq_size * hctx->queue_depth; 1129320ae51fSJens Axboe 1130320ae51fSJens Axboe for (i = 0; i < hctx->queue_depth;) { 1131320ae51fSJens Axboe int this_order = max_order; 1132320ae51fSJens Axboe struct page *page; 1133320ae51fSJens Axboe int to_do; 1134320ae51fSJens Axboe void *p; 1135320ae51fSJens Axboe 1136320ae51fSJens Axboe while (left < order_to_size(this_order - 1) && this_order) 1137320ae51fSJens Axboe this_order--; 1138320ae51fSJens Axboe 1139320ae51fSJens Axboe do { 1140320ae51fSJens Axboe page = alloc_pages_node(node, GFP_KERNEL, this_order); 1141320ae51fSJens Axboe if (page) 1142320ae51fSJens Axboe break; 1143320ae51fSJens Axboe if (!this_order--) 1144320ae51fSJens Axboe break; 1145320ae51fSJens Axboe if (order_to_size(this_order) < rq_size) 1146320ae51fSJens Axboe break; 1147320ae51fSJens Axboe } while (1); 1148320ae51fSJens Axboe 1149320ae51fSJens Axboe if (!page) 1150320ae51fSJens Axboe break; 1151320ae51fSJens Axboe 1152320ae51fSJens Axboe page->private = this_order; 1153320ae51fSJens Axboe list_add_tail(&page->list, &hctx->page_list); 1154320ae51fSJens Axboe 1155320ae51fSJens Axboe p = page_address(page); 1156320ae51fSJens Axboe entries_per_page = order_to_size(this_order) / rq_size; 1157320ae51fSJens Axboe to_do = min(entries_per_page, hctx->queue_depth - i); 1158320ae51fSJens Axboe left -= to_do * rq_size; 1159320ae51fSJens Axboe for (j = 0; j < to_do; j++) { 1160320ae51fSJens Axboe hctx->rqs[i] = p; 1161320ae51fSJens Axboe blk_mq_rq_init(hctx, hctx->rqs[i]); 1162320ae51fSJens Axboe p += rq_size; 1163320ae51fSJens Axboe i++; 1164320ae51fSJens Axboe } 1165320ae51fSJens Axboe } 1166320ae51fSJens Axboe 1167320ae51fSJens Axboe if (i < (reserved_tags + BLK_MQ_TAG_MIN)) 1168320ae51fSJens Axboe goto err_rq_map; 1169320ae51fSJens Axboe else if (i != hctx->queue_depth) { 1170320ae51fSJens Axboe hctx->queue_depth = i; 1171320ae51fSJens Axboe pr_warn("%s: queue depth set to %u because of low memory\n", 1172320ae51fSJens Axboe __func__, i); 1173320ae51fSJens Axboe } 1174320ae51fSJens Axboe 1175320ae51fSJens Axboe hctx->tags = blk_mq_init_tags(hctx->queue_depth, reserved_tags, node); 1176320ae51fSJens Axboe if (!hctx->tags) { 1177320ae51fSJens Axboe err_rq_map: 1178320ae51fSJens Axboe blk_mq_free_rq_map(hctx); 1179320ae51fSJens Axboe return -ENOMEM; 1180320ae51fSJens Axboe } 1181320ae51fSJens Axboe 1182320ae51fSJens Axboe return 0; 1183320ae51fSJens Axboe } 1184320ae51fSJens Axboe 1185320ae51fSJens Axboe static int blk_mq_init_hw_queues(struct request_queue *q, 1186320ae51fSJens Axboe struct blk_mq_reg *reg, void *driver_data) 1187320ae51fSJens Axboe { 1188320ae51fSJens Axboe struct blk_mq_hw_ctx *hctx; 1189320ae51fSJens Axboe unsigned int i, j; 1190320ae51fSJens Axboe 1191320ae51fSJens Axboe /* 1192320ae51fSJens Axboe * Initialize hardware queues 1193320ae51fSJens Axboe */ 1194320ae51fSJens Axboe queue_for_each_hw_ctx(q, hctx, i) { 1195320ae51fSJens Axboe unsigned int num_maps; 1196320ae51fSJens Axboe int node; 1197320ae51fSJens Axboe 1198320ae51fSJens Axboe node = hctx->numa_node; 1199320ae51fSJens Axboe if (node == NUMA_NO_NODE) 1200320ae51fSJens Axboe node = hctx->numa_node = reg->numa_node; 1201320ae51fSJens Axboe 1202320ae51fSJens Axboe INIT_DELAYED_WORK(&hctx->delayed_work, blk_mq_work_fn); 1203320ae51fSJens Axboe spin_lock_init(&hctx->lock); 1204320ae51fSJens Axboe INIT_LIST_HEAD(&hctx->dispatch); 1205320ae51fSJens Axboe hctx->queue = q; 1206320ae51fSJens Axboe hctx->queue_num = i; 1207320ae51fSJens Axboe hctx->flags = reg->flags; 1208320ae51fSJens Axboe hctx->queue_depth = reg->queue_depth; 1209320ae51fSJens Axboe hctx->cmd_size = reg->cmd_size; 1210320ae51fSJens Axboe 1211320ae51fSJens Axboe blk_mq_init_cpu_notifier(&hctx->cpu_notifier, 1212320ae51fSJens Axboe blk_mq_hctx_notify, hctx); 1213320ae51fSJens Axboe blk_mq_register_cpu_notifier(&hctx->cpu_notifier); 1214320ae51fSJens Axboe 1215320ae51fSJens Axboe if (blk_mq_init_rq_map(hctx, reg->reserved_tags, node)) 1216320ae51fSJens Axboe break; 1217320ae51fSJens Axboe 1218320ae51fSJens Axboe /* 1219320ae51fSJens Axboe * Allocate space for all possible cpus to avoid allocation in 1220320ae51fSJens Axboe * runtime 1221320ae51fSJens Axboe */ 1222320ae51fSJens Axboe hctx->ctxs = kmalloc_node(nr_cpu_ids * sizeof(void *), 1223320ae51fSJens Axboe GFP_KERNEL, node); 1224320ae51fSJens Axboe if (!hctx->ctxs) 1225320ae51fSJens Axboe break; 1226320ae51fSJens Axboe 1227320ae51fSJens Axboe num_maps = ALIGN(nr_cpu_ids, BITS_PER_LONG) / BITS_PER_LONG; 1228320ae51fSJens Axboe hctx->ctx_map = kzalloc_node(num_maps * sizeof(unsigned long), 1229320ae51fSJens Axboe GFP_KERNEL, node); 1230320ae51fSJens Axboe if (!hctx->ctx_map) 1231320ae51fSJens Axboe break; 1232320ae51fSJens Axboe 1233320ae51fSJens Axboe hctx->nr_ctx_map = num_maps; 1234320ae51fSJens Axboe hctx->nr_ctx = 0; 1235320ae51fSJens Axboe 1236320ae51fSJens Axboe if (reg->ops->init_hctx && 1237320ae51fSJens Axboe reg->ops->init_hctx(hctx, driver_data, i)) 1238320ae51fSJens Axboe break; 1239320ae51fSJens Axboe } 1240320ae51fSJens Axboe 1241320ae51fSJens Axboe if (i == q->nr_hw_queues) 1242320ae51fSJens Axboe return 0; 1243320ae51fSJens Axboe 1244320ae51fSJens Axboe /* 1245320ae51fSJens Axboe * Init failed 1246320ae51fSJens Axboe */ 1247320ae51fSJens Axboe queue_for_each_hw_ctx(q, hctx, j) { 1248320ae51fSJens Axboe if (i == j) 1249320ae51fSJens Axboe break; 1250320ae51fSJens Axboe 1251320ae51fSJens Axboe if (reg->ops->exit_hctx) 1252320ae51fSJens Axboe reg->ops->exit_hctx(hctx, j); 1253320ae51fSJens Axboe 1254320ae51fSJens Axboe blk_mq_unregister_cpu_notifier(&hctx->cpu_notifier); 1255320ae51fSJens Axboe blk_mq_free_rq_map(hctx); 1256320ae51fSJens Axboe kfree(hctx->ctxs); 1257320ae51fSJens Axboe } 1258320ae51fSJens Axboe 1259320ae51fSJens Axboe return 1; 1260320ae51fSJens Axboe } 1261320ae51fSJens Axboe 1262320ae51fSJens Axboe static void blk_mq_init_cpu_queues(struct request_queue *q, 1263320ae51fSJens Axboe unsigned int nr_hw_queues) 1264320ae51fSJens Axboe { 1265320ae51fSJens Axboe unsigned int i; 1266320ae51fSJens Axboe 1267320ae51fSJens Axboe for_each_possible_cpu(i) { 1268320ae51fSJens Axboe struct blk_mq_ctx *__ctx = per_cpu_ptr(q->queue_ctx, i); 1269320ae51fSJens Axboe struct blk_mq_hw_ctx *hctx; 1270320ae51fSJens Axboe 1271320ae51fSJens Axboe memset(__ctx, 0, sizeof(*__ctx)); 1272320ae51fSJens Axboe __ctx->cpu = i; 1273320ae51fSJens Axboe spin_lock_init(&__ctx->lock); 1274320ae51fSJens Axboe INIT_LIST_HEAD(&__ctx->rq_list); 1275320ae51fSJens Axboe __ctx->queue = q; 1276320ae51fSJens Axboe 1277320ae51fSJens Axboe /* If the cpu isn't online, the cpu is mapped to first hctx */ 1278320ae51fSJens Axboe hctx = q->mq_ops->map_queue(q, i); 1279320ae51fSJens Axboe hctx->nr_ctx++; 1280320ae51fSJens Axboe 1281320ae51fSJens Axboe if (!cpu_online(i)) 1282320ae51fSJens Axboe continue; 1283320ae51fSJens Axboe 1284320ae51fSJens Axboe /* 1285320ae51fSJens Axboe * Set local node, IFF we have more than one hw queue. If 1286320ae51fSJens Axboe * not, we remain on the home node of the device 1287320ae51fSJens Axboe */ 1288320ae51fSJens Axboe if (nr_hw_queues > 1 && hctx->numa_node == NUMA_NO_NODE) 1289320ae51fSJens Axboe hctx->numa_node = cpu_to_node(i); 1290320ae51fSJens Axboe } 1291320ae51fSJens Axboe } 1292320ae51fSJens Axboe 1293320ae51fSJens Axboe static void blk_mq_map_swqueue(struct request_queue *q) 1294320ae51fSJens Axboe { 1295320ae51fSJens Axboe unsigned int i; 1296320ae51fSJens Axboe struct blk_mq_hw_ctx *hctx; 1297320ae51fSJens Axboe struct blk_mq_ctx *ctx; 1298320ae51fSJens Axboe 1299320ae51fSJens Axboe queue_for_each_hw_ctx(q, hctx, i) { 1300320ae51fSJens Axboe hctx->nr_ctx = 0; 1301320ae51fSJens Axboe } 1302320ae51fSJens Axboe 1303320ae51fSJens Axboe /* 1304320ae51fSJens Axboe * Map software to hardware queues 1305320ae51fSJens Axboe */ 1306320ae51fSJens Axboe queue_for_each_ctx(q, ctx, i) { 1307320ae51fSJens Axboe /* If the cpu isn't online, the cpu is mapped to first hctx */ 1308320ae51fSJens Axboe hctx = q->mq_ops->map_queue(q, i); 1309320ae51fSJens Axboe ctx->index_hw = hctx->nr_ctx; 1310320ae51fSJens Axboe hctx->ctxs[hctx->nr_ctx++] = ctx; 1311320ae51fSJens Axboe } 1312320ae51fSJens Axboe } 1313320ae51fSJens Axboe 1314320ae51fSJens Axboe struct request_queue *blk_mq_init_queue(struct blk_mq_reg *reg, 1315320ae51fSJens Axboe void *driver_data) 1316320ae51fSJens Axboe { 1317320ae51fSJens Axboe struct blk_mq_hw_ctx **hctxs; 1318320ae51fSJens Axboe struct blk_mq_ctx *ctx; 1319320ae51fSJens Axboe struct request_queue *q; 1320320ae51fSJens Axboe int i; 1321320ae51fSJens Axboe 1322320ae51fSJens Axboe if (!reg->nr_hw_queues || 1323320ae51fSJens Axboe !reg->ops->queue_rq || !reg->ops->map_queue || 1324320ae51fSJens Axboe !reg->ops->alloc_hctx || !reg->ops->free_hctx) 1325320ae51fSJens Axboe return ERR_PTR(-EINVAL); 1326320ae51fSJens Axboe 1327320ae51fSJens Axboe if (!reg->queue_depth) 1328320ae51fSJens Axboe reg->queue_depth = BLK_MQ_MAX_DEPTH; 1329320ae51fSJens Axboe else if (reg->queue_depth > BLK_MQ_MAX_DEPTH) { 1330320ae51fSJens Axboe pr_err("blk-mq: queuedepth too large (%u)\n", reg->queue_depth); 1331320ae51fSJens Axboe reg->queue_depth = BLK_MQ_MAX_DEPTH; 1332320ae51fSJens Axboe } 1333320ae51fSJens Axboe 13343228f48bSChristoph Hellwig /* 13353228f48bSChristoph Hellwig * Set aside a tag for flush requests. It will only be used while 13363228f48bSChristoph Hellwig * another flush request is in progress but outside the driver. 13373228f48bSChristoph Hellwig * 13383228f48bSChristoph Hellwig * TODO: only allocate if flushes are supported 13393228f48bSChristoph Hellwig */ 13403228f48bSChristoph Hellwig reg->queue_depth++; 13413228f48bSChristoph Hellwig reg->reserved_tags++; 13423228f48bSChristoph Hellwig 1343320ae51fSJens Axboe if (reg->queue_depth < (reg->reserved_tags + BLK_MQ_TAG_MIN)) 1344320ae51fSJens Axboe return ERR_PTR(-EINVAL); 1345320ae51fSJens Axboe 1346320ae51fSJens Axboe ctx = alloc_percpu(struct blk_mq_ctx); 1347320ae51fSJens Axboe if (!ctx) 1348320ae51fSJens Axboe return ERR_PTR(-ENOMEM); 1349320ae51fSJens Axboe 1350320ae51fSJens Axboe hctxs = kmalloc_node(reg->nr_hw_queues * sizeof(*hctxs), GFP_KERNEL, 1351320ae51fSJens Axboe reg->numa_node); 1352320ae51fSJens Axboe 1353320ae51fSJens Axboe if (!hctxs) 1354320ae51fSJens Axboe goto err_percpu; 1355320ae51fSJens Axboe 1356320ae51fSJens Axboe for (i = 0; i < reg->nr_hw_queues; i++) { 1357320ae51fSJens Axboe hctxs[i] = reg->ops->alloc_hctx(reg, i); 1358320ae51fSJens Axboe if (!hctxs[i]) 1359320ae51fSJens Axboe goto err_hctxs; 1360320ae51fSJens Axboe 1361320ae51fSJens Axboe hctxs[i]->numa_node = NUMA_NO_NODE; 1362320ae51fSJens Axboe hctxs[i]->queue_num = i; 1363320ae51fSJens Axboe } 1364320ae51fSJens Axboe 1365320ae51fSJens Axboe q = blk_alloc_queue_node(GFP_KERNEL, reg->numa_node); 1366320ae51fSJens Axboe if (!q) 1367320ae51fSJens Axboe goto err_hctxs; 1368320ae51fSJens Axboe 1369320ae51fSJens Axboe q->mq_map = blk_mq_make_queue_map(reg); 1370320ae51fSJens Axboe if (!q->mq_map) 1371320ae51fSJens Axboe goto err_map; 1372320ae51fSJens Axboe 1373320ae51fSJens Axboe setup_timer(&q->timeout, blk_mq_rq_timer, (unsigned long) q); 1374320ae51fSJens Axboe blk_queue_rq_timeout(q, 30000); 1375320ae51fSJens Axboe 1376320ae51fSJens Axboe q->nr_queues = nr_cpu_ids; 1377320ae51fSJens Axboe q->nr_hw_queues = reg->nr_hw_queues; 1378320ae51fSJens Axboe 1379320ae51fSJens Axboe q->queue_ctx = ctx; 1380320ae51fSJens Axboe q->queue_hw_ctx = hctxs; 1381320ae51fSJens Axboe 1382320ae51fSJens Axboe q->mq_ops = reg->ops; 1383*94eddfbeSJens Axboe q->queue_flags |= QUEUE_FLAG_MQ_DEFAULT; 1384320ae51fSJens Axboe 1385320ae51fSJens Axboe blk_queue_make_request(q, blk_mq_make_request); 1386320ae51fSJens Axboe blk_queue_rq_timed_out(q, reg->ops->timeout); 1387320ae51fSJens Axboe if (reg->timeout) 1388320ae51fSJens Axboe blk_queue_rq_timeout(q, reg->timeout); 1389320ae51fSJens Axboe 1390320ae51fSJens Axboe blk_mq_init_flush(q); 1391320ae51fSJens Axboe blk_mq_init_cpu_queues(q, reg->nr_hw_queues); 1392320ae51fSJens Axboe 1393320ae51fSJens Axboe if (blk_mq_init_hw_queues(q, reg, driver_data)) 1394320ae51fSJens Axboe goto err_hw; 1395320ae51fSJens Axboe 1396320ae51fSJens Axboe blk_mq_map_swqueue(q); 1397320ae51fSJens Axboe 1398320ae51fSJens Axboe mutex_lock(&all_q_mutex); 1399320ae51fSJens Axboe list_add_tail(&q->all_q_node, &all_q_list); 1400320ae51fSJens Axboe mutex_unlock(&all_q_mutex); 1401320ae51fSJens Axboe 1402320ae51fSJens Axboe return q; 1403320ae51fSJens Axboe err_hw: 1404320ae51fSJens Axboe kfree(q->mq_map); 1405320ae51fSJens Axboe err_map: 1406320ae51fSJens Axboe blk_cleanup_queue(q); 1407320ae51fSJens Axboe err_hctxs: 1408320ae51fSJens Axboe for (i = 0; i < reg->nr_hw_queues; i++) { 1409320ae51fSJens Axboe if (!hctxs[i]) 1410320ae51fSJens Axboe break; 1411320ae51fSJens Axboe reg->ops->free_hctx(hctxs[i], i); 1412320ae51fSJens Axboe } 1413320ae51fSJens Axboe kfree(hctxs); 1414320ae51fSJens Axboe err_percpu: 1415320ae51fSJens Axboe free_percpu(ctx); 1416320ae51fSJens Axboe return ERR_PTR(-ENOMEM); 1417320ae51fSJens Axboe } 1418320ae51fSJens Axboe EXPORT_SYMBOL(blk_mq_init_queue); 1419320ae51fSJens Axboe 1420320ae51fSJens Axboe void blk_mq_free_queue(struct request_queue *q) 1421320ae51fSJens Axboe { 1422320ae51fSJens Axboe struct blk_mq_hw_ctx *hctx; 1423320ae51fSJens Axboe int i; 1424320ae51fSJens Axboe 1425320ae51fSJens Axboe queue_for_each_hw_ctx(q, hctx, i) { 1426320ae51fSJens Axboe cancel_delayed_work_sync(&hctx->delayed_work); 1427320ae51fSJens Axboe kfree(hctx->ctx_map); 1428320ae51fSJens Axboe kfree(hctx->ctxs); 1429320ae51fSJens Axboe blk_mq_free_rq_map(hctx); 1430320ae51fSJens Axboe blk_mq_unregister_cpu_notifier(&hctx->cpu_notifier); 1431320ae51fSJens Axboe if (q->mq_ops->exit_hctx) 1432320ae51fSJens Axboe q->mq_ops->exit_hctx(hctx, i); 1433320ae51fSJens Axboe q->mq_ops->free_hctx(hctx, i); 1434320ae51fSJens Axboe } 1435320ae51fSJens Axboe 1436320ae51fSJens Axboe free_percpu(q->queue_ctx); 1437320ae51fSJens Axboe kfree(q->queue_hw_ctx); 1438320ae51fSJens Axboe kfree(q->mq_map); 1439320ae51fSJens Axboe 1440320ae51fSJens Axboe q->queue_ctx = NULL; 1441320ae51fSJens Axboe q->queue_hw_ctx = NULL; 1442320ae51fSJens Axboe q->mq_map = NULL; 1443320ae51fSJens Axboe 1444320ae51fSJens Axboe mutex_lock(&all_q_mutex); 1445320ae51fSJens Axboe list_del_init(&q->all_q_node); 1446320ae51fSJens Axboe mutex_unlock(&all_q_mutex); 1447320ae51fSJens Axboe } 1448320ae51fSJens Axboe EXPORT_SYMBOL(blk_mq_free_queue); 1449320ae51fSJens Axboe 1450320ae51fSJens Axboe /* Basically redo blk_mq_init_queue with queue frozen */ 1451f618ef7cSPaul Gortmaker static void blk_mq_queue_reinit(struct request_queue *q) 1452320ae51fSJens Axboe { 1453320ae51fSJens Axboe blk_mq_freeze_queue(q); 1454320ae51fSJens Axboe 1455320ae51fSJens Axboe blk_mq_update_queue_map(q->mq_map, q->nr_hw_queues); 1456320ae51fSJens Axboe 1457320ae51fSJens Axboe /* 1458320ae51fSJens Axboe * redo blk_mq_init_cpu_queues and blk_mq_init_hw_queues. FIXME: maybe 1459320ae51fSJens Axboe * we should change hctx numa_node according to new topology (this 1460320ae51fSJens Axboe * involves free and re-allocate memory, worthy doing?) 1461320ae51fSJens Axboe */ 1462320ae51fSJens Axboe 1463320ae51fSJens Axboe blk_mq_map_swqueue(q); 1464320ae51fSJens Axboe 1465320ae51fSJens Axboe blk_mq_unfreeze_queue(q); 1466320ae51fSJens Axboe } 1467320ae51fSJens Axboe 1468f618ef7cSPaul Gortmaker static int blk_mq_queue_reinit_notify(struct notifier_block *nb, 1469320ae51fSJens Axboe unsigned long action, void *hcpu) 1470320ae51fSJens Axboe { 1471320ae51fSJens Axboe struct request_queue *q; 1472320ae51fSJens Axboe 1473320ae51fSJens Axboe /* 1474320ae51fSJens Axboe * Before new mapping is established, hotadded cpu might already start 1475320ae51fSJens Axboe * handling requests. This doesn't break anything as we map offline 1476320ae51fSJens Axboe * CPUs to first hardware queue. We will re-init queue below to get 1477320ae51fSJens Axboe * optimal settings. 1478320ae51fSJens Axboe */ 1479320ae51fSJens Axboe if (action != CPU_DEAD && action != CPU_DEAD_FROZEN && 1480320ae51fSJens Axboe action != CPU_ONLINE && action != CPU_ONLINE_FROZEN) 1481320ae51fSJens Axboe return NOTIFY_OK; 1482320ae51fSJens Axboe 1483320ae51fSJens Axboe mutex_lock(&all_q_mutex); 1484320ae51fSJens Axboe list_for_each_entry(q, &all_q_list, all_q_node) 1485320ae51fSJens Axboe blk_mq_queue_reinit(q); 1486320ae51fSJens Axboe mutex_unlock(&all_q_mutex); 1487320ae51fSJens Axboe return NOTIFY_OK; 1488320ae51fSJens Axboe } 1489320ae51fSJens Axboe 1490320ae51fSJens Axboe static int __init blk_mq_init(void) 1491320ae51fSJens Axboe { 1492320ae51fSJens Axboe unsigned int i; 1493320ae51fSJens Axboe 1494320ae51fSJens Axboe for_each_possible_cpu(i) 1495320ae51fSJens Axboe init_llist_head(&per_cpu(ipi_lists, i)); 1496320ae51fSJens Axboe 1497320ae51fSJens Axboe blk_mq_cpu_init(); 1498320ae51fSJens Axboe 1499320ae51fSJens Axboe /* Must be called after percpu_counter_hotcpu_callback() */ 1500320ae51fSJens Axboe hotcpu_notifier(blk_mq_queue_reinit_notify, -10); 1501320ae51fSJens Axboe 1502320ae51fSJens Axboe return 0; 1503320ae51fSJens Axboe } 1504320ae51fSJens Axboe subsys_initcall(blk_mq_init); 1505