[PATCH 8/8] scsi: pm8001: take blk_mq_max_nr_hw_queues() into account for calculating io vectors
Jinpu Wang
jinpu.wang at ionos.com
Wed Jul 12 06:12:08 PDT 2023
On Wed, Jul 12, 2023 at 2:55 PM Ming Lei <ming.lei at redhat.com> 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 kernel 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: Jack Wang <jinpu.wang at cloud.ionos.com>
> Signed-off-by: Ming Lei <ming.lei at redhat.com>
Acked-by: Jack Wang <jinpu.wang at ionos.com>
thx!
> ---
> drivers/scsi/pm8001/pm8001_init.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/scsi/pm8001/pm8001_init.c b/drivers/scsi/pm8001/pm8001_init.c
> index 2e886c1d867d..e2416f556560 100644
> --- a/drivers/scsi/pm8001/pm8001_init.c
> +++ b/drivers/scsi/pm8001/pm8001_init.c
> @@ -965,6 +965,8 @@ static u32 pm8001_setup_msix(struct pm8001_hba_info *pm8001_ha)
> rc = pci_alloc_irq_vectors(pm8001_ha->pdev, 1, 1,
> PCI_IRQ_MSIX);
> } else {
> + unsigned int max_vecs = min_t(unsigned int, PM8001_MAX_MSIX_VEC,
> + blk_mq_max_nr_hw_queues() + 1);
> /*
> * Queue index #0 is used always for housekeeping, so don't
> * include in the affinity spreading.
> @@ -973,7 +975,7 @@ static u32 pm8001_setup_msix(struct pm8001_hba_info *pm8001_ha)
> .pre_vectors = 1,
> };
> rc = pci_alloc_irq_vectors_affinity(
> - pm8001_ha->pdev, 2, PM8001_MAX_MSIX_VEC,
> + pm8001_ha->pdev, 2, max_vecs,
> PCI_IRQ_MSIX | PCI_IRQ_AFFINITY, &desc);
> }
>
> --
> 2.40.1
>
More information about the Linux-nvme
mailing list