Skip to content

Commit 8c46ed3

Browse files
committed
Merge tag 'irq_urgent_for_v6.8_rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull irq fixes from Borislav Petkov: - Make sure GICv4 always gets initialized to prevent a kexec-ed kernel from silently failing to set it up - Do not call bus_get_dev_root() for the mbigen irqchip as it always returns NULL - use NULL directly - Fix hardware interrupt number truncation when assigning MSI interrupts - Correct sending end-of-interrupt messages to disabled interrupts lines on RISC-V PLIC * tag 'irq_urgent_for_v6.8_rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: irqchip/gic-v3-its: Do not assume vPE tables are preallocated irqchip/mbigen: Don't use bus_get_dev_root() to find the parent PCI/MSI: Prevent MSI hardware interrupt number truncation irqchip/sifive-plic: Enable interrupt if needed before EOI
2 parents 4ca0d98 + ec4308e commit 8c46ed3

File tree

4 files changed

+10
-10
lines changed

4 files changed

+10
-10
lines changed

drivers/irqchip/irq-gic-v3-its.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3181,6 +3181,7 @@ static void its_cpu_init_lpis(void)
31813181
val |= GICR_CTLR_ENABLE_LPIS;
31823182
writel_relaxed(val, rbase + GICR_CTLR);
31833183

3184+
out:
31843185
if (gic_rdists->has_vlpis && !gic_rdists->has_rvpeid) {
31853186
void __iomem *vlpi_base = gic_data_rdist_vlpi_base();
31863187

@@ -3216,7 +3217,6 @@ static void its_cpu_init_lpis(void)
32163217

32173218
/* Make sure the GIC has seen the above */
32183219
dsb(sy);
3219-
out:
32203220
gic_data_rdist()->flags |= RD_LOCAL_LPI_ENABLED;
32213221
pr_info("GICv3: CPU%d: using %s LPI pending table @%pa\n",
32223222
smp_processor_id(),

drivers/irqchip/irq-mbigen.c

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -235,22 +235,17 @@ static const struct irq_domain_ops mbigen_domain_ops = {
235235
static int mbigen_of_create_domain(struct platform_device *pdev,
236236
struct mbigen_device *mgn_chip)
237237
{
238-
struct device *parent;
239238
struct platform_device *child;
240239
struct irq_domain *domain;
241240
struct device_node *np;
242241
u32 num_pins;
243242
int ret = 0;
244243

245-
parent = bus_get_dev_root(&platform_bus_type);
246-
if (!parent)
247-
return -ENODEV;
248-
249244
for_each_child_of_node(pdev->dev.of_node, np) {
250245
if (!of_property_read_bool(np, "interrupt-controller"))
251246
continue;
252247

253-
child = of_platform_device_create(np, NULL, parent);
248+
child = of_platform_device_create(np, NULL, NULL);
254249
if (!child) {
255250
ret = -ENOMEM;
256251
break;
@@ -273,7 +268,6 @@ static int mbigen_of_create_domain(struct platform_device *pdev,
273268
}
274269
}
275270

276-
put_device(parent);
277271
if (ret)
278272
of_node_put(np);
279273

drivers/irqchip/irq-sifive-plic.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,13 @@ static void plic_irq_eoi(struct irq_data *d)
148148
{
149149
struct plic_handler *handler = this_cpu_ptr(&plic_handlers);
150150

151-
writel(d->hwirq, handler->hart_base + CONTEXT_CLAIM);
151+
if (unlikely(irqd_irq_disabled(d))) {
152+
plic_toggle(handler, d->hwirq, 1);
153+
writel(d->hwirq, handler->hart_base + CONTEXT_CLAIM);
154+
plic_toggle(handler, d->hwirq, 0);
155+
} else {
156+
writel(d->hwirq, handler->hart_base + CONTEXT_CLAIM);
157+
}
152158
}
153159

154160
#ifdef CONFIG_SMP

drivers/pci/msi/irqdomain.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ static irq_hw_number_t pci_msi_domain_calc_hwirq(struct msi_desc *desc)
6161

6262
return (irq_hw_number_t)desc->msi_index |
6363
pci_dev_id(dev) << 11 |
64-
(pci_domain_nr(dev->bus) & 0xFFFFFFFF) << 27;
64+
((irq_hw_number_t)(pci_domain_nr(dev->bus) & 0xFFFFFFFF)) << 27;
6565
}
6666

6767
static void pci_msi_domain_set_desc(msi_alloc_info_t *arg,

0 commit comments

Comments
 (0)