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 issuesThat'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 [...]