static void blk_mq_map_swqueue(struct request_queue *q)
 {
-       unsigned int i, hctx_idx;
+       unsigned int i;
        struct blk_mq_hw_ctx *hctx;
        struct blk_mq_ctx *ctx;
        struct blk_mq_tag_set *set = q->tag_set;
 
        /*
         * Map software to hardware queues.
-        *
-        * If the cpu isn't present, the cpu is mapped to first hctx.
         */
        for_each_possible_cpu(i) {
-               hctx_idx = q->mq_map[i];
-               /* unmapped hw queue can be remapped after CPU topo changed */
-               if (!set->tags[hctx_idx] &&
-                   !__blk_mq_alloc_rq_map(set, hctx_idx)) {
-                       /*
-                        * If tags initialization fail for some hctx,
-                        * that hctx won't be brought online.  In this
-                        * case, remap the current ctx to hctx[0] which
-                        * is guaranteed to always have tags allocated
-                        */
-                       q->mq_map[i] = 0;
-               }
-
                ctx = per_cpu_ptr(q->queue_ctx, i);
                hctx = blk_mq_map_queue(q, i);
 
        mutex_unlock(&q->sysfs_lock);
 
        queue_for_each_hw_ctx(q, hctx, i) {
-               /*
-                * If no software queues are mapped to this hardware queue,
-                * disable it and free the request entries.
-                */
-               if (!hctx->nr_ctx) {
-                       /* Never unmap queue 0.  We need it as a
-                        * fallback in case of a new remap fails
-                        * allocation
-                        */
-                       if (i && set->tags[i])
-                               blk_mq_free_map_and_requests(set, i);
-
-                       hctx->tags = NULL;
-                       continue;
-               }
+               /* every hctx should get mapped by at least one CPU */
+               WARN_ON(!hctx->nr_ctx);
 
                hctx->tags = set->tags[i];
                WARN_ON(!hctx->tags);