lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <c4377971-173a-4af9-8566-24e5860787ae@linaro.org>
Date: Fri, 7 Nov 2025 10:53:41 +0100
From: Daniel Lezcano <daniel.lezcano@...aro.org>
To: Niklas Söderlund <niklas.soderlund+renesas@...natech.se>
Cc: Thomas Gleixner <tglx@...utronix.de>,
 Geert Uytterhoeven <geert@...ux-m68k.org>, linux-kernel@...r.kernel.org,
 linux-renesas-soc@...r.kernel.org,
 Geert Uytterhoeven <geert+renesas@...der.be>
Subject: Re: [PATCH v2] clocksource/drivers/sh_cmt: Always leave device
 running after probe

On 11/5/25 19:32, Niklas Söderlund wrote:
> Hi Daniel,
> 
> Thanks for your feedback.
> 
> On 2025-11-05 17:39:14 +0100, Daniel Lezcano wrote:
>> On 11/5/25 17:06, Niklas Söderlund wrote:
>>> On 2025-11-05 16:36:15 +0100, Daniel Lezcano wrote:
>>>> On 10/16/25 20:20, Niklas Söderlund wrote:
>>>>> The CMT device can be used as both a clocksource and a clockevent
>>>>> provider. The driver tries to be smart and power itself on and off, as
>>>>> well as enabling and disabling its clock when it's not in operation.
>>>>> This behavior is slightly altered if the CMT is used as an early
>>>>> platform device in which case the device is left powered on after probe,
>>>>> but the clock is still enabled and disabled at runtime.
>>>>>
>>>>> This has worked for a long time, but recent improvements in PREEMPT_RT
>>>>> and PROVE_LOCKING have highlighted an issue. As the CMT registers itself
>>>>> as a clockevent provider, clockevents_register_device(), it needs to use
>>>>> raw spinlocks internally as this is the context of which the clockevent
>>>>> framework interacts with the CMT driver. However in the context of
>>>>> holding a raw spinlock the CMT driver can't really manage its power
>>>>> state or clock with calls to pm_runtime_*() and clk_*() as these calls
>>>>> end up in other platform drivers using regular spinlocks to control
>>>>> power and clocks.
>>>>
>>>> So the fix is to remove PM management in the driver ?
>>>
>>> Yes. As I understand it we can't do runtime pm in these drivers as the
>>> core calls into the functions with the raw spinlock held. I hope we can
>>> improve this in future.
>>
>>
>> IIUC, the changes done for PREEMPT_RT prevent to use pm_runtime by functions
>> running in atomic context because the spinlocks are actually mutexes.
> 
> My understanding is that the core issue is that the clockevent core uses
> raw spinlocks, so all operations done from the callbacks in drivers need
> to use them too.
> 
> The Renesas CMT and TMU (which I intend to fix too once we find a way
> forward for CMT) are the only clockenvet drivers attempting to do
> runtime pm.
> 
>      $ git grep -l pm_runtime_get -- drivers/clocksource
>      drivers/clocksource/sh_cmt.c
>      drivers/clocksource/sh_mtu2.c
>      drivers/clocksource/sh_tmu.c
>      drivers/clocksource/timer-ti-dm.c
> 
> The timer-ti-dm.c driver do not register a clockevent device.
> 
>>
>> But if PREEMPT_RT is not set, then everything is running as usual.
> 
> I still get LOCKDEP warnings.

Ah ok, you get the LOCKDEP warning because it identifies the called code 
to be invalid in case the PREEMPT_RT is compiled-in but does not reflect 
a real problem with !PREEMPT_RT.

[ ... ]

> The problem is not really PREEMPT_RT. The problem is the clockevents
> core require drivers to use raw spinlocks as itself uses them.
> 
> I would prefer to get the driver in a state without splats, warnings and
> potential PREEMPT_RT issues. Especially if the cost is to disable
> runtime pm.
> 
> As I understand it most systems where CMT exists, who don't use it, keep
> them disabled in DT. And the devices that use them have
> is_sh_early_platform_device() set so they already disable runtime pm.
> 
> Once we have that fixed we can work on enabling it without the quirks.
> In your opinion am I missing something where this approach is a bad idea?

If you prefer to remove the PM in the driver, I'm fine with that.


-- 
<http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ