From cde56261ebf654bf41ca9f36202694713ac023f4 Mon Sep 17 00:00:00 2001 From: Jianmin Lv Date: Tue, 21 Mar 2023 20:50:50 +0800 Subject: [PATCH] irqchip/loongson: Fix syscore ops registration LoongArch inclusion category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/I6ONTH -------------------------------- In irq-loongson-eiointc and irq-loongson-pch-pic, syscore ops is registrated two times, which will break the syscore ops list. Signed-off-by: Jianmin Lv Change-Id: I87d4af80afbe5397c25a8d799e844528650c9e2c --- drivers/irqchip/irq-loongson-eiointc.c | 6 ++++-- drivers/irqchip/irq-loongson-pch-pic.c | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/irqchip/irq-loongson-eiointc.c b/drivers/irqchip/irq-loongson-eiointc.c index 3e98f2456646..9548482fd262 100644 --- a/drivers/irqchip/irq-loongson-eiointc.c +++ b/drivers/irqchip/irq-loongson-eiointc.c @@ -429,10 +429,12 @@ int __init eiointc_acpi_init(struct irq_domain *parent, parent_irq = irq_create_mapping(parent, acpi_eiointc->cascade); irq_set_chained_handler_and_data(parent_irq, eiointc_irq_dispatch, priv); - register_syscore_ops(&eiointc_syscore_ops); - cpuhp_setup_state_nocalls(CPUHP_AP_IRQ_LOONGARCH_STARTING, + if (nr_pics == 1) { + register_syscore_ops(&eiointc_syscore_ops); + cpuhp_setup_state_nocalls(CPUHP_AP_IRQ_LOONGARCH_STARTING, "irqchip/loongarch/intc:starting", eiointc_router_init, NULL); + } if (cpu_has_flatmode) node = cpu_to_node(node * CORES_PER_EIO_NODE); diff --git a/drivers/irqchip/irq-loongson-pch-pic.c b/drivers/irqchip/irq-loongson-pch-pic.c index 53e2a89c4341..1d9fa3398cea 100644 --- a/drivers/irqchip/irq-loongson-pch-pic.c +++ b/drivers/irqchip/irq-loongson-pch-pic.c @@ -305,7 +305,8 @@ static int pch_pic_init(phys_addr_t addr, unsigned long size, int vec_base, pch_pic_handle[nr_pics] = domain_handle; pch_pic_priv[nr_pics++] = priv; - register_syscore_ops(&pch_pic_syscore_ops); + if (nr_pics == 1) + register_syscore_ops(&pch_pic_syscore_ops); return 0; -- GitLab