Re: [PATCH 1/1] time/sched_clock: move sched_clock_register() out of .init section

From: Maxim Kochetkov
Date: Mon Apr 07 2025 - 03:39:13 EST


07.04.2025 09:26, Thomas Gleixner wrote:
On Fri, Apr 04 2025 at 08:05, Maxim Kochetkov wrote:
The sched_clock_register() is widely used by clocksource timer
drivers. The __init prefix forces them to be initialized using
macro TIMER_OF_DECLARE with __init prefixed function.

No, it does not. It requires that they are built in, not more.

Thank you for review.

Let me explain some more. I'm trying to solve similar problem, as described at https://patchwork.kernel.org/project/linux-arm-kernel/patch/20240312192519.1602493-1-samuel.holland@xxxxxxxxxx/#25759271

I have both PLIC and clocksource module configured as Y (not m) in Kconfig. So both of them are included in kernel Image binary. But I still unable to probe clocksource device because it depends of PLIC irq.
And PLIC probes much later than TIMER_OF_DECLARE part of the clocksource driver. I tried to convert clocksource driver to regular platform device and it works fine except warning:

WARNING: modpost: vmlinux: section mismatch in reference: dw_apb_timer_probe+0x136 (section: .text.unlikely) -> sched_clock_register (section: .init.text)

Dropping __init from sched_clock_register() helps to solve this issue.

Is there any real point to keep __init in sched_clock_register()? I see no issues to call this function at any time later after kernel boot.

Is there better way to solve this issue?

So lets drop __init prefix to allow platform device drivers to use
sched_clock_register().

s/So let's//

"So let's" means nothing.

Also this has nothing to do with platform device drivers. It's all about
modules and nothing else.

Anyway, this patch opens opportunity to compile clocksource drivers as modules and probe them much later.

Thanks.