On Mon, 2018-02-05 at 23:20 +0800, Ming Lei wrote:
> diff --git a/block/blk-mq-sched.c b/block/blk-mq-sched.c
> index 55c0a745b427..385bbec73804 100644
> --- a/block/blk-mq-sched.c
> +++ b/block/blk-mq-sched.c
> @@ -81,6 +81,17 @@ static bool blk_mq_sched_restart_hctx(struct blk_mq_hw_ctx 
> *hctx)
>       } else
>               clear_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state);
>  
> +     /* need to restart all hw queues for global tags */
> +     if (hctx->flags & BLK_MQ_F_GLOBAL_TAGS) {
> +             struct blk_mq_hw_ctx *hctx2;
> +             int i;
> +
> +             queue_for_each_hw_ctx(hctx->queue, hctx2, i)
> +                     if (blk_mq_run_hw_queue(hctx2, true))
> +                             return true;
> +             return false;
> +     }
> +
>       return blk_mq_run_hw_queue(hctx, true);
>  }

It seems weird to me that no matter for which hardware queue a restart is
requested (the hctx argument) that the above loop starts with examining
the hardware queue with index 0. Will this cause fairness and/or cache
line bouncing problems?

Thanks,

Bart.




Reply via email to