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.16_rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull irq fixes from Borislav Petkov:

- Fix missing prototypes warnings

- Properly initialize work context when allocating it

- Remove a method tracking when managed interrupts are suspended during
hotplug, in favor of the code using a IRQ disable depth tracking now,
and have interrupts get properly enabled again on restore

- Make sure multiple CPUs getting hotplugged don't cause wrong tracking
of the managed IRQ disable depth

* tag 'irq_urgent_for_v6.16_rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
irqchip/ath79-misc: Fix missing prototypes warnings
genirq/irq_sim: Initialize work context pointers properly
genirq/cpuhotplug: Restore affinity even for suspended IRQ
genirq/cpuhotplug: Rebalance managed interrupts across multi-CPU hotplug

+11 -26
+2 -18
drivers/irqchip/irq-ath79-misc.c
··· 15 15 #include <linux/of_address.h> 16 16 #include <linux/of_irq.h> 17 17 18 + #include <asm/time.h> 19 + 18 20 #define AR71XX_RESET_REG_MISC_INT_STATUS 0 19 21 #define AR71XX_RESET_REG_MISC_INT_ENABLE 4 20 22 ··· 179 177 180 178 IRQCHIP_DECLARE(ar7240_misc_intc, "qca,ar7240-misc-intc", 181 179 ar7240_misc_intc_of_init); 182 - 183 - void __init ath79_misc_irq_init(void __iomem *regs, int irq, 184 - int irq_base, bool is_ar71xx) 185 - { 186 - struct irq_domain *domain; 187 - 188 - if (is_ar71xx) 189 - ath79_misc_irq_chip.irq_mask_ack = ar71xx_misc_irq_mask; 190 - else 191 - ath79_misc_irq_chip.irq_ack = ar724x_misc_irq_ack; 192 - 193 - domain = irq_domain_create_legacy(NULL, ATH79_MISC_IRQ_COUNT, 194 - irq_base, 0, &misc_irq_domain_ops, regs); 195 - if (!domain) 196 - panic("Failed to create MISC irqdomain"); 197 - 198 - ath79_misc_intc_domain_init(domain, irq); 199 - }
+8
kernel/irq/chip.c
··· 205 205 206 206 void irq_startup_managed(struct irq_desc *desc) 207 207 { 208 + struct irq_data *d = irq_desc_get_irq_data(desc); 209 + 210 + /* 211 + * Clear managed-shutdown flag, so we don't repeat managed-startup for 212 + * multiple hotplugs, and cause imbalanced disable depth. 213 + */ 214 + irqd_clr_managed_shutdown(d); 215 + 208 216 /* 209 217 * Only start it up when the disable depth is 1, so that a disable, 210 218 * hotunplug, hotplug sequence does not end up enabling it during
-7
kernel/irq/cpuhotplug.c
··· 210 210 !irq_data_get_irq_chip(data) || !cpumask_test_cpu(cpu, affinity)) 211 211 return; 212 212 213 - /* 214 - * Don't restore suspended interrupts here when a system comes back 215 - * from S3. They are reenabled via resume_device_irqs(). 216 - */ 217 - if (desc->istate & IRQS_SUSPENDED) 218 - return; 219 - 220 213 if (irqd_is_managed_and_shutdown(data)) 221 214 irq_startup_managed(desc); 222 215
+1 -1
kernel/irq/irq_sim.c
··· 202 202 void *data) 203 203 { 204 204 struct irq_sim_work_ctx *work_ctx __free(kfree) = 205 - kmalloc(sizeof(*work_ctx), GFP_KERNEL); 205 + kzalloc(sizeof(*work_ctx), GFP_KERNEL); 206 206 207 207 if (!work_ctx) 208 208 return ERR_PTR(-ENOMEM);