From: Yixun Lan <dlan@kernel.org>
To: Ulf Hansson <ulfh@kernel.org>, Paul Walmsley <pjw@kernel.org>,
Palmer Dabbelt <palmer@dabbelt.com>,
Albert Ou <aou@eecs.berkeley.edu>,
Alexandre Ghiti <alex@ghiti.fr>,
Troy Mitchell <troy.mitchell@linux.spacemit.com>
Cc: Icenowy Zheng <uwu@icenowy.me>,
linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-riscv@lists.infradead.org, spacemit@lists.linux.dev,
Yixun Lan <dlan@kernel.org>
Subject: [PATCH] pmdomain: core: connect consumer with supplier via device link
Date: Thu, 12 Nov 2026 07:45:43 +0000 [thread overview]
Message-ID: <20261112-01-pm-device-link-v1-1-8932e0862378@kernel.org> (raw)
Connect downstream Power Domain consumer with the supplier through
the device link API, So when the pmdomain driver is unloaded or unbinded,
the consumer can be automatically notified and purged gracefully.
Signed-off-by: Yixun Lan <dlan@kernel.org>
---
The power domain drivers under pmdomain subystem suffer fom
the problem that unable to notify the downstream consumer with
module unload or unlink event, left with stale sysfs interface.
Curently, the solution is a) use builtin_platform_driver() API
to disable the module unloading b) adding suppress_bind_attrs flag
to disable the unlink interface, which prevent it from being
triggered from user space.
Take spacemit K3 platform [1] for example, without this patch,
Removing spacemit_pm_domains module will trigger a failure to
remove power domain, access pm_genpd_summary will result an
kernel oops, See detail log below
domain status children performance
/device runtime status managed by
------------------------------------------------------------------------------
lcd1 on 0
cac88000.dp unsupported 0 SW
lcd0 off-0 0
audio on 0
gpu on 0
cac00000.gpu active 0 SW
vpu off-0 0
gpu lcd1 pm_genpd_summary
(gpu and lcd1 isn't clean up)
[ 181.353671] spacemit_pm_domains spacemit_ccu.k3-apmu-pmdomain.3: failed to remove domain gpu: -16 - state may be inconsistent
[ 181.353889] PM: genpd_remove: unable to remove lcd1
[ 181.353896] spacemit_pm_domains spacemit_ccu.k3-apmu-pmdomain.3: failed to remove domain lcd1: -16 - state may be inconsistent
[ 206.228045] CPU: 5 UID: 0 PID: 2560 Comm: cat Not tainted 7.3.0-rc12 #81 PREEMPTLAZY
[ 206.238002] Hardware name: SpacemiT K3 Pico-ITX (DT)
[ 206.243027] epc : summary_show+0xaa/0x308
[ 206.247081] ra : summary_show+0x264/0x308
[ 206.251224] epc : ffffffff809f50fa ra : ffffffff809f52b4 sp : ffffffc601273a80
[ 206.258542] gp : ffffffff82333b98 tp : ffffffd601d5ec80 t0 : ffffffff80026b38
[ 206.265859] t1 : ffffffd6092d3cb0 t2 : ffffffff81601810 s0 : ffffffc601273b10
[ 206.273177] s1 : ffffffd601b92470 a0 : ffffffd601b92588 a1 : 000000000000000a
[ 206.280494] a2 : ffffffd609ae8000 a3 : 0000000000000000 a4 : ffffffd601d5ec80
[ 206.287811] a5 : 0000000000000000 a6 : ffffffffffffe000 a7 : 0000000000000000
[ 206.295128] s2 : ffffffd6092d3cb0 s3 : ffffffd601b92470 s4 : ffffffd601b94040
[ 206.302447] s5 : 0000000000000000 s6 : 0000000000000003 s7 : ffffffff8221e3a8
[ 206.309764] s8 : 0000000000000001 s9 : ffffffff8172b8c8 s10: 0000000000000004
[ 206.317082] s11: 0000000000000000 t3 : 000000000000017a t4 : 0000000000000002
[ 206.324399] t5 : 0000000000000000 t6 : ffffffd609ae7178 ssp : 0000000000000000
[ 206.331804] status: 0000000200000120 badaddr: 0000000000000010 cause: 000000000000000d
[ 206.339829] [<ffffffff809f50fa>] summary_show+0xaa/0x308
[ 206.345206] [<ffffffff804b67f8>] seq_read_iter+0xe0/0x390
[ 206.350671] [<ffffffff804b6b86>] seq_read+0xde/0x158
[ 206.355697] [<ffffffff8063dee4>] full_proxy_read+0x54/0x88
[ 206.361250] [<ffffffff8047a03e>] vfs_read+0xae/0x380
[ 206.366275] [<ffffffff8047adc2>] ksys_read+0x6a/0xf0
[ 206.371301] [<ffffffff8047ae68>] __riscv_sys_read+0x20/0x30
[ 206.376944] [<ffffffff8101fa6a>] do_trap_ecall_u+0x19a/0x518
[ 206.382674] [<ffffffff81033acc>] handle_exception+0x16c/0x178
[ 206.388503] Code: 0a13 c00a 4c05 4b0d 3783 540a 3823 f804 3423 f804 (6b9c) 8552
[ 206.396050] ---[ end trace 0000000000000000 ]---
Segmentation fault cat /sys/kernel/debug/pm_genpd/pm_genpd_summary
====================================================================================
With this patch applied, either unload the module or trigger an
unbind operation, the downstream gpu, lcd1 will exit gracefully
or
domain status children performance
/device runtime status managed by
------------------------------------------------------------------------------
Link: https://patch.msgid.link/20261108-04-k3-pm-support-v3-0-b9dc0857039b@kernel.org [1]
---
drivers/pmdomain/core.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c
index 964e44c2f78f..870fc8083bca 100644
--- a/drivers/pmdomain/core.c
+++ b/drivers/pmdomain/core.c
@@ -3543,6 +3543,8 @@ static int __genpd_dev_pm_attach(struct device *dev, struct device *base_dev,
return -EPROBE_DEFER;
}
+ device_link_add(dev, &pd->dev, DL_FLAG_AUTOREMOVE_CONSUMER);
+
return 1;
err:
---
base-commit: 6628e7d4c6b25c8d18f1345e3a20d21829aae7e4
change-id: 20261112-01-pm-device-link-9fdd0fe59a49
Best regards,
--
Yixun Lan <dlan@kernel.org>
reply other threads:[~2026-11-12 7:45 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261112-01-pm-device-link-v1-1-8932e0862378@kernel.org \
--to=dlan@kernel.org \
--cc=alex@ghiti.fr \
--cc=aou@eecs.berkeley.edu \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=palmer@dabbelt.com \
--cc=pjw@kernel.org \
--cc=spacemit@lists.linux.dev \
--cc=troy.mitchell@linux.spacemit.com \
--cc=ulfh@kernel.org \
--cc=uwu@icenowy.me \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®