diff --git a/block/blk-mq.h b/block/blk-mq.h index eaede8e45c9c..5a8ab6c2abe5 100644 --- a/block/blk-mq.h +++ b/block/blk-mq.h @@ -118,4 +118,22 @@ static inline bool blk_mq_hw_queue_mapped(struct blk_mq_hw_ctx *hctx) return hctx->nr_ctx && hctx->tags; } +static inline struct blk_mq_ctx *next_ctx(struct request_queue *q, int *i) +{ + do { + (*i)++; + if (*i < q->nr_queues) { + if (cpu_possible(*i)) + return per_cpu_ptr(q->queue_ctx, *i); + continue; + } + break; + } while (1); + + return NULL; +} + +#define queue_for_each_ctx(q, ctx, i) \ + for ((i) = 0; (ctx = next_ctx((q), &(i))) != NULL;) + #endif diff --git a/include/linux/blk-mq.h b/include/linux/blk-mq.h index 7fc9296b5742..a8756cd00767 100644 --- a/include/linux/blk-mq.h +++ b/include/linux/blk-mq.h @@ -261,22 +261,8 @@ static inline void *blk_mq_rq_to_pdu(struct request *rq) for ((i) = 0; (i) < (q)->nr_hw_queues && \ ({ hctx = (q)->queue_hw_ctx[i]; 1; }); (i)++) -#define queue_for_each_ctx(q, ctx, i) \ - for ((i) = 0; (i) < (q)->nr_queues && \ - ({ ctx = per_cpu_ptr((q)->queue_ctx, (i)); 1; }); (i)++) - #define hctx_for_each_ctx(hctx, ctx, i) \ for ((i) = 0; (i) < (hctx)->nr_ctx && \ ({ ctx = (hctx)->ctxs[(i)]; 1; }); (i)++) -#define blk_ctx_sum(q, sum) \ -({ \ - struct blk_mq_ctx *__x; \ - unsigned int __ret = 0, __i; \ - \ - queue_for_each_ctx((q), __x, __i) \ - __ret += sum; \ - __ret; \ -}) - #endif