On Tue, Aug 08, 2023 at 06:42:29PM +0800, Ming Lei wrote: > Take blk-mq's knowledge into account for calculating io queues. > > Fix wrong queue mapping in case of kdump kernel. > > On arm and ppc64, 'maxcpus=1' is passed to kdump command line, see > `Documentation/admin-guide/kdump/kdump.rst`, so num_possible_cpus() > still returns all CPUs because 'maxcpus=1' just bring up one single > cpu core during booting. > > blk-mq sees single queue in kdump kernel, and in driver's viewpoint > there are still multiple queues, this inconsistency causes driver to apply > wrong queue mapping for handling IO, and IO timeout is triggered. > > Meantime, single queue makes much less resource utilization, and reduce > risk of kernel failure. > > Cc: Michael S. Tsirkin <mst@xxxxxxxxxx> > Cc: Jason Wang <jasowang@xxxxxxxxxx> > Cc: virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx > Signed-off-by: Ming Lei <ming.lei@xxxxxxxxxx> superficially: Acked-by: Michael S. Tsirkin <mst@xxxxxxxxxx> but this patch only makes sense if the rest of patchset is merged. feel free to merge directly. > --- > drivers/block/virtio_blk.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c > index 1fe011676d07..4ba79fe2a1b4 100644 > --- a/drivers/block/virtio_blk.c > +++ b/drivers/block/virtio_blk.c > @@ -1047,7 +1047,8 @@ static int init_vq(struct virtio_blk *vblk) > > num_poll_vqs = min_t(unsigned int, poll_queues, num_vqs - 1); > > - vblk->io_queues[HCTX_TYPE_DEFAULT] = num_vqs - num_poll_vqs; > + vblk->io_queues[HCTX_TYPE_DEFAULT] = min_t(unsigned, > + num_vqs - num_poll_vqs, blk_mq_max_nr_hw_queues()); > vblk->io_queues[HCTX_TYPE_READ] = 0; > vblk->io_queues[HCTX_TYPE_POLL] = num_poll_vqs; > > -- > 2.40.1 _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/virtualization