mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-14 02:09:07 +08:00
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
This commit is contained in:
@@ -15,6 +15,8 @@
|
||||
#include <linux/of_address.h>
|
||||
#include <linux/of_irq.h>
|
||||
|
||||
#include <asm/time.h>
|
||||
|
||||
#define AR71XX_RESET_REG_MISC_INT_STATUS 0
|
||||
#define AR71XX_RESET_REG_MISC_INT_ENABLE 4
|
||||
|
||||
@@ -177,21 +179,3 @@ static int __init ar7240_misc_intc_of_init(
|
||||
|
||||
IRQCHIP_DECLARE(ar7240_misc_intc, "qca,ar7240-misc-intc",
|
||||
ar7240_misc_intc_of_init);
|
||||
|
||||
void __init ath79_misc_irq_init(void __iomem *regs, int irq,
|
||||
int irq_base, bool is_ar71xx)
|
||||
{
|
||||
struct irq_domain *domain;
|
||||
|
||||
if (is_ar71xx)
|
||||
ath79_misc_irq_chip.irq_mask_ack = ar71xx_misc_irq_mask;
|
||||
else
|
||||
ath79_misc_irq_chip.irq_ack = ar724x_misc_irq_ack;
|
||||
|
||||
domain = irq_domain_create_legacy(NULL, ATH79_MISC_IRQ_COUNT,
|
||||
irq_base, 0, &misc_irq_domain_ops, regs);
|
||||
if (!domain)
|
||||
panic("Failed to create MISC irqdomain");
|
||||
|
||||
ath79_misc_intc_domain_init(domain, irq);
|
||||
}
|
||||
|
||||
@@ -205,6 +205,14 @@ __irq_startup_managed(struct irq_desc *desc, const struct cpumask *aff,
|
||||
|
||||
void irq_startup_managed(struct irq_desc *desc)
|
||||
{
|
||||
struct irq_data *d = irq_desc_get_irq_data(desc);
|
||||
|
||||
/*
|
||||
* Clear managed-shutdown flag, so we don't repeat managed-startup for
|
||||
* multiple hotplugs, and cause imbalanced disable depth.
|
||||
*/
|
||||
irqd_clr_managed_shutdown(d);
|
||||
|
||||
/*
|
||||
* Only start it up when the disable depth is 1, so that a disable,
|
||||
* hotunplug, hotplug sequence does not end up enabling it during
|
||||
|
||||
@@ -210,13 +210,6 @@ static void irq_restore_affinity_of_irq(struct irq_desc *desc, unsigned int cpu)
|
||||
!irq_data_get_irq_chip(data) || !cpumask_test_cpu(cpu, affinity))
|
||||
return;
|
||||
|
||||
/*
|
||||
* Don't restore suspended interrupts here when a system comes back
|
||||
* from S3. They are reenabled via resume_device_irqs().
|
||||
*/
|
||||
if (desc->istate & IRQS_SUSPENDED)
|
||||
return;
|
||||
|
||||
if (irqd_is_managed_and_shutdown(data))
|
||||
irq_startup_managed(desc);
|
||||
|
||||
|
||||
@@ -202,7 +202,7 @@ struct irq_domain *irq_domain_create_sim_full(struct fwnode_handle *fwnode,
|
||||
void *data)
|
||||
{
|
||||
struct irq_sim_work_ctx *work_ctx __free(kfree) =
|
||||
kmalloc(sizeof(*work_ctx), GFP_KERNEL);
|
||||
kzalloc(sizeof(*work_ctx), GFP_KERNEL);
|
||||
|
||||
if (!work_ctx)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
Reference in New Issue
Block a user