On Wed, Jul 12, 2023 at 03:00:17PM +0200, Christoph Hellwig wrote: > On Wed, Jul 12, 2023 at 08:54:48PM +0800, Ming Lei wrote: > > +/* Max nr_hw_queues for each hw queue type */ > > +unsigned int blk_mq_max_nr_hw_queues(void) > > +{ > > + if (is_kdump_kernel()) > > + return 1; > > + return nr_cpu_ids; > > Again, these is_kdump_kernel hacks don't make any sense. The amount > of maximum available CPU needs to come through a proper API, and we > need to use it, not add hacks like this. > > The only thing that makes sense here is to find the last CPU > in cpu_possible_mask, and for kdump kernels to ensure that number > is 1 or whatever low value they want. It doesn't matter how many cpus are available, given at least one cpu is online. The problem is that blk_mq_alloc_tag_set() forces to set nr_hw_queues as 1 for kdump kernel, that is why blk_mq_max_nr_hw_queues() has to return 1 for kdump kernel. We have to tell driver that blk-mq only supports 1 queue for kdump kernel. Or: Thomas, can we disable managed irq for kdump kernel and switch to non-managed irq? Then we can avoid driver's change. I'd suggest this way if it is possible. Thanks, Ming