]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
soc: samsung: exynos-pmu: Fix structure initialization
authorMarek Szyprowski <m.szyprowski@samsung.com>
Wed, 26 Nov 2025 11:00:38 +0000 (12:00 +0100)
committerKrzysztof Kozlowski <krzk@kernel.org>
Thu, 27 Nov 2025 15:02:59 +0000 (16:02 +0100)
Commit 78b72897a5c8 ("soc: samsung: exynos-pmu: Enable CPU Idle for
gs101") added system wide suspend/resume callbacks to Exynos PMU driver,
but some items used by these callbacks are initialized only on
GS101-compatible boards. Move that initialization to exynos_pmu_probe()
to avoid potential lockdep warnings like below observed during system
suspend/resume cycle:

INFO: trying to register non-static key.
The code is fine but needs lockdep annotation, or maybe
you didn't initialize this object before use?
turning off the locking correctness validator.
CPU: 0 UID: 0 PID: 2134 Comm: rtcwake Not tainted 6.18.0-rc7-next-20251126-00039-g1d656a1af243 #11794 PREEMPT
Hardware name: Samsung Exynos (Flattened Device Tree)
Call trace:
 unwind_backtrace from show_stack+0x10/0x14
 show_stack from dump_stack_lvl+0x68/0x88
 dump_stack_lvl from register_lock_class+0x970/0x988
 register_lock_class from __lock_acquire+0xc8/0x29ec
 __lock_acquire from lock_acquire+0x134/0x39c
 lock_acquire from _raw_spin_lock+0x38/0x48
 _raw_spin_lock from exynos_cpupm_suspend_noirq+0x18/0x34
 exynos_cpupm_suspend_noirq from dpm_run_callback+0x98/0x2b8
 dpm_run_callback from device_suspend_noirq+0x8c/0x310

Fixes: 78b72897a5c8 ("soc: samsung: exynos-pmu: Enable CPU Idle for gs101")
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Link: https://patch.msgid.link/20251126110038.3326768-1-m.szyprowski@samsung.com
[krzk: include calltrace into commit msg]
Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
drivers/soc/samsung/exynos-pmu.c

index 22c50ca2aa79bf1945255ee6cc7443d7309b2573..df5b1f299a260451b53aca6610ba3d8b4114f7d2 100644 (file)
@@ -585,10 +585,6 @@ static int setup_cpuhp_and_cpuidle(struct device *dev)
        if (!pmu_context->in_cpuhp)
                return -ENOMEM;
 
-       raw_spin_lock_init(&pmu_context->cpupm_lock);
-       pmu_context->sys_inreboot = false;
-       pmu_context->sys_insuspend = false;
-
        /* set PMU to power on */
        for_each_online_cpu(cpu)
                gs101_cpuhp_pmu_online(cpu);
@@ -657,6 +653,9 @@ static int exynos_pmu_probe(struct platform_device *pdev)
 
        pmu_context->pmureg = regmap;
        pmu_context->dev = dev;
+       raw_spin_lock_init(&pmu_context->cpupm_lock);
+       pmu_context->sys_inreboot = false;
+       pmu_context->sys_insuspend = false;
 
        if (pmu_context->pmu_data && pmu_context->pmu_data->pmu_cpuhp) {
                ret = setup_cpuhp_and_cpuidle(dev);