public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] irqchip/riscv-aplic: fix PM for multi-aplic system
@ 2026-03-11 14:37 Vladimir Kondratiev
  2026-03-11 18:21 ` Thomas Gleixner
  0 siblings, 1 reply; 3+ messages in thread
From: Vladimir Kondratiev @ 2026-03-11 14:37 UTC (permalink / raw)
  To: Nick Hu, Anup Patel, Thomas Gleixner, Paul Walmsley,
	Palmer Dabbelt, Albert Ou, Alexandre Ghiti
  Cc: linux-riscv, linux-kernel, Vladimir Kondratiev

The aplic_syscore is a singleton and should be registered once.
If it is registered from the driver probe, register_syscore()
called multiple times for the system having multiple aplic instances.
This results in double registration of the same syscore. Warning
triggered:

[    0.553569] ------------[ cut here ]------------
[    0.553572] list_add double add: new=ffffffff81314a68, prev=ffffffff81314a68, next=ffffffff8131f588.
[    0.553643] WARNING: lib/list_debug.c:35 at __list_add_valid_or_report+0x4e/0xe8, CPU#23: swapper/0/1
[    0.553660] Modules linked in:
[    0.553668] CPU: 23 UID: 0 PID: 1 Comm: swapper/0 Not tainted 7.0.0-rc1 #2 PREEMPT_RT
[    0.553675] Hardware name: EyeQ7 evaluation board (DT)
[    0.553679] epc : __list_add_valid_or_report+0x4e/0xe8
[    0.553685]  ra : __list_add_valid_or_report+0x4e/0xe8
[    0.553691] epc : ffffffff80443e72 ra : ffffffff80443e72 sp : ffffffc6000dbaf0
[    0.553696]  gp : ffffffff81391b48 tp : ffffffd6007d9b00 t0 : ffffffd9efbc4318
[    0.553700]  t1 : 0000000000000004 t2 : 2d2d2d2d2d2d2d2d s0 : ffffffc6000dbb20
[    0.553704]  s1 : ffffffff8131f588 a0 : 0000000000000058 a1 : ffffffff80089b9a
[    0.553708]  a2 : ffffffd9effab4d0 a3 : 0000000000000000 a4 : 0000000000000000
[    0.553711]  a5 : 0000000000000000 a6 : ffffffff80da4889 a7 : ffffffffffffffff
[    0.553715]  s2 : ffffffff8131f558 s3 : ffffffff81314a68 s4 : ffffffff8131f588
[    0.553719]  s5 : ffffffff81367d40 s6 : ffffffff80a00db8 s7 : ffffffff80a00d78
[    0.553722]  s8 : ffffffff80e4ac38 s9 : ffffffff80a1c430 s10: 0000000000000008
[    0.553726]  s11: ffffffff808000c4 t3 : 0000000000000002 t4 : ffffffd9efca3bfc
[    0.553730]  t5 : ffffffd9efca3bd8 t6 : ffffffc6000db828 ssp : 0000000000000000
[    0.553734] status: 0000000200000120 badaddr: ffffffff80443e72 cause: 0000000000000003
[    0.553738] [<ffffffff80443e72>] __list_add_valid_or_report+0x4e/0xe8
[    0.553745] [<ffffffff804f1c3a>] register_syscore+0x3a/0x6c
[    0.553754] [<ffffffff80009cd8>] aplic_probe+0xd8/0xe8
[    0.553765] [<ffffffff804f350e>] platform_probe+0x3e/0x7c
[    0.553772] [<ffffffff804f0d5e>] really_probe+0x98/0x34a
[    0.553779] [<ffffffff804f10ba>] __driver_probe_device+0xaa/0xf6
[    0.553785] [<ffffffff804f11d0>] driver_probe_device+0x36/0xc4
[    0.553791] [<ffffffff804f1470>] __driver_attach+0x108/0x1ec
[    0.553797] [<ffffffff804eebde>] bus_for_each_dev+0x58/0xa4
[    0.553803] [<ffffffff804f0608>] driver_attach+0x1a/0x22
[    0.553809] [<ffffffff804eff32>] bus_add_driver+0xe2/0x204
[    0.553814] [<ffffffff804f1f82>] driver_register+0x3e/0xd8
[    0.553820] [<ffffffff804f3204>] __platform_driver_register+0x1e/0x26
[    0.553827] [<ffffffff8082be50>] aplic_driver_init+0x1a/0x22
[    0.553837] [<ffffffff8000e910>] do_one_initcall+0x44/0x286
[    0.553843] [<ffffffff8080171c>] kernel_init_freeable+0x262/0x2e8
[    0.553853] [<ffffffff8073cd98>] kernel_init+0x28/0x14c
[    0.553863] [<ffffffff800101fa>] ret_from_fork_kernel+0x1a/0x15c
[    0.553870] [<ffffffff807493ae>] ret_from_fork_kernel_asm+0x16/0x18
[    0.553877] ---[ end trace 0000000000000000 ]---

Move syscore registration to the driver init

Fixes: 95a8ddde3660 ("irqchip/riscv-aplic: Preserve APLIC states across suspend/resume")
Signed-off-by: Vladimir Kondratiev <vladimir.kondratiev@mobileye.com>
---
 drivers/irqchip/irq-riscv-aplic-main.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/irqchip/irq-riscv-aplic-main.c b/drivers/irqchip/irq-riscv-aplic-main.c
index 8fe4dc5cfdae..12d22b9d65cb 100644
--- a/drivers/irqchip/irq-riscv-aplic-main.c
+++ b/drivers/irqchip/irq-riscv-aplic-main.c
@@ -376,8 +376,6 @@ static int aplic_probe(struct platform_device *pdev)
 	if (rc)
 		dev_err_probe(dev, rc, "failed to setup APLIC in %s mode\n",
 			      msi_mode ? "MSI" : "direct");
-	else
-		register_syscore(&aplic_syscore);
 
 #ifdef CONFIG_ACPI
 	if (!acpi_disabled)
@@ -400,4 +398,10 @@ static struct platform_driver aplic_driver = {
 	},
 	.probe = aplic_probe,
 };
-builtin_platform_driver(aplic_driver);
+
+static int __init aplic_driver_init(void)
+{
+	register_syscore(&aplic_syscore);
+	return platform_driver_register(&aplic_driver);
+}
+device_initcall(aplic_driver_init);

base-commit: 6de23f81a5e08be8fbf5e8d7e9febc72a5b5f27f
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-03-12 12:07 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-11 14:37 [PATCH] irqchip/riscv-aplic: fix PM for multi-aplic system Vladimir Kondratiev
2026-03-11 18:21 ` Thomas Gleixner
2026-03-12 12:07   ` Vladimir Kondratiev

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox