Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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

+10 -10
+1 -1
drivers/irqchip/irq-gic-v3-its.c
··· 3181 3181 val |= GICR_CTLR_ENABLE_LPIS; 3182 3182 writel_relaxed(val, rbase + GICR_CTLR); 3183 3183 3184 + out: 3184 3185 if (gic_rdists->has_vlpis && !gic_rdists->has_rvpeid) { 3185 3186 void __iomem *vlpi_base = gic_data_rdist_vlpi_base(); 3186 3187 ··· 3217 3216 3218 3217 /* Make sure the GIC has seen the above */ 3219 3218 dsb(sy); 3220 - out: 3221 3219 gic_data_rdist()->flags |= RD_LOCAL_LPI_ENABLED; 3222 3220 pr_info("GICv3: CPU%d: using %s LPI pending table @%pa\n", 3223 3221 smp_processor_id(),
+1 -7
drivers/irqchip/irq-mbigen.c
··· 235 235 static int mbigen_of_create_domain(struct platform_device *pdev, 236 236 struct mbigen_device *mgn_chip) 237 237 { 238 - struct device *parent; 239 238 struct platform_device *child; 240 239 struct irq_domain *domain; 241 240 struct device_node *np; 242 241 u32 num_pins; 243 242 int ret = 0; 244 243 245 - parent = bus_get_dev_root(&platform_bus_type); 246 - if (!parent) 247 - return -ENODEV; 248 - 249 244 for_each_child_of_node(pdev->dev.of_node, np) { 250 245 if (!of_property_read_bool(np, "interrupt-controller")) 251 246 continue; 252 247 253 - child = of_platform_device_create(np, NULL, parent); 248 + child = of_platform_device_create(np, NULL, NULL); 254 249 if (!child) { 255 250 ret = -ENOMEM; 256 251 break; ··· 268 273 } 269 274 } 270 275 271 - put_device(parent); 272 276 if (ret) 273 277 of_node_put(np); 274 278
+7 -1
drivers/irqchip/irq-sifive-plic.c
··· 148 148 { 149 149 struct plic_handler *handler = this_cpu_ptr(&plic_handlers); 150 150 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 + } 152 158 } 153 159 154 160 #ifdef CONFIG_SMP
+1 -1
drivers/pci/msi/irqdomain.c
··· 61 61 62 62 return (irq_hw_number_t)desc->msi_index | 63 63 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; 65 65 } 66 66 67 67 static void pci_msi_domain_set_desc(msi_alloc_info_t *arg,