Commit 7c079007 authored by Juxin Gao's avatar Juxin Gao Committed by Hongchen Zhang
Browse files

drivers/irqchip: Disable pci_irq_limit when using AVEC interrupt controller

LoongArch inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/IB8166


CVE: NA

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

In the new interrupt model, the AVEC interrupt controller no longer
has a limit on the number of interrupts like the extended interrupt
controller, so when using the avec interrupt model, pci_irq_limit
is disabled by default.

Signed-off-by: default avatarJuxin Gao <gaojuxin@loongson.cn>
parent bc72ea05
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@

#define VECSIZE 0x200

extern bool disable_pci_irq_limit;
extern unsigned long eentry;
extern unsigned long tlbrentry;
extern char init_command_line[COMMAND_LINE_SIZE];
+2 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ struct pending_list {
	struct list_head	head;
};

bool disable_pci_irq_limit;
static struct cpumask intersect_mask;
static DEFINE_PER_CPU(struct pending_list, pending_list);
#endif
@@ -372,6 +373,7 @@ static int __init avecintc_init(struct irq_domain *parent)
	int ret, parent_irq;
	unsigned long value;

	disable_pci_irq_limit = true;
	raw_spin_lock_init(&loongarch_avec.lock);

	loongarch_avec.fwnode = irq_domain_alloc_named_fwnode("AVECINTC");
+12 −6
Original line number Diff line number Diff line
@@ -421,6 +421,8 @@ static int msi_capability_init(struct pci_dev *dev, int nvec,
}

#ifdef CONFIG_LOONGARCH
#include <asm/setup.h>

static unsigned int pci_irq_numbers = 32;

static int __init pci_irq_limit(char *str)
@@ -442,10 +444,12 @@ int __pci_enable_msi_range(struct pci_dev *dev, int minvec, int maxvec,
	int rc;

#ifdef CONFIG_LOONGARCH
	if (!disable_pci_irq_limit) {
		if (maxvec > 32) {
			maxvec = pci_irq_numbers;
			minvec = min_t(int, pci_irq_numbers, minvec);
		}
	}
#endif

	if (!pci_msi_supported(dev, minvec) || dev->current_state != PCI_D0)
@@ -838,10 +842,12 @@ int __pci_enable_msix_range(struct pci_dev *dev, struct msix_entry *entries, int
	int hwsize, rc, nvec = maxvec;

#ifdef CONFIG_LOONGARCH
	if (!disable_pci_irq_limit) {
		if (maxvec > 32) {
			nvec = pci_irq_numbers;
			minvec = min_t(int, pci_irq_numbers, minvec);
		}
	}
#endif

	if (maxvec < minvec)