Commit 5bd43cec authored by Juxin Gao's avatar Juxin Gao Committed by Hongchen Zhang
Browse files

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



--------------------------------

Signed-off-by: default avatarJuxin Gao <gaojuxin@loongson.cn>
Signed-off-by: default avatarHongchen Zhang <zhanghongchen@loongson.cn>
parent 7012ea3a
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
@@ -402,12 +402,32 @@ static int msi_capability_init(struct pci_dev *dev, int nvec,
	return ret;
}

#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

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;

@@ -778,6 +798,11 @@ int __pci_enable_msix_range(struct pci_dev *dev, struct msix_entry *entries, int
{
	int hwsize, rc, nvec = maxvec;

#ifdef CONFIG_LOONGARCH
	if (maxvec > 32)
		nvec = pci_irq_numbers;
#endif

	if (maxvec < minvec)
		return -ERANGE;