[PATCH v1] bus: mhi: host: pci_generic: round up nr_irqs to a power of two

Javier Achirica <[email protected]> Fri, 3 Apr 2026 12:30:03 +0200
Newsgroups dev.linux.lists.mhi
Message-ID <CACixm21q7b_diEx5COZxVZm9EhZ0hnakM_WBjEWcCsznfWeniw@mail.gmail.com>
When an MHI device uses standard MSI, the PCI core requires the allocated
number of vectors to be a strict power of two but devices will only ask for the
irqs they need, so they might not be properly aligned.

Make sure a power-of-2 number of vectors is requested.

Signed-off-by: Javier Achirica <[email protected]>
---
diff --git a/drivers/bus/mhi/host/pci_generic.c
b/drivers/bus/mhi/host/pci_generic.c
index 750da3dbb4c6..d6477ba4b4b3 100644
--- a/drivers/bus/mhi/host/pci_generic.c
+++ b/drivers/bus/mhi/host/pci_generic.c
@@ -1189,7 +1189,8 @@ static int mhi_pci_get_irqs(struct
mhi_controller *mhi_cntrl,
         */
        mhi_cntrl->nr_irqs = 1 + mhi_cntrl_config->num_events;

-       nr_vectors = pci_alloc_irq_vectors(pdev, 1,
mhi_cntrl->nr_irqs, PCI_IRQ_MSIX | PCI_IRQ_MSI);
+       nr_vectors = pci_alloc_irq_vectors(pdev, 1,
+                       roundup_pow_of_two(mhi_cntrl->nr_irqs),
PCI_IRQ_MSIX | PCI_IRQ_MSI);
        if (nr_vectors < 0) {
                dev_err(&pdev->dev, "Error allocating MSI vectors %d\n",
                        nr_vectors);