Commit e6806137 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'irq_urgent_for_v5.11_rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull irq fixes from Borislav Petkov:

 - Fix a kernel panic in mips-cpu due to invalid irq domain hierarchy.

 - Fix to not lose IPIs on bcm2836.

 - Fix for a bogus marking of ITS devices as shared due to unitialized
   stack variable.

 - Clear a phantom interrupt on qcom-pdc to unblock suspend.

 - Small cleanups, warning and build fixes.

* tag 'irq_urgent_for_v5.11_rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  genirq: Export irq_check_status_bit()
  irqchip/mips-cpu: Set IPI domain parent chip
  irqchip/pruss: Simplify the TI_PRUSS_INTC Kconfig
  irqchip/loongson-liointc: Fix build warnings
  driver core: platform: Add extra error check in devm_platform_get_irqs_affinity()
  irqchip/bcm2836: Fix IPI acknowledgement after conversion to handle_percpu_devid_irq
  irqchip/irq-sl28cpld: Convert comma to semicolon
  genirq/msi: Initialize msi_alloc_info before calling msi_domain_prepare_irqs()
parents 32d43270 ce09ccc5
...@@ -366,6 +366,8 @@ int devm_platform_get_irqs_affinity(struct platform_device *dev, ...@@ -366,6 +366,8 @@ int devm_platform_get_irqs_affinity(struct platform_device *dev,
return -ERANGE; return -ERANGE;
nvec = platform_irq_count(dev); nvec = platform_irq_count(dev);
if (nvec < 0)
return nvec;
if (nvec < minvec) if (nvec < minvec)
return -ENOSPC; return -ENOSPC;
......
...@@ -493,8 +493,9 @@ config TI_SCI_INTA_IRQCHIP ...@@ -493,8 +493,9 @@ config TI_SCI_INTA_IRQCHIP
TI System Controller, say Y here. Otherwise, say N. TI System Controller, say Y here. Otherwise, say N.
config TI_PRUSS_INTC config TI_PRUSS_INTC
tristate "TI PRU-ICSS Interrupt Controller" tristate
depends on ARCH_DAVINCI || SOC_AM33XX || SOC_AM43XX || SOC_DRA7XX || ARCH_KEYSTONE || ARCH_K3 depends on TI_PRUSS
default TI_PRUSS
select IRQ_DOMAIN select IRQ_DOMAIN
help help
This enables support for the PRU-ICSS Local Interrupt Controller This enables support for the PRU-ICSS Local Interrupt Controller
......
...@@ -167,7 +167,7 @@ static void bcm2836_arm_irqchip_handle_ipi(struct irq_desc *desc) ...@@ -167,7 +167,7 @@ static void bcm2836_arm_irqchip_handle_ipi(struct irq_desc *desc)
chained_irq_exit(chip, desc); chained_irq_exit(chip, desc);
} }
static void bcm2836_arm_irqchip_ipi_eoi(struct irq_data *d) static void bcm2836_arm_irqchip_ipi_ack(struct irq_data *d)
{ {
int cpu = smp_processor_id(); int cpu = smp_processor_id();
...@@ -195,7 +195,7 @@ static struct irq_chip bcm2836_arm_irqchip_ipi = { ...@@ -195,7 +195,7 @@ static struct irq_chip bcm2836_arm_irqchip_ipi = {
.name = "IPI", .name = "IPI",
.irq_mask = bcm2836_arm_irqchip_dummy_op, .irq_mask = bcm2836_arm_irqchip_dummy_op,
.irq_unmask = bcm2836_arm_irqchip_dummy_op, .irq_unmask = bcm2836_arm_irqchip_dummy_op,
.irq_eoi = bcm2836_arm_irqchip_ipi_eoi, .irq_ack = bcm2836_arm_irqchip_ipi_ack,
.ipi_send_mask = bcm2836_arm_irqchip_ipi_send_mask, .ipi_send_mask = bcm2836_arm_irqchip_ipi_send_mask,
}; };
......
...@@ -142,7 +142,7 @@ static void liointc_resume(struct irq_chip_generic *gc) ...@@ -142,7 +142,7 @@ static void liointc_resume(struct irq_chip_generic *gc)
static const char * const parent_names[] = {"int0", "int1", "int2", "int3"}; static const char * const parent_names[] = {"int0", "int1", "int2", "int3"};
int __init liointc_of_init(struct device_node *node, static int __init liointc_of_init(struct device_node *node,
struct device_node *parent) struct device_node *parent)
{ {
struct irq_chip_generic *gc; struct irq_chip_generic *gc;
......
...@@ -197,6 +197,13 @@ static int mips_cpu_ipi_alloc(struct irq_domain *domain, unsigned int virq, ...@@ -197,6 +197,13 @@ static int mips_cpu_ipi_alloc(struct irq_domain *domain, unsigned int virq,
if (ret) if (ret)
return ret; return ret;
ret = irq_domain_set_hwirq_and_chip(domain->parent, virq + i, hwirq,
&mips_mt_cpu_irq_controller,
NULL);
if (ret)
return ret;
ret = irq_set_irq_type(virq + i, IRQ_TYPE_LEVEL_HIGH); ret = irq_set_irq_type(virq + i, IRQ_TYPE_LEVEL_HIGH);
if (ret) if (ret)
return ret; return ret;
......
...@@ -66,7 +66,7 @@ static int sl28cpld_intc_probe(struct platform_device *pdev) ...@@ -66,7 +66,7 @@ static int sl28cpld_intc_probe(struct platform_device *pdev)
irqchip->chip.num_regs = 1; irqchip->chip.num_regs = 1;
irqchip->chip.status_base = base + INTC_IP; irqchip->chip.status_base = base + INTC_IP;
irqchip->chip.mask_base = base + INTC_IE; irqchip->chip.mask_base = base + INTC_IE;
irqchip->chip.mask_invert = true, irqchip->chip.mask_invert = true;
irqchip->chip.ack_base = base + INTC_IP; irqchip->chip.ack_base = base + INTC_IP;
return devm_regmap_add_irq_chip_fwnode(dev, dev_fwnode(dev), return devm_regmap_add_irq_chip_fwnode(dev, dev_fwnode(dev),
......
...@@ -2859,3 +2859,4 @@ bool irq_check_status_bit(unsigned int irq, unsigned int bitmask) ...@@ -2859,3 +2859,4 @@ bool irq_check_status_bit(unsigned int irq, unsigned int bitmask)
rcu_read_unlock(); rcu_read_unlock();
return res; return res;
} }
EXPORT_SYMBOL_GPL(irq_check_status_bit);
...@@ -402,7 +402,7 @@ int __msi_domain_alloc_irqs(struct irq_domain *domain, struct device *dev, ...@@ -402,7 +402,7 @@ int __msi_domain_alloc_irqs(struct irq_domain *domain, struct device *dev,
struct msi_domain_ops *ops = info->ops; struct msi_domain_ops *ops = info->ops;
struct irq_data *irq_data; struct irq_data *irq_data;
struct msi_desc *desc; struct msi_desc *desc;
msi_alloc_info_t arg; msi_alloc_info_t arg = { };
int i, ret, virq; int i, ret, virq;
bool can_reserve; bool can_reserve;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment