From ba6684fc0351887d128994546419439233c3c9ad Mon Sep 17 00:00:00 2001 From: Juxin Gao Date: Mon, 29 May 2023 09:36:10 +0800 Subject: [PATCH] pci: irq: Add early_param pci_irq_limit to limit pci irq numbers LoongArch inclusion category: feature bugzilla: https://gitee.com/openeuler/kernel/issues/I7AHL9 -------------------------------- Change-Id: Idce5400a65352d38f08d11548dfa43280cb71d03 Signed-off-by: Juxin Gao Signed-off-by: Hongchen Zhang (cherry picked from commit c80498e80e1c57c3eed70ba06e099a7c855fe22a) --- drivers/pci/msi.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c index 033c134e0bbd..b48a762f7c7a 100644 --- a/drivers/pci/msi.c +++ b/drivers/pci/msi.c @@ -1107,12 +1107,32 @@ int pci_msi_enabled(void) } EXPORT_SYMBOL(pci_msi_enabled); +#ifdef CONFIG_LOONGARCH +static unsigned int pci_irq_numbers = 32; + +static int __init pci_irq_limit(char *str) +{ + get_option(&str, &pci_irq_numbers); + + if (pci_irq_numbers == 0) + pci_irq_numbers = 32; + return 0; +} + +early_param("pci_irq_limit", pci_irq_limit); +#endif + static int __pci_enable_msi_range(struct pci_dev *dev, int minvec, int maxvec, struct irq_affinity *affd) { int nvec; int rc; +#ifdef CONFIG_LOONGARCH + if (maxvec > 32) + maxvec = pci_irq_numbers; +#endif + if (!pci_msi_supported(dev, minvec) || dev->current_state != PCI_D0) return -EINVAL; @@ -1174,6 +1194,11 @@ static int __pci_enable_msix_range(struct pci_dev *dev, { int rc, nvec = maxvec; +#ifdef CONFIG_LOONGARCH + if (maxvec > 32) + nvec = pci_irq_numbers; +#endif + if (maxvec < minvec) return -ERANGE; -- GitLab