//https://elixir.bootlin.com/linux/v6.0/source/drivers/nvme/host/pci.c staticunsignedint poll_queues; module_param_cb(poll_queues, &io_queue_count_ops, &poll_queues, 0644); MODULE_PARM_DESC(poll_queues, "Number of queues to use for polled IO.");
/* * Poll queues don't need interrupts, but we need at least one I/O queue * left over for non-polled I/O. */ poll_queues = min(dev->nr_poll_queues, nr_io_queues - 1); dev->io_queues[HCTX_TYPE_POLL] = poll_queues;
/* * Initialize for the single interrupt case, will be updated in * nvme_calc_irq_sets(). */ dev->io_queues[HCTX_TYPE_DEFAULT] = 1; dev->io_queues[HCTX_TYPE_READ] = 0;
/* * We need interrupts for the admin queue and each non-polled I/O queue, * but some Apple controllers require all queues to use the first * vector. */ irq_queues = 1; if (!(dev->ctrl.quirks & NVME_QUIRK_SINGLE_VECTOR)) irq_queues += (nr_io_queues - poll_queues); return pci_alloc_irq_vectors_affinity(pdev, 1, irq_queues, PCI_IRQ_ALL_TYPES | PCI_IRQ_AFFINITY, &affd); }