On Thu, 14 Feb 2019, Ming Lei wrote: > +static void nvme_calc_irq_sets(struct irq_affinity *affd, int nvecs) > +{ > + struct nvme_dev *dev = affd->priv; > + > + nvme_calc_io_queues(dev, nvecs); > + > + affd->set_size[HCTX_TYPE_DEFAULT] = dev->io_queues[HCTX_TYPE_DEFAULT]; > + affd->set_size[HCTX_TYPE_READ] = dev->io_queues[HCTX_TYPE_READ]; > + affd->nr_sets = 2; That's not really correct. > - nvme_calc_io_queues(dev, irq_queues); > - irq_sets[0] = dev->io_queues[HCTX_TYPE_DEFAULT]; > - irq_sets[1] = dev->io_queues[HCTX_TYPE_READ]; > - if (!irq_sets[1]) > - affd.nr_sets = 1; -----------------------^^^^^^^^^^^^^^^^^^ That happens when the number of interrupts becomes too small to have split queues. I'll fix that up. Thanks, tglx