Thread (31 messages) 31 messages, 7 authors, 2025-05-23

Re: [PATCH v2 6/7] clocksource/drivers/exynos_mct: Add module support

From: William McVicker <hidden>
Date: 2025-05-14 23:16:13
Also in: linux-devicetree, linux-samsung-soc, lkml

On 05/13/2025, Daniel Lezcano wrote:
On Tue, Apr 15, 2025 at 05:48:41PM -0700, John Stultz wrote:
quoted
On Tue, Apr 15, 2025 at 9:50 AM Daniel Lezcano
[off-list ref] wrote:
quoted
On Wed, Apr 02, 2025 at 04:33:57PM -0700, Will McVicker wrote:
quoted
From: Donghoon Yu <redacted>

On Arm64 platforms the Exynos MCT driver can be built as a module. On
boot (and even after boot) the arch_timer is used as the clocksource and
tick timer. Once the MCT driver is loaded, it can be used as the wakeup
source for the arch_timer.
From a previous thread where there is no answer:

https://lore.kernel.org/all/c1e8abec-680c-451d-b5df-f687291aa413@linaro.org/ (local)

I don't feel comfortable with changing the clocksource / clockevent drivers to
a module for the reasons explained in the aforementionned thread.
I wasn't CC'ed on that, but to address a few of your points:
quoted
I have some concerns about this kind of changes:

  * the core code may not be prepared for that, so loading / unloading
the modules with active timers may result into some issues
That's a fair concern, but permanent modules (which are loaded but not
unloaded) shouldn't suffer this issue. I recognize having modules be
fully unloadable is generally cleaner and preferred, but I also see
the benefit of allowing permanent modules to be one-way loaded so a
generic/distro kernel shared between lots of different platforms
doesn't need to be bloated with drivers that aren't used everywhere.
Obviously any single driver doesn't make a huge difference, but all
the small drivers together does add up.
Perhaps using module_platform_driver_probe() should do the trick with
some scripts updated for my git hooks to check
module_platform_driver() is not used.
Using `module_platform_driver_probe()` won't work as that still defines
a `module_exit()` hook. If you want to automatically handle this in code, then
the best approach is to follow what Saravana did in [1] for irqchip drivers.
Basically by using `builtin_platform_driver(drv_name##_driver)`, you will only
define the `module_init()` hook when the driver is compiled as a module which
ensures you always get a permanent module.

[1] https://lore.kernel.org/linux-arm-kernel/20200718000637.3632841-1-saravanak@google.com/ (local)

Regards,
Will

[...]
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help