* [PATCH v1 0/7] Setting the scene to convert the timers into modules
@ 2025-06-02 15:18 Daniel Lezcano
2025-06-02 15:18 ` [PATCH v1 1/7] clocksource/drivers/scx200: Add module owner Daniel Lezcano
` (8 more replies)
0 siblings, 9 replies; 34+ messages in thread
From: Daniel Lezcano @ 2025-06-02 15:18 UTC (permalink / raw)
To: daniel.lezcano, tglx
Cc: Jim Cromie, Maxime Coquelin, Alexandre Torgue, Chen-Yu Tsai,
Jernej Skrabec, Samuel Holland, Thierry Reding, Jonathan Hunter,
Peter Zijlstra (Intel), Marco Elver, Nam Cao, linux-kernel,
linux-stm32, linux-arm-kernel, linux-sunxi, linux-tegra,
John Stulz, Will McVicker, Peter Griffin, Saravan Kanna
The timer drivers are all compiled-in. The initial pre-requisite is to
have them available as soon as possible in the boot process. While
this statement made sense a long time ago, the platforms have today
multiple timers for different purposes along with architected timers
which are initialized very early. For example, a timer can be used as
a backup timer when the local timers are belonging to a power domain
which is shutted down, or used a watchdog timer when the counter are
shared, or also as a pulse width modulation counter. Another use case
is the platform user may want to switch to a timer different from the
architected timers because they have interesting characteristics in
the context of a dedicated platform (eg. automotive).
In some existing drivers, there is already the code to load and unload
a timer driver even if the Kconfig does not allow that. It means, the
need is there but partially upstream.
There were multiple attempts to configure the timer drivers into
modules but it faced the fact that we were unsure if it is correctly
supported by the time framework.
After investigating deeper in the core code it appears we have
everything set for the modularization of the timer drivers.
- When a clocksource is registered with a better rating, the current
clocksource is swapped with the new one. The userspace allows to
change the current clocksource via sysfs
- A clocksource can be unregistered
- When a clockevent is registered with a better rating, it becomes
the active one
- A clockevent can not be unregistered
A timer driver can be loaded later because of all the supported
above. However unloading is unsupported because a clockevent can not
be unregistered and that will lead to a crash.
But if the timer driver has the module owner set, the core framework
will handle the refcount correctly and will prevent to unload the
module if a clockevent is registered. All the refcounting is working
in different use cases.
- A clocksource is the current clocksource, the refcount is held
- A current clocksource is switched to another one, the refcount is
released
- A broadcast timer is registered, the refcount is held
- A local timer is registered, the refcount is held
Consequently, it is possible to unload a module which is only used as
a clocksource. As soon as a clockevent is registered, the refcount is
held and can not be released thus preventing the module to be
unloaded.
That mechanism ensure it is safe to convert the different timer
drivers into modules.
This series adds the module owner in the different driver which are
initialized with the module_platform_driver() function and export the
symbols for the sched_clock_register() function.
Cc: Jim Cromie <jim.cromie@gmail.com>
Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Maxime Coquelin <mcoquelin.stm32@gmail.com>
Cc: Alexandre Torgue <alexandre.torgue@foss.st.com>
Cc: Chen-Yu Tsai <wens@csie.org>
Cc: Jernej Skrabec <jernej.skrabec@gmail.com>
Cc: Samuel Holland <samuel@sholland.org>
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: Jonathan Hunter <jonathanh@nvidia.com>
Cc: "Peter Zijlstra (Intel)" <peterz@infradead.org>
Cc: Marco Elver <elver@google.com>
Cc: Nam Cao <namcao@linutronix.de>
Cc: linux-kernel@vger.kernel.org
Cc: linux-stm32@st-md-mailman.stormreply.com
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-sunxi@lists.linux.dev
Cc: linux-tegra@vger.kernel.org
Cc: John Stulz <jstultz@google.com>
Cc: Will McVicker <willmcvicker@google.com>
Cc: Peter Griffin <peter.griffin@linaro.org>
Cc: Saravan Kanna <saravanak@google.com>
Daniel Lezcano (7):
clocksource/drivers/scx200: Add module owner
clocksource/drivers/stm32-lp: Add module owner
clocksource/drivers/sun5i: Add module owner
clocksource/drivers/tegra186: Add module owner
clocksource/drivers/stm: Add module owner
clocksource/drivers/cs5535: Add module owner
time: Export symbol for sched_clock register function
drivers/clocksource/scx200_hrt.c | 1 +
drivers/clocksource/timer-cs5535.c | 1 +
drivers/clocksource/timer-nxp-stm.c | 2 ++
drivers/clocksource/timer-stm32-lp.c | 1 +
drivers/clocksource/timer-sun5i.c | 2 ++
drivers/clocksource/timer-tegra186.c | 3 +++
kernel/time/sched_clock.c | 4 ++--
7 files changed, 12 insertions(+), 2 deletions(-)
--
2.43.0
^ permalink raw reply [flat|nested] 34+ messages in thread
* [PATCH v1 1/7] clocksource/drivers/scx200: Add module owner
2025-06-02 15:18 [PATCH v1 0/7] Setting the scene to convert the timers into modules Daniel Lezcano
@ 2025-06-02 15:18 ` Daniel Lezcano
2025-06-03 17:48 ` William McVicker
` (2 more replies)
2025-06-02 15:18 ` [PATCH v1 2/7] clocksource/drivers/stm32-lp: " Daniel Lezcano
` (7 subsequent siblings)
8 siblings, 3 replies; 34+ messages in thread
From: Daniel Lezcano @ 2025-06-02 15:18 UTC (permalink / raw)
To: daniel.lezcano, tglx
Cc: Jim Cromie, Maxime Coquelin, Alexandre Torgue, Chen-Yu Tsai,
Jernej Skrabec, Samuel Holland, Thierry Reding, Jonathan Hunter,
Peter Zijlstra (Intel), Marco Elver, Nam Cao, linux-kernel,
linux-stm32, linux-arm-kernel, linux-sunxi, linux-tegra,
John Stulz, Will McVicker, Peter Griffin, Saravan Kanna
The conversion to modules requires a correct handling of the module
refcount in order to prevent to unload it if it is in use. That is
especially true with the clockevents where there is no function to
unregister them.
The core time framework correctly handles the module refcount with the
different clocksource and clockevents if the module owner is set.
Add the module owner to make sure the core framework will prevent
stupid things happening when the driver will be converted into a
module.
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
drivers/clocksource/scx200_hrt.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/clocksource/scx200_hrt.c b/drivers/clocksource/scx200_hrt.c
index c3536fffbe9a..5a99801a1657 100644
--- a/drivers/clocksource/scx200_hrt.c
+++ b/drivers/clocksource/scx200_hrt.c
@@ -52,6 +52,7 @@ static struct clocksource cs_hrt = {
.mask = CLOCKSOURCE_MASK(32),
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
/* mult, shift are set based on mhz27 flag */
+ .owner = THIS_MODULE,
};
static int __init init_hrt_clocksource(void)
--
2.43.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PATCH v1 2/7] clocksource/drivers/stm32-lp: Add module owner
2025-06-02 15:18 [PATCH v1 0/7] Setting the scene to convert the timers into modules Daniel Lezcano
2025-06-02 15:18 ` [PATCH v1 1/7] clocksource/drivers/scx200: Add module owner Daniel Lezcano
@ 2025-06-02 15:18 ` Daniel Lezcano
2025-06-03 17:54 ` William McVicker
` (2 more replies)
2025-06-02 15:18 ` [PATCH v1 3/7] clocksource/drivers/sun5i: " Daniel Lezcano
` (6 subsequent siblings)
8 siblings, 3 replies; 34+ messages in thread
From: Daniel Lezcano @ 2025-06-02 15:18 UTC (permalink / raw)
To: daniel.lezcano, tglx
Cc: Jim Cromie, Maxime Coquelin, Alexandre Torgue, Chen-Yu Tsai,
Jernej Skrabec, Samuel Holland, Thierry Reding, Jonathan Hunter,
Peter Zijlstra (Intel), Marco Elver, Nam Cao, linux-kernel,
linux-stm32, linux-arm-kernel, linux-sunxi, linux-tegra,
John Stulz, Will McVicker, Peter Griffin, Saravan Kanna
The conversion to modules requires a correct handling of the module
refcount in order to prevent to unload it if it is in use. That is
especially true with the clockevents where there is no function to
unregister them.
The core time framework correctly handles the module refcount with the
different clocksource and clockevents if the module owner is set.
Add the module owner to make sure the core framework will prevent
stupid things happening when the driver will be converted into a
module.
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
drivers/clocksource/timer-stm32-lp.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/clocksource/timer-stm32-lp.c b/drivers/clocksource/timer-stm32-lp.c
index 928da2f6de69..cf1423ca00d0 100644
--- a/drivers/clocksource/timer-stm32-lp.c
+++ b/drivers/clocksource/timer-stm32-lp.c
@@ -159,6 +159,7 @@ static void stm32_clkevent_lp_init(struct stm32_lp_private *priv,
priv->clkevt.rating = STM32_LP_RATING;
priv->clkevt.suspend = stm32_clkevent_lp_suspend;
priv->clkevt.resume = stm32_clkevent_lp_resume;
+ priv->clkevt.owner = THIS_MODULE;
clockevents_config_and_register(&priv->clkevt, rate, 0x1,
STM32_LPTIM_MAX_ARR);
--
2.43.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PATCH v1 3/7] clocksource/drivers/sun5i: Add module owner
2025-06-02 15:18 [PATCH v1 0/7] Setting the scene to convert the timers into modules Daniel Lezcano
2025-06-02 15:18 ` [PATCH v1 1/7] clocksource/drivers/scx200: Add module owner Daniel Lezcano
2025-06-02 15:18 ` [PATCH v1 2/7] clocksource/drivers/stm32-lp: " Daniel Lezcano
@ 2025-06-02 15:18 ` Daniel Lezcano
2025-06-03 4:41 ` Chen-Yu Tsai
` (3 more replies)
2025-06-02 15:18 ` [PATCH v1 4/7] clocksource/drivers/tegra186: " Daniel Lezcano
` (5 subsequent siblings)
8 siblings, 4 replies; 34+ messages in thread
From: Daniel Lezcano @ 2025-06-02 15:18 UTC (permalink / raw)
To: daniel.lezcano, tglx
Cc: Jim Cromie, Maxime Coquelin, Alexandre Torgue, Chen-Yu Tsai,
Jernej Skrabec, Samuel Holland, Thierry Reding, Jonathan Hunter,
Peter Zijlstra (Intel), Marco Elver, Nam Cao, linux-kernel,
linux-stm32, linux-arm-kernel, linux-sunxi, linux-tegra,
John Stulz, Will McVicker, Peter Griffin, Saravan Kanna
The conversion to modules requires a correct handling of the module
refcount in order to prevent to unload it if it is in use. That is
especially true with the clockevents where there is no function to
unregister them.
The core time framework correctly handles the module refcount with the
different clocksource and clockevents if the module owner is set.
Add the module owner to make sure the core framework will prevent
stupid things happening when the driver will be converted into a
module.
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
drivers/clocksource/timer-sun5i.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/clocksource/timer-sun5i.c b/drivers/clocksource/timer-sun5i.c
index 6b48a9006444..f827d3f98f60 100644
--- a/drivers/clocksource/timer-sun5i.c
+++ b/drivers/clocksource/timer-sun5i.c
@@ -185,6 +185,7 @@ static int sun5i_setup_clocksource(struct platform_device *pdev,
cs->clksrc.read = sun5i_clksrc_read;
cs->clksrc.mask = CLOCKSOURCE_MASK(32);
cs->clksrc.flags = CLOCK_SOURCE_IS_CONTINUOUS;
+ cs->clksrc.owner = THIS_MODULE;
ret = clocksource_register_hz(&cs->clksrc, rate);
if (ret) {
@@ -214,6 +215,7 @@ static int sun5i_setup_clockevent(struct platform_device *pdev,
ce->clkevt.rating = 340;
ce->clkevt.irq = irq;
ce->clkevt.cpumask = cpu_possible_mask;
+ ce->clkevt.owner = THIS_MODULE;
/* Enable timer0 interrupt */
val = readl(base + TIMER_IRQ_EN_REG);
--
2.43.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PATCH v1 4/7] clocksource/drivers/tegra186: Add module owner
2025-06-02 15:18 [PATCH v1 0/7] Setting the scene to convert the timers into modules Daniel Lezcano
` (2 preceding siblings ...)
2025-06-02 15:18 ` [PATCH v1 3/7] clocksource/drivers/sun5i: " Daniel Lezcano
@ 2025-06-02 15:18 ` Daniel Lezcano
2025-06-03 17:57 ` William McVicker
` (2 more replies)
2025-06-02 15:18 ` [PATCH v1 5/7] clocksource/drivers/stm: " Daniel Lezcano
` (4 subsequent siblings)
8 siblings, 3 replies; 34+ messages in thread
From: Daniel Lezcano @ 2025-06-02 15:18 UTC (permalink / raw)
To: daniel.lezcano, tglx
Cc: Jim Cromie, Maxime Coquelin, Alexandre Torgue, Chen-Yu Tsai,
Jernej Skrabec, Samuel Holland, Thierry Reding, Jonathan Hunter,
Peter Zijlstra (Intel), Marco Elver, Nam Cao, linux-kernel,
linux-stm32, linux-arm-kernel, linux-sunxi, linux-tegra,
John Stulz, Will McVicker, Peter Griffin, Saravan Kanna
The conversion to modules requires a correct handling of the module
refcount in order to prevent to unload it if it is in use. That is
especially true with the clockevents where there is no function to
unregister them.
The core time framework correctly handles the module refcount with the
different clocksource and clockevents if the module owner is set.
Add the module owner to make sure the core framework will prevent
stupid things happening when the driver will be converted into a
module.
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
drivers/clocksource/timer-tegra186.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/clocksource/timer-tegra186.c b/drivers/clocksource/timer-tegra186.c
index e5394f98a02e..56a5342bcf78 100644
--- a/drivers/clocksource/timer-tegra186.c
+++ b/drivers/clocksource/timer-tegra186.c
@@ -373,6 +373,7 @@ static int tegra186_timer_tsc_init(struct tegra186_timer *tegra)
tegra->tsc.read = tegra186_timer_tsc_read;
tegra->tsc.mask = CLOCKSOURCE_MASK(56);
tegra->tsc.flags = CLOCK_SOURCE_IS_CONTINUOUS;
+ tegra->tsc.owner = THIS_MODULE;
return clocksource_register_hz(&tegra->tsc, 31250000);
}
@@ -392,6 +393,7 @@ static int tegra186_timer_osc_init(struct tegra186_timer *tegra)
tegra->osc.read = tegra186_timer_osc_read;
tegra->osc.mask = CLOCKSOURCE_MASK(32);
tegra->osc.flags = CLOCK_SOURCE_IS_CONTINUOUS;
+ tegra->osc.owner = THIS_MODULE;
return clocksource_register_hz(&tegra->osc, 38400000);
}
@@ -411,6 +413,7 @@ static int tegra186_timer_usec_init(struct tegra186_timer *tegra)
tegra->usec.read = tegra186_timer_usec_read;
tegra->usec.mask = CLOCKSOURCE_MASK(32);
tegra->usec.flags = CLOCK_SOURCE_IS_CONTINUOUS;
+ tegra->usec.owner = THIS_MODULE;
return clocksource_register_hz(&tegra->usec, USEC_PER_SEC);
}
--
2.43.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PATCH v1 5/7] clocksource/drivers/stm: Add module owner
2025-06-02 15:18 [PATCH v1 0/7] Setting the scene to convert the timers into modules Daniel Lezcano
` (3 preceding siblings ...)
2025-06-02 15:18 ` [PATCH v1 4/7] clocksource/drivers/tegra186: " Daniel Lezcano
@ 2025-06-02 15:18 ` Daniel Lezcano
2025-06-03 17:59 ` William McVicker
` (2 more replies)
2025-06-02 15:18 ` [PATCH v1 6/7] clocksource/drivers/cs5535: " Daniel Lezcano
` (3 subsequent siblings)
8 siblings, 3 replies; 34+ messages in thread
From: Daniel Lezcano @ 2025-06-02 15:18 UTC (permalink / raw)
To: daniel.lezcano, tglx
Cc: Jim Cromie, Maxime Coquelin, Alexandre Torgue, Chen-Yu Tsai,
Jernej Skrabec, Samuel Holland, Thierry Reding, Jonathan Hunter,
Peter Zijlstra (Intel), Marco Elver, Nam Cao, linux-kernel,
linux-stm32, linux-arm-kernel, linux-sunxi, linux-tegra,
John Stulz, Will McVicker, Peter Griffin, Saravan Kanna
The conversion to modules requires a correct handling of the module
refcount in order to prevent to unload it if it is in use. That is
especially true with the clockevents where there is no function to
unregister them.
The core time framework correctly handles the module refcount with the
different clocksource and clockevents if the module owner is set.
Add the module owner to make sure the core framework will prevent
stupid things happening when the driver will be converted into a
module.
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
drivers/clocksource/timer-nxp-stm.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/clocksource/timer-nxp-stm.c b/drivers/clocksource/timer-nxp-stm.c
index d7ccf9001729..bbc40623728f 100644
--- a/drivers/clocksource/timer-nxp-stm.c
+++ b/drivers/clocksource/timer-nxp-stm.c
@@ -201,6 +201,7 @@ static int __init nxp_stm_clocksource_init(struct device *dev, struct stm_timer
stm_timer->cs.resume = nxp_stm_clocksource_resume;
stm_timer->cs.mask = CLOCKSOURCE_MASK(32);
stm_timer->cs.flags = CLOCK_SOURCE_IS_CONTINUOUS;
+ stm_timer->cs.owner = THIS_MODULE;
ret = clocksource_register_hz(&stm_timer->cs, stm_timer->rate);
if (ret)
@@ -314,6 +315,7 @@ static int __init nxp_stm_clockevent_per_cpu_init(struct device *dev, struct stm
stm_timer->ced.cpumask = cpumask_of(cpu);
stm_timer->ced.rating = 460;
stm_timer->ced.irq = irq;
+ stm_timer->ced.owner = THIS_MODULE;
per_cpu(stm_timers, cpu) = stm_timer;
--
2.43.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PATCH v1 6/7] clocksource/drivers/cs5535: Add module owner
2025-06-02 15:18 [PATCH v1 0/7] Setting the scene to convert the timers into modules Daniel Lezcano
` (4 preceding siblings ...)
2025-06-02 15:18 ` [PATCH v1 5/7] clocksource/drivers/stm: " Daniel Lezcano
@ 2025-06-02 15:18 ` Daniel Lezcano
2025-06-03 18:00 ` William McVicker
` (2 more replies)
2025-06-02 15:18 ` [PATCH v1 7/7] time: Export symbol for sched_clock register function Daniel Lezcano
` (2 subsequent siblings)
8 siblings, 3 replies; 34+ messages in thread
From: Daniel Lezcano @ 2025-06-02 15:18 UTC (permalink / raw)
To: daniel.lezcano, tglx
Cc: Jim Cromie, Maxime Coquelin, Alexandre Torgue, Chen-Yu Tsai,
Jernej Skrabec, Samuel Holland, Thierry Reding, Jonathan Hunter,
Peter Zijlstra (Intel), Marco Elver, Nam Cao, linux-kernel,
linux-stm32, linux-arm-kernel, linux-sunxi, linux-tegra,
John Stulz, Will McVicker, Peter Griffin, Saravan Kanna
The conversion to modules requires a correct handling of the module
refcount in order to prevent to unload it if it is in use. That is
especially true with the clockevents where there is no function to
unregister them.
The core time framework correctly handles the module refcount with the
different clocksource and clockevents if the module owner is set.
Add the module owner to make sure the core framework will prevent
stupid things happening when the driver will be converted into a
module.
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
drivers/clocksource/timer-cs5535.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/clocksource/timer-cs5535.c b/drivers/clocksource/timer-cs5535.c
index d47acfe848ae..8af666c39890 100644
--- a/drivers/clocksource/timer-cs5535.c
+++ b/drivers/clocksource/timer-cs5535.c
@@ -101,6 +101,7 @@ static struct clock_event_device cs5535_clockevent = {
.tick_resume = mfgpt_shutdown,
.set_next_event = mfgpt_next_event,
.rating = 250,
+ .owner = THIS_MODULE,
};
static irqreturn_t mfgpt_tick(int irq, void *dev_id)
--
2.43.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PATCH v1 7/7] time: Export symbol for sched_clock register function
2025-06-02 15:18 [PATCH v1 0/7] Setting the scene to convert the timers into modules Daniel Lezcano
` (5 preceding siblings ...)
2025-06-02 15:18 ` [PATCH v1 6/7] clocksource/drivers/cs5535: " Daniel Lezcano
@ 2025-06-02 15:18 ` Daniel Lezcano
2025-06-03 18:01 ` William McVicker
` (4 more replies)
2025-06-03 18:04 ` [PATCH v1 0/7] Setting the scene to convert the timers into modules William McVicker
2025-08-13 13:00 ` Daniel Lezcano
8 siblings, 5 replies; 34+ messages in thread
From: Daniel Lezcano @ 2025-06-02 15:18 UTC (permalink / raw)
To: daniel.lezcano, tglx
Cc: Jim Cromie, Maxime Coquelin, Alexandre Torgue, Chen-Yu Tsai,
Jernej Skrabec, Samuel Holland, Thierry Reding, Jonathan Hunter,
Peter Zijlstra (Intel), Marco Elver, Nam Cao, linux-kernel,
linux-stm32, linux-arm-kernel, linux-sunxi, linux-tegra,
John Stulz, Will McVicker, Peter Griffin, Saravan Kanna
The timer drivers could be converted into modules. The different
functions to register the clocksource or the clockevent are already
exporting their symbols for modules but the sched_clock_register()
function is missing.
Export the symbols so the drivers using this function can be converted
into modules.
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
kernel/time/sched_clock.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/kernel/time/sched_clock.c b/kernel/time/sched_clock.c
index cc15fe293719..cc1afec306b3 100644
--- a/kernel/time/sched_clock.c
+++ b/kernel/time/sched_clock.c
@@ -174,8 +174,7 @@ static enum hrtimer_restart sched_clock_poll(struct hrtimer *hrt)
return HRTIMER_RESTART;
}
-void __init
-sched_clock_register(u64 (*read)(void), int bits, unsigned long rate)
+void sched_clock_register(u64 (*read)(void), int bits, unsigned long rate)
{
u64 res, wrap, new_mask, new_epoch, cyc, ns;
u32 new_mult, new_shift;
@@ -247,6 +246,7 @@ sched_clock_register(u64 (*read)(void), int bits, unsigned long rate)
pr_debug("Registered %pS as sched_clock source\n", read);
}
+EXPORT_SYMBOL_GPL(sched_clock_register);
void __init generic_sched_clock_init(void)
{
--
2.43.0
^ permalink raw reply related [flat|nested] 34+ messages in thread
* Re: [PATCH v1 3/7] clocksource/drivers/sun5i: Add module owner
2025-06-02 15:18 ` [PATCH v1 3/7] clocksource/drivers/sun5i: " Daniel Lezcano
@ 2025-06-03 4:41 ` Chen-Yu Tsai
2025-06-03 17:55 ` William McVicker
` (2 subsequent siblings)
3 siblings, 0 replies; 34+ messages in thread
From: Chen-Yu Tsai @ 2025-06-03 4:41 UTC (permalink / raw)
To: Daniel Lezcano
Cc: tglx, Jim Cromie, Maxime Coquelin, Alexandre Torgue,
Jernej Skrabec, Samuel Holland, Thierry Reding, Jonathan Hunter,
Peter Zijlstra (Intel), Marco Elver, Nam Cao, linux-kernel,
linux-stm32, linux-arm-kernel, linux-sunxi, linux-tegra,
John Stulz, Will McVicker, Peter Griffin, Saravan Kanna
On Mon, Jun 2, 2025 at 11:19 PM Daniel Lezcano
<daniel.lezcano@linaro.org> wrote:
>
> The conversion to modules requires a correct handling of the module
> refcount in order to prevent to unload it if it is in use. That is
> especially true with the clockevents where there is no function to
> unregister them.
>
> The core time framework correctly handles the module refcount with the
> different clocksource and clockevents if the module owner is set.
>
> Add the module owner to make sure the core framework will prevent
> stupid things happening when the driver will be converted into a
> module.
>
> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Acked-by: Chen-Yu Tsai <wens@csie.org>
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH v1 1/7] clocksource/drivers/scx200: Add module owner
2025-06-02 15:18 ` [PATCH v1 1/7] clocksource/drivers/scx200: Add module owner Daniel Lezcano
@ 2025-06-03 17:48 ` William McVicker
2025-07-23 7:17 ` [tip: timers/clocksource] " tip-bot2 for Daniel Lezcano
2025-07-25 10:31 ` tip-bot2 for Daniel Lezcano
2 siblings, 0 replies; 34+ messages in thread
From: William McVicker @ 2025-06-03 17:48 UTC (permalink / raw)
To: Daniel Lezcano
Cc: tglx, Jim Cromie, Maxime Coquelin, Alexandre Torgue, Chen-Yu Tsai,
Jernej Skrabec, Samuel Holland, Thierry Reding, Jonathan Hunter,
Peter Zijlstra (Intel), Marco Elver, Nam Cao, linux-kernel,
linux-stm32, linux-arm-kernel, linux-sunxi, linux-tegra,
John Stulz, Peter Griffin, Saravan Kanna
On 06/02/2025, Daniel Lezcano wrote:
> The conversion to modules requires a correct handling of the module
> refcount in order to prevent to unload it if it is in use. That is
> especially true with the clockevents where there is no function to
> unregister them.
>
> The core time framework correctly handles the module refcount with the
> different clocksource and clockevents if the module owner is set.
>
> Add the module owner to make sure the core framework will prevent
> stupid things happening when the driver will be converted into a
> module.
>
> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Reviewed-by: Will McVicker <willmcvicker@google.com>
Thanks,
Will
> ---
> drivers/clocksource/scx200_hrt.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/clocksource/scx200_hrt.c b/drivers/clocksource/scx200_hrt.c
> index c3536fffbe9a..5a99801a1657 100644
> --- a/drivers/clocksource/scx200_hrt.c
> +++ b/drivers/clocksource/scx200_hrt.c
> @@ -52,6 +52,7 @@ static struct clocksource cs_hrt = {
> .mask = CLOCKSOURCE_MASK(32),
> .flags = CLOCK_SOURCE_IS_CONTINUOUS,
> /* mult, shift are set based on mhz27 flag */
> + .owner = THIS_MODULE,
> };
>
> static int __init init_hrt_clocksource(void)
> --
> 2.43.0
>
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH v1 2/7] clocksource/drivers/stm32-lp: Add module owner
2025-06-02 15:18 ` [PATCH v1 2/7] clocksource/drivers/stm32-lp: " Daniel Lezcano
@ 2025-06-03 17:54 ` William McVicker
2025-07-23 7:17 ` [tip: timers/clocksource] " tip-bot2 for Daniel Lezcano
2025-07-25 10:31 ` tip-bot2 for Daniel Lezcano
2 siblings, 0 replies; 34+ messages in thread
From: William McVicker @ 2025-06-03 17:54 UTC (permalink / raw)
To: Daniel Lezcano
Cc: tglx, Jim Cromie, Maxime Coquelin, Alexandre Torgue, Chen-Yu Tsai,
Jernej Skrabec, Samuel Holland, Thierry Reding, Jonathan Hunter,
Peter Zijlstra (Intel), Marco Elver, Nam Cao, linux-kernel,
linux-stm32, linux-arm-kernel, linux-sunxi, linux-tegra,
John Stulz, Peter Griffin, Saravan Kanna
On 06/02/2025, Daniel Lezcano wrote:
> The conversion to modules requires a correct handling of the module
> refcount in order to prevent to unload it if it is in use. That is
> especially true with the clockevents where there is no function to
> unregister them.
>
> The core time framework correctly handles the module refcount with the
> different clocksource and clockevents if the module owner is set.
>
> Add the module owner to make sure the core framework will prevent
> stupid things happening when the driver will be converted into a
> module.
>
> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Reviewed-by: Will McVicker <willmcvicker@google.com>
Thanks,
Will
> ---
> drivers/clocksource/timer-stm32-lp.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/clocksource/timer-stm32-lp.c b/drivers/clocksource/timer-stm32-lp.c
> index 928da2f6de69..cf1423ca00d0 100644
> --- a/drivers/clocksource/timer-stm32-lp.c
> +++ b/drivers/clocksource/timer-stm32-lp.c
> @@ -159,6 +159,7 @@ static void stm32_clkevent_lp_init(struct stm32_lp_private *priv,
> priv->clkevt.rating = STM32_LP_RATING;
> priv->clkevt.suspend = stm32_clkevent_lp_suspend;
> priv->clkevt.resume = stm32_clkevent_lp_resume;
> + priv->clkevt.owner = THIS_MODULE;
>
> clockevents_config_and_register(&priv->clkevt, rate, 0x1,
> STM32_LPTIM_MAX_ARR);
> --
> 2.43.0
>
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH v1 3/7] clocksource/drivers/sun5i: Add module owner
2025-06-02 15:18 ` [PATCH v1 3/7] clocksource/drivers/sun5i: " Daniel Lezcano
2025-06-03 4:41 ` Chen-Yu Tsai
@ 2025-06-03 17:55 ` William McVicker
2025-07-23 7:17 ` [tip: timers/clocksource] " tip-bot2 for Daniel Lezcano
2025-07-25 10:31 ` tip-bot2 for Daniel Lezcano
3 siblings, 0 replies; 34+ messages in thread
From: William McVicker @ 2025-06-03 17:55 UTC (permalink / raw)
To: Daniel Lezcano
Cc: tglx, Jim Cromie, Maxime Coquelin, Alexandre Torgue, Chen-Yu Tsai,
Jernej Skrabec, Samuel Holland, Thierry Reding, Jonathan Hunter,
Peter Zijlstra (Intel), Marco Elver, Nam Cao, linux-kernel,
linux-stm32, linux-arm-kernel, linux-sunxi, linux-tegra,
John Stulz, Peter Griffin, Saravan Kanna
On 06/02/2025, Daniel Lezcano wrote:
> The conversion to modules requires a correct handling of the module
> refcount in order to prevent to unload it if it is in use. That is
> especially true with the clockevents where there is no function to
> unregister them.
>
> The core time framework correctly handles the module refcount with the
> different clocksource and clockevents if the module owner is set.
>
> Add the module owner to make sure the core framework will prevent
> stupid things happening when the driver will be converted into a
> module.
>
> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Reviewed-by: Will McVicker <willmcvicker@google.com>
Thanks,
Will
> ---
> drivers/clocksource/timer-sun5i.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/clocksource/timer-sun5i.c b/drivers/clocksource/timer-sun5i.c
> index 6b48a9006444..f827d3f98f60 100644
> --- a/drivers/clocksource/timer-sun5i.c
> +++ b/drivers/clocksource/timer-sun5i.c
> @@ -185,6 +185,7 @@ static int sun5i_setup_clocksource(struct platform_device *pdev,
> cs->clksrc.read = sun5i_clksrc_read;
> cs->clksrc.mask = CLOCKSOURCE_MASK(32);
> cs->clksrc.flags = CLOCK_SOURCE_IS_CONTINUOUS;
> + cs->clksrc.owner = THIS_MODULE;
>
> ret = clocksource_register_hz(&cs->clksrc, rate);
> if (ret) {
> @@ -214,6 +215,7 @@ static int sun5i_setup_clockevent(struct platform_device *pdev,
> ce->clkevt.rating = 340;
> ce->clkevt.irq = irq;
> ce->clkevt.cpumask = cpu_possible_mask;
> + ce->clkevt.owner = THIS_MODULE;
>
> /* Enable timer0 interrupt */
> val = readl(base + TIMER_IRQ_EN_REG);
> --
> 2.43.0
>
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH v1 4/7] clocksource/drivers/tegra186: Add module owner
2025-06-02 15:18 ` [PATCH v1 4/7] clocksource/drivers/tegra186: " Daniel Lezcano
@ 2025-06-03 17:57 ` William McVicker
2025-07-23 7:17 ` [tip: timers/clocksource] " tip-bot2 for Daniel Lezcano
2025-07-25 10:31 ` tip-bot2 for Daniel Lezcano
2 siblings, 0 replies; 34+ messages in thread
From: William McVicker @ 2025-06-03 17:57 UTC (permalink / raw)
To: Daniel Lezcano
Cc: tglx, Jim Cromie, Maxime Coquelin, Alexandre Torgue, Chen-Yu Tsai,
Jernej Skrabec, Samuel Holland, Thierry Reding, Jonathan Hunter,
Peter Zijlstra (Intel), Marco Elver, Nam Cao, linux-kernel,
linux-stm32, linux-arm-kernel, linux-sunxi, linux-tegra,
John Stulz, Peter Griffin, Saravan Kanna
On 06/02/2025, Daniel Lezcano wrote:
> The conversion to modules requires a correct handling of the module
> refcount in order to prevent to unload it if it is in use. That is
> especially true with the clockevents where there is no function to
> unregister them.
>
> The core time framework correctly handles the module refcount with the
> different clocksource and clockevents if the module owner is set.
>
> Add the module owner to make sure the core framework will prevent
> stupid things happening when the driver will be converted into a
> module.
>
> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Reviewed-by: Will McVicker <willmcvicker@google.com>
Thanks,
Will
> ---
> drivers/clocksource/timer-tegra186.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/drivers/clocksource/timer-tegra186.c b/drivers/clocksource/timer-tegra186.c
> index e5394f98a02e..56a5342bcf78 100644
> --- a/drivers/clocksource/timer-tegra186.c
> +++ b/drivers/clocksource/timer-tegra186.c
> @@ -373,6 +373,7 @@ static int tegra186_timer_tsc_init(struct tegra186_timer *tegra)
> tegra->tsc.read = tegra186_timer_tsc_read;
> tegra->tsc.mask = CLOCKSOURCE_MASK(56);
> tegra->tsc.flags = CLOCK_SOURCE_IS_CONTINUOUS;
> + tegra->tsc.owner = THIS_MODULE;
>
> return clocksource_register_hz(&tegra->tsc, 31250000);
> }
> @@ -392,6 +393,7 @@ static int tegra186_timer_osc_init(struct tegra186_timer *tegra)
> tegra->osc.read = tegra186_timer_osc_read;
> tegra->osc.mask = CLOCKSOURCE_MASK(32);
> tegra->osc.flags = CLOCK_SOURCE_IS_CONTINUOUS;
> + tegra->osc.owner = THIS_MODULE;
>
> return clocksource_register_hz(&tegra->osc, 38400000);
> }
> @@ -411,6 +413,7 @@ static int tegra186_timer_usec_init(struct tegra186_timer *tegra)
> tegra->usec.read = tegra186_timer_usec_read;
> tegra->usec.mask = CLOCKSOURCE_MASK(32);
> tegra->usec.flags = CLOCK_SOURCE_IS_CONTINUOUS;
> + tegra->usec.owner = THIS_MODULE;
>
> return clocksource_register_hz(&tegra->usec, USEC_PER_SEC);
> }
> --
> 2.43.0
>
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH v1 5/7] clocksource/drivers/stm: Add module owner
2025-06-02 15:18 ` [PATCH v1 5/7] clocksource/drivers/stm: " Daniel Lezcano
@ 2025-06-03 17:59 ` William McVicker
2025-07-23 7:17 ` [tip: timers/clocksource] " tip-bot2 for Daniel Lezcano
2025-07-25 10:31 ` tip-bot2 for Daniel Lezcano
2 siblings, 0 replies; 34+ messages in thread
From: William McVicker @ 2025-06-03 17:59 UTC (permalink / raw)
To: Daniel Lezcano
Cc: tglx, Jim Cromie, Maxime Coquelin, Alexandre Torgue, Chen-Yu Tsai,
Jernej Skrabec, Samuel Holland, Thierry Reding, Jonathan Hunter,
Peter Zijlstra (Intel), Marco Elver, Nam Cao, linux-kernel,
linux-stm32, linux-arm-kernel, linux-sunxi, linux-tegra,
John Stulz, Peter Griffin, Saravan Kanna
On 06/02/2025, Daniel Lezcano wrote:
> The conversion to modules requires a correct handling of the module
> refcount in order to prevent to unload it if it is in use. That is
> especially true with the clockevents where there is no function to
> unregister them.
>
> The core time framework correctly handles the module refcount with the
> different clocksource and clockevents if the module owner is set.
>
> Add the module owner to make sure the core framework will prevent
> stupid things happening when the driver will be converted into a
> module.
>
> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Reviewed-by: Will McVicker <willmcvicker@google.com>
Thanks,
Will
> ---
> drivers/clocksource/timer-nxp-stm.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/clocksource/timer-nxp-stm.c b/drivers/clocksource/timer-nxp-stm.c
> index d7ccf9001729..bbc40623728f 100644
> --- a/drivers/clocksource/timer-nxp-stm.c
> +++ b/drivers/clocksource/timer-nxp-stm.c
> @@ -201,6 +201,7 @@ static int __init nxp_stm_clocksource_init(struct device *dev, struct stm_timer
> stm_timer->cs.resume = nxp_stm_clocksource_resume;
> stm_timer->cs.mask = CLOCKSOURCE_MASK(32);
> stm_timer->cs.flags = CLOCK_SOURCE_IS_CONTINUOUS;
> + stm_timer->cs.owner = THIS_MODULE;
>
> ret = clocksource_register_hz(&stm_timer->cs, stm_timer->rate);
> if (ret)
> @@ -314,6 +315,7 @@ static int __init nxp_stm_clockevent_per_cpu_init(struct device *dev, struct stm
> stm_timer->ced.cpumask = cpumask_of(cpu);
> stm_timer->ced.rating = 460;
> stm_timer->ced.irq = irq;
> + stm_timer->ced.owner = THIS_MODULE;
>
> per_cpu(stm_timers, cpu) = stm_timer;
>
> --
> 2.43.0
>
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH v1 6/7] clocksource/drivers/cs5535: Add module owner
2025-06-02 15:18 ` [PATCH v1 6/7] clocksource/drivers/cs5535: " Daniel Lezcano
@ 2025-06-03 18:00 ` William McVicker
2025-07-23 7:17 ` [tip: timers/clocksource] " tip-bot2 for Daniel Lezcano
2025-07-25 10:31 ` tip-bot2 for Daniel Lezcano
2 siblings, 0 replies; 34+ messages in thread
From: William McVicker @ 2025-06-03 18:00 UTC (permalink / raw)
To: Daniel Lezcano
Cc: tglx, Jim Cromie, Maxime Coquelin, Alexandre Torgue, Chen-Yu Tsai,
Jernej Skrabec, Samuel Holland, Thierry Reding, Jonathan Hunter,
Peter Zijlstra (Intel), Marco Elver, Nam Cao, linux-kernel,
linux-stm32, linux-arm-kernel, linux-sunxi, linux-tegra,
John Stulz, Peter Griffin, Saravan Kanna
On 06/02/2025, Daniel Lezcano wrote:
> The conversion to modules requires a correct handling of the module
> refcount in order to prevent to unload it if it is in use. That is
> especially true with the clockevents where there is no function to
> unregister them.
>
> The core time framework correctly handles the module refcount with the
> different clocksource and clockevents if the module owner is set.
>
> Add the module owner to make sure the core framework will prevent
> stupid things happening when the driver will be converted into a
> module.
>
> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Reviewed-by: Will McVicker <willmcvicker@google.com>
Thanks,
Will
> ---
> drivers/clocksource/timer-cs5535.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/clocksource/timer-cs5535.c b/drivers/clocksource/timer-cs5535.c
> index d47acfe848ae..8af666c39890 100644
> --- a/drivers/clocksource/timer-cs5535.c
> +++ b/drivers/clocksource/timer-cs5535.c
> @@ -101,6 +101,7 @@ static struct clock_event_device cs5535_clockevent = {
> .tick_resume = mfgpt_shutdown,
> .set_next_event = mfgpt_next_event,
> .rating = 250,
> + .owner = THIS_MODULE,
> };
>
> static irqreturn_t mfgpt_tick(int irq, void *dev_id)
> --
> 2.43.0
>
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH v1 7/7] time: Export symbol for sched_clock register function
2025-06-02 15:18 ` [PATCH v1 7/7] time: Export symbol for sched_clock register function Daniel Lezcano
@ 2025-06-03 18:01 ` William McVicker
2025-06-04 3:43 ` John Stultz
` (3 subsequent siblings)
4 siblings, 0 replies; 34+ messages in thread
From: William McVicker @ 2025-06-03 18:01 UTC (permalink / raw)
To: Daniel Lezcano
Cc: tglx, Jim Cromie, Maxime Coquelin, Alexandre Torgue, Chen-Yu Tsai,
Jernej Skrabec, Samuel Holland, Thierry Reding, Jonathan Hunter,
Peter Zijlstra (Intel), Marco Elver, Nam Cao, linux-kernel,
linux-stm32, linux-arm-kernel, linux-sunxi, linux-tegra,
John Stulz, Peter Griffin, Saravan Kanna
On 06/02/2025, Daniel Lezcano wrote:
> The timer drivers could be converted into modules. The different
> functions to register the clocksource or the clockevent are already
> exporting their symbols for modules but the sched_clock_register()
> function is missing.
>
> Export the symbols so the drivers using this function can be converted
> into modules.
>
> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Reviewed-by: Will McVicker <willmcvicker@google.com>
Thanks,
Will
> ---
> kernel/time/sched_clock.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/kernel/time/sched_clock.c b/kernel/time/sched_clock.c
> index cc15fe293719..cc1afec306b3 100644
> --- a/kernel/time/sched_clock.c
> +++ b/kernel/time/sched_clock.c
> @@ -174,8 +174,7 @@ static enum hrtimer_restart sched_clock_poll(struct hrtimer *hrt)
> return HRTIMER_RESTART;
> }
>
> -void __init
> -sched_clock_register(u64 (*read)(void), int bits, unsigned long rate)
> +void sched_clock_register(u64 (*read)(void), int bits, unsigned long rate)
> {
> u64 res, wrap, new_mask, new_epoch, cyc, ns;
> u32 new_mult, new_shift;
> @@ -247,6 +246,7 @@ sched_clock_register(u64 (*read)(void), int bits, unsigned long rate)
>
> pr_debug("Registered %pS as sched_clock source\n", read);
> }
> +EXPORT_SYMBOL_GPL(sched_clock_register);
>
> void __init generic_sched_clock_init(void)
> {
> --
> 2.43.0
>
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH v1 0/7] Setting the scene to convert the timers into modules
2025-06-02 15:18 [PATCH v1 0/7] Setting the scene to convert the timers into modules Daniel Lezcano
` (6 preceding siblings ...)
2025-06-02 15:18 ` [PATCH v1 7/7] time: Export symbol for sched_clock register function Daniel Lezcano
@ 2025-06-03 18:04 ` William McVicker
2025-08-13 13:00 ` Daniel Lezcano
8 siblings, 0 replies; 34+ messages in thread
From: William McVicker @ 2025-06-03 18:04 UTC (permalink / raw)
To: Daniel Lezcano
Cc: tglx, Jim Cromie, Maxime Coquelin, Alexandre Torgue, Chen-Yu Tsai,
Jernej Skrabec, Samuel Holland, Thierry Reding, Jonathan Hunter,
Peter Zijlstra (Intel), Marco Elver, Nam Cao, linux-kernel,
linux-stm32, linux-arm-kernel, linux-sunxi, linux-tegra,
John Stulz, Peter Griffin, Saravan Kanna
On 06/02/2025, Daniel Lezcano wrote:
> The timer drivers are all compiled-in. The initial pre-requisite is to
> have them available as soon as possible in the boot process. While
> this statement made sense a long time ago, the platforms have today
> multiple timers for different purposes along with architected timers
> which are initialized very early. For example, a timer can be used as
> a backup timer when the local timers are belonging to a power domain
> which is shutted down, or used a watchdog timer when the counter are
> shared, or also as a pulse width modulation counter. Another use case
> is the platform user may want to switch to a timer different from the
> architected timers because they have interesting characteristics in
> the context of a dedicated platform (eg. automotive).
>
> In some existing drivers, there is already the code to load and unload
> a timer driver even if the Kconfig does not allow that. It means, the
> need is there but partially upstream.
>
> There were multiple attempts to configure the timer drivers into
> modules but it faced the fact that we were unsure if it is correctly
> supported by the time framework.
>
> After investigating deeper in the core code it appears we have
> everything set for the modularization of the timer drivers.
>
> - When a clocksource is registered with a better rating, the current
> clocksource is swapped with the new one. The userspace allows to
> change the current clocksource via sysfs
>
> - A clocksource can be unregistered
>
> - When a clockevent is registered with a better rating, it becomes
> the active one
>
> - A clockevent can not be unregistered
>
> A timer driver can be loaded later because of all the supported
> above. However unloading is unsupported because a clockevent can not
> be unregistered and that will lead to a crash.
>
> But if the timer driver has the module owner set, the core framework
> will handle the refcount correctly and will prevent to unload the
> module if a clockevent is registered. All the refcounting is working
> in different use cases.
>
> - A clocksource is the current clocksource, the refcount is held
>
> - A current clocksource is switched to another one, the refcount is
> released
>
> - A broadcast timer is registered, the refcount is held
>
> - A local timer is registered, the refcount is held
>
> Consequently, it is possible to unload a module which is only used as
> a clocksource. As soon as a clockevent is registered, the refcount is
> held and can not be released thus preventing the module to be
> unloaded.
>
> That mechanism ensure it is safe to convert the different timer
> drivers into modules.
>
> This series adds the module owner in the different driver which are
> initialized with the module_platform_driver() function and export the
> symbols for the sched_clock_register() function.
>
Thanks Daniel for taking the time to dig into this deeper to help identify how
we can safely convert the timer drivers to modules! The series LGTM. I'll go
ahead and address the review comments on my MCT series and rebase it on top of
your patch series.
Thanks,
Will
<cut>
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH v1 7/7] time: Export symbol for sched_clock register function
2025-06-02 15:18 ` [PATCH v1 7/7] time: Export symbol for sched_clock register function Daniel Lezcano
2025-06-03 18:01 ` William McVicker
@ 2025-06-04 3:43 ` John Stultz
2025-06-04 9:25 ` Thomas Gleixner
` (2 subsequent siblings)
4 siblings, 0 replies; 34+ messages in thread
From: John Stultz @ 2025-06-04 3:43 UTC (permalink / raw)
To: Daniel Lezcano
Cc: tglx, Jim Cromie, Maxime Coquelin, Alexandre Torgue, Chen-Yu Tsai,
Jernej Skrabec, Samuel Holland, Thierry Reding, Jonathan Hunter,
Peter Zijlstra (Intel), Marco Elver, Nam Cao, linux-kernel,
linux-stm32, linux-arm-kernel, linux-sunxi, linux-tegra,
Will McVicker, Peter Griffin, Saravan Kanna
On Mon, Jun 2, 2025 at 8:19 AM Daniel Lezcano <daniel.lezcano@linaro.org> wrote:
>
> The timer drivers could be converted into modules. The different
> functions to register the clocksource or the clockevent are already
> exporting their symbols for modules but the sched_clock_register()
> function is missing.
>
> Export the symbols so the drivers using this function can be converted
> into modules.
Thanks for chasing down all the details around this issue Daniel!
Acked-by: John Stultz <jstultz@google.com>
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH v1 7/7] time: Export symbol for sched_clock register function
2025-06-02 15:18 ` [PATCH v1 7/7] time: Export symbol for sched_clock register function Daniel Lezcano
2025-06-03 18:01 ` William McVicker
2025-06-04 3:43 ` John Stultz
@ 2025-06-04 9:25 ` Thomas Gleixner
2025-07-23 7:17 ` [tip: timers/clocksource] time/sched_clock: " tip-bot2 for Daniel Lezcano
2025-07-25 10:31 ` [tip: timers/clocksource] time/sched_clock: Export symbol for sched_clock_register() function tip-bot2 for Daniel Lezcano
4 siblings, 0 replies; 34+ messages in thread
From: Thomas Gleixner @ 2025-06-04 9:25 UTC (permalink / raw)
To: Daniel Lezcano, daniel.lezcano
Cc: Jim Cromie, Maxime Coquelin, Alexandre Torgue, Chen-Yu Tsai,
Jernej Skrabec, Samuel Holland, Thierry Reding, Jonathan Hunter,
Peter Zijlstra (Intel), Marco Elver, Nam Cao, linux-kernel,
linux-stm32, linux-arm-kernel, linux-sunxi, linux-tegra,
John Stulz, Will McVicker, Peter Griffin, Saravan Kanna
On Mon, Jun 02 2025 at 17:18, Daniel Lezcano wrote:
$Subject: s@time:@time/sched_clock:@
please
Other than that:
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
^ permalink raw reply [flat|nested] 34+ messages in thread
* [tip: timers/clocksource] time/sched_clock: Export symbol for sched_clock register function
2025-06-02 15:18 ` [PATCH v1 7/7] time: Export symbol for sched_clock register function Daniel Lezcano
` (2 preceding siblings ...)
2025-06-04 9:25 ` Thomas Gleixner
@ 2025-07-23 7:17 ` tip-bot2 for Daniel Lezcano
2025-07-25 10:31 ` [tip: timers/clocksource] time/sched_clock: Export symbol for sched_clock_register() function tip-bot2 for Daniel Lezcano
4 siblings, 0 replies; 34+ messages in thread
From: tip-bot2 for Daniel Lezcano @ 2025-07-23 7:17 UTC (permalink / raw)
To: linux-tip-commits
Cc: Will McVicker, John Stultz, Thomas Gleixner, Carlos Llamas,
Daniel Lezcano, x86, linux-kernel
The following commit has been merged into the timers/clocksource branch of tip:
Commit-ID: 1bc6a9b86eaa9d9da346ce4c137952c1782ac94d
Gitweb: https://git.kernel.org/tip/1bc6a9b86eaa9d9da346ce4c137952c1782ac94d
Author: Daniel Lezcano <daniel.lezcano@linaro.org>
AuthorDate: Mon, 02 Jun 2025 17:18:51 +02:00
Committer: Daniel Lezcano <daniel.lezcano@linaro.org>
CommitterDate: Thu, 10 Jul 2025 11:28:29 +02:00
time/sched_clock: Export symbol for sched_clock register function
The timer drivers could be converted into modules. The different
functions to register the clocksource or the clockevent are already
exporting their symbols for modules but the sched_clock_register()
function is missing.
Export the symbols so the drivers using this function can be converted
into modules.
Reviewed-by: Will McVicker <willmcvicker@google.com>
Acked-by: John Stultz <jstultz@google.com>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Carlos Llamas <cmllamas@google.com>
Link: https://lore.kernel.org/r/20250602151853.1942521-8-daniel.lezcano@linaro.org
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
kernel/time/sched_clock.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/kernel/time/sched_clock.c b/kernel/time/sched_clock.c
index cc15fe2..cc1afec 100644
--- a/kernel/time/sched_clock.c
+++ b/kernel/time/sched_clock.c
@@ -174,8 +174,7 @@ static enum hrtimer_restart sched_clock_poll(struct hrtimer *hrt)
return HRTIMER_RESTART;
}
-void __init
-sched_clock_register(u64 (*read)(void), int bits, unsigned long rate)
+void sched_clock_register(u64 (*read)(void), int bits, unsigned long rate)
{
u64 res, wrap, new_mask, new_epoch, cyc, ns;
u32 new_mult, new_shift;
@@ -247,6 +246,7 @@ sched_clock_register(u64 (*read)(void), int bits, unsigned long rate)
pr_debug("Registered %pS as sched_clock source\n", read);
}
+EXPORT_SYMBOL_GPL(sched_clock_register);
void __init generic_sched_clock_init(void)
{
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [tip: timers/clocksource] clocksource/drivers/cs5535: Add module owner
2025-06-02 15:18 ` [PATCH v1 6/7] clocksource/drivers/cs5535: " Daniel Lezcano
2025-06-03 18:00 ` William McVicker
@ 2025-07-23 7:17 ` tip-bot2 for Daniel Lezcano
2025-07-25 10:31 ` tip-bot2 for Daniel Lezcano
2 siblings, 0 replies; 34+ messages in thread
From: tip-bot2 for Daniel Lezcano @ 2025-07-23 7:17 UTC (permalink / raw)
To: linux-tip-commits; +Cc: Will McVicker, Daniel Lezcano, x86, linux-kernel
The following commit has been merged into the timers/clocksource branch of tip:
Commit-ID: fcacf38b9e4408619b2f499ac7cbdfac8eefe668
Gitweb: https://git.kernel.org/tip/fcacf38b9e4408619b2f499ac7cbdfac8eefe668
Author: Daniel Lezcano <daniel.lezcano@linaro.org>
AuthorDate: Mon, 02 Jun 2025 17:18:50 +02:00
Committer: Daniel Lezcano <daniel.lezcano@linaro.org>
CommitterDate: Thu, 10 Jul 2025 11:28:29 +02:00
clocksource/drivers/cs5535: Add module owner
The conversion to modules requires a correct handling of the module
refcount in order to prevent to unload it if it is in use. That is
especially true with the clockevents where there is no function to
unregister them.
The core time framework correctly handles the module refcount with the
different clocksource and clockevents if the module owner is set.
Add the module owner to make sure the core framework will prevent
stupid things happening when the driver will be converted into a
module.
Reviewed-by: Will McVicker <willmcvicker@google.com>
Link: https://lore.kernel.org/r/20250602151853.1942521-7-daniel.lezcano@linaro.org
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
drivers/clocksource/timer-cs5535.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/clocksource/timer-cs5535.c b/drivers/clocksource/timer-cs5535.c
index d47acfe..8af666c 100644
--- a/drivers/clocksource/timer-cs5535.c
+++ b/drivers/clocksource/timer-cs5535.c
@@ -101,6 +101,7 @@ static struct clock_event_device cs5535_clockevent = {
.tick_resume = mfgpt_shutdown,
.set_next_event = mfgpt_next_event,
.rating = 250,
+ .owner = THIS_MODULE,
};
static irqreturn_t mfgpt_tick(int irq, void *dev_id)
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [tip: timers/clocksource] clocksource/drivers/stm: Add module owner
2025-06-02 15:18 ` [PATCH v1 5/7] clocksource/drivers/stm: " Daniel Lezcano
2025-06-03 17:59 ` William McVicker
@ 2025-07-23 7:17 ` tip-bot2 for Daniel Lezcano
2025-07-25 10:31 ` tip-bot2 for Daniel Lezcano
2 siblings, 0 replies; 34+ messages in thread
From: tip-bot2 for Daniel Lezcano @ 2025-07-23 7:17 UTC (permalink / raw)
To: linux-tip-commits; +Cc: Will McVicker, Daniel Lezcano, x86, linux-kernel
The following commit has been merged into the timers/clocksource branch of tip:
Commit-ID: dba0cbb3373cb8cd4c58fe4a1a1e79c8c40df773
Gitweb: https://git.kernel.org/tip/dba0cbb3373cb8cd4c58fe4a1a1e79c8c40df773
Author: Daniel Lezcano <daniel.lezcano@linaro.org>
AuthorDate: Mon, 02 Jun 2025 17:18:49 +02:00
Committer: Daniel Lezcano <daniel.lezcano@linaro.org>
CommitterDate: Thu, 10 Jul 2025 11:28:29 +02:00
clocksource/drivers/stm: Add module owner
The conversion to modules requires a correct handling of the module
refcount in order to prevent to unload it if it is in use. That is
especially true with the clockevents where there is no function to
unregister them.
The core time framework correctly handles the module refcount with the
different clocksource and clockevents if the module owner is set.
Add the module owner to make sure the core framework will prevent
stupid things happening when the driver will be converted into a
module.
Reviewed-by: Will McVicker <willmcvicker@google.com>
Link: https://lore.kernel.org/r/20250602151853.1942521-6-daniel.lezcano@linaro.org
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
drivers/clocksource/timer-nxp-stm.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/clocksource/timer-nxp-stm.c b/drivers/clocksource/timer-nxp-stm.c
index d7ccf90..bbc4062 100644
--- a/drivers/clocksource/timer-nxp-stm.c
+++ b/drivers/clocksource/timer-nxp-stm.c
@@ -201,6 +201,7 @@ static int __init nxp_stm_clocksource_init(struct device *dev, struct stm_timer
stm_timer->cs.resume = nxp_stm_clocksource_resume;
stm_timer->cs.mask = CLOCKSOURCE_MASK(32);
stm_timer->cs.flags = CLOCK_SOURCE_IS_CONTINUOUS;
+ stm_timer->cs.owner = THIS_MODULE;
ret = clocksource_register_hz(&stm_timer->cs, stm_timer->rate);
if (ret)
@@ -314,6 +315,7 @@ static int __init nxp_stm_clockevent_per_cpu_init(struct device *dev, struct stm
stm_timer->ced.cpumask = cpumask_of(cpu);
stm_timer->ced.rating = 460;
stm_timer->ced.irq = irq;
+ stm_timer->ced.owner = THIS_MODULE;
per_cpu(stm_timers, cpu) = stm_timer;
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [tip: timers/clocksource] clocksource/drivers/tegra186: Add module owner
2025-06-02 15:18 ` [PATCH v1 4/7] clocksource/drivers/tegra186: " Daniel Lezcano
2025-06-03 17:57 ` William McVicker
@ 2025-07-23 7:17 ` tip-bot2 for Daniel Lezcano
2025-07-25 10:31 ` tip-bot2 for Daniel Lezcano
2 siblings, 0 replies; 34+ messages in thread
From: tip-bot2 for Daniel Lezcano @ 2025-07-23 7:17 UTC (permalink / raw)
To: linux-tip-commits; +Cc: Will McVicker, Daniel Lezcano, x86, linux-kernel
The following commit has been merged into the timers/clocksource branch of tip:
Commit-ID: dc8b1ad53317512f840fb81e4054db560950bc80
Gitweb: https://git.kernel.org/tip/dc8b1ad53317512f840fb81e4054db560950bc80
Author: Daniel Lezcano <daniel.lezcano@linaro.org>
AuthorDate: Mon, 02 Jun 2025 17:18:48 +02:00
Committer: Daniel Lezcano <daniel.lezcano@linaro.org>
CommitterDate: Thu, 10 Jul 2025 11:28:29 +02:00
clocksource/drivers/tegra186: Add module owner
The conversion to modules requires a correct handling of the module
refcount in order to prevent to unload it if it is in use. That is
especially true with the clockevents where there is no function to
unregister them.
The core time framework correctly handles the module refcount with the
different clocksource and clockevents if the module owner is set.
Add the module owner to make sure the core framework will prevent
stupid things happening when the driver will be converted into a
module.
Reviewed-by: Will McVicker <willmcvicker@google.com>
Link: https://lore.kernel.org/r/20250602151853.1942521-5-daniel.lezcano@linaro.org
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
drivers/clocksource/timer-tegra186.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/clocksource/timer-tegra186.c b/drivers/clocksource/timer-tegra186.c
index e5394f9..56a5342 100644
--- a/drivers/clocksource/timer-tegra186.c
+++ b/drivers/clocksource/timer-tegra186.c
@@ -373,6 +373,7 @@ static int tegra186_timer_tsc_init(struct tegra186_timer *tegra)
tegra->tsc.read = tegra186_timer_tsc_read;
tegra->tsc.mask = CLOCKSOURCE_MASK(56);
tegra->tsc.flags = CLOCK_SOURCE_IS_CONTINUOUS;
+ tegra->tsc.owner = THIS_MODULE;
return clocksource_register_hz(&tegra->tsc, 31250000);
}
@@ -392,6 +393,7 @@ static int tegra186_timer_osc_init(struct tegra186_timer *tegra)
tegra->osc.read = tegra186_timer_osc_read;
tegra->osc.mask = CLOCKSOURCE_MASK(32);
tegra->osc.flags = CLOCK_SOURCE_IS_CONTINUOUS;
+ tegra->osc.owner = THIS_MODULE;
return clocksource_register_hz(&tegra->osc, 38400000);
}
@@ -411,6 +413,7 @@ static int tegra186_timer_usec_init(struct tegra186_timer *tegra)
tegra->usec.read = tegra186_timer_usec_read;
tegra->usec.mask = CLOCKSOURCE_MASK(32);
tegra->usec.flags = CLOCK_SOURCE_IS_CONTINUOUS;
+ tegra->usec.owner = THIS_MODULE;
return clocksource_register_hz(&tegra->usec, USEC_PER_SEC);
}
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [tip: timers/clocksource] clocksource/drivers/sun5i: Add module owner
2025-06-02 15:18 ` [PATCH v1 3/7] clocksource/drivers/sun5i: " Daniel Lezcano
2025-06-03 4:41 ` Chen-Yu Tsai
2025-06-03 17:55 ` William McVicker
@ 2025-07-23 7:17 ` tip-bot2 for Daniel Lezcano
2025-07-25 10:31 ` tip-bot2 for Daniel Lezcano
3 siblings, 0 replies; 34+ messages in thread
From: tip-bot2 for Daniel Lezcano @ 2025-07-23 7:17 UTC (permalink / raw)
To: linux-tip-commits
Cc: Will McVicker, Chen-Yu Tsai, Daniel Lezcano, x86, linux-kernel
The following commit has been merged into the timers/clocksource branch of tip:
Commit-ID: 562eb6fe7f32dd3e032c057c6593124b7afbff19
Gitweb: https://git.kernel.org/tip/562eb6fe7f32dd3e032c057c6593124b7afbff19
Author: Daniel Lezcano <daniel.lezcano@linaro.org>
AuthorDate: Mon, 02 Jun 2025 17:18:47 +02:00
Committer: Daniel Lezcano <daniel.lezcano@linaro.org>
CommitterDate: Thu, 10 Jul 2025 11:28:29 +02:00
clocksource/drivers/sun5i: Add module owner
The conversion to modules requires a correct handling of the module
refcount in order to prevent to unload it if it is in use. That is
especially true with the clockevents where there is no function to
unregister them.
The core time framework correctly handles the module refcount with the
different clocksource and clockevents if the module owner is set.
Add the module owner to make sure the core framework will prevent
stupid things happening when the driver will be converted into a
module.
Reviewed-by: Will McVicker <willmcvicker@google.com>
Acked-by: Chen-Yu Tsai <wens@csie.org>
Link: https://lore.kernel.org/r/20250602151853.1942521-4-daniel.lezcano@linaro.org
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
drivers/clocksource/timer-sun5i.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/clocksource/timer-sun5i.c b/drivers/clocksource/timer-sun5i.c
index 6b48a90..f827d3f 100644
--- a/drivers/clocksource/timer-sun5i.c
+++ b/drivers/clocksource/timer-sun5i.c
@@ -185,6 +185,7 @@ static int sun5i_setup_clocksource(struct platform_device *pdev,
cs->clksrc.read = sun5i_clksrc_read;
cs->clksrc.mask = CLOCKSOURCE_MASK(32);
cs->clksrc.flags = CLOCK_SOURCE_IS_CONTINUOUS;
+ cs->clksrc.owner = THIS_MODULE;
ret = clocksource_register_hz(&cs->clksrc, rate);
if (ret) {
@@ -214,6 +215,7 @@ static int sun5i_setup_clockevent(struct platform_device *pdev,
ce->clkevt.rating = 340;
ce->clkevt.irq = irq;
ce->clkevt.cpumask = cpu_possible_mask;
+ ce->clkevt.owner = THIS_MODULE;
/* Enable timer0 interrupt */
val = readl(base + TIMER_IRQ_EN_REG);
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [tip: timers/clocksource] clocksource/drivers/stm32-lp: Add module owner
2025-06-02 15:18 ` [PATCH v1 2/7] clocksource/drivers/stm32-lp: " Daniel Lezcano
2025-06-03 17:54 ` William McVicker
@ 2025-07-23 7:17 ` tip-bot2 for Daniel Lezcano
2025-07-25 10:31 ` tip-bot2 for Daniel Lezcano
2 siblings, 0 replies; 34+ messages in thread
From: tip-bot2 for Daniel Lezcano @ 2025-07-23 7:17 UTC (permalink / raw)
To: linux-tip-commits; +Cc: Will McVicker, Daniel Lezcano, x86, linux-kernel
The following commit has been merged into the timers/clocksource branch of tip:
Commit-ID: 0625a7e5e34e952352bc81a305e5308c0a9cafcd
Gitweb: https://git.kernel.org/tip/0625a7e5e34e952352bc81a305e5308c0a9cafcd
Author: Daniel Lezcano <daniel.lezcano@linaro.org>
AuthorDate: Mon, 02 Jun 2025 17:18:46 +02:00
Committer: Daniel Lezcano <daniel.lezcano@linaro.org>
CommitterDate: Thu, 10 Jul 2025 11:28:29 +02:00
clocksource/drivers/stm32-lp: Add module owner
The conversion to modules requires a correct handling of the module
refcount in order to prevent to unload it if it is in use. That is
especially true with the clockevents where there is no function to
unregister them.
The core time framework correctly handles the module refcount with the
different clocksource and clockevents if the module owner is set.
Add the module owner to make sure the core framework will prevent
stupid things happening when the driver will be converted into a
module.
Reviewed-by: Will McVicker <willmcvicker@google.com>
Link: https://lore.kernel.org/r/20250602151853.1942521-3-daniel.lezcano@linaro.org
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
drivers/clocksource/timer-stm32-lp.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/clocksource/timer-stm32-lp.c b/drivers/clocksource/timer-stm32-lp.c
index 6e7944f..c2a699f 100644
--- a/drivers/clocksource/timer-stm32-lp.c
+++ b/drivers/clocksource/timer-stm32-lp.c
@@ -211,6 +211,7 @@ static void stm32_clkevent_lp_init(struct stm32_lp_private *priv,
priv->clkevt.rating = STM32_LP_RATING;
priv->clkevt.suspend = stm32_clkevent_lp_suspend;
priv->clkevt.resume = stm32_clkevent_lp_resume;
+ priv->clkevt.owner = THIS_MODULE;
clockevents_config_and_register(&priv->clkevt, rate, 0x1,
STM32_LPTIM_MAX_ARR);
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [tip: timers/clocksource] clocksource/drivers/scx200: Add module owner
2025-06-02 15:18 ` [PATCH v1 1/7] clocksource/drivers/scx200: Add module owner Daniel Lezcano
2025-06-03 17:48 ` William McVicker
@ 2025-07-23 7:17 ` tip-bot2 for Daniel Lezcano
2025-07-25 10:31 ` tip-bot2 for Daniel Lezcano
2 siblings, 0 replies; 34+ messages in thread
From: tip-bot2 for Daniel Lezcano @ 2025-07-23 7:17 UTC (permalink / raw)
To: linux-tip-commits; +Cc: Will McVicker, Daniel Lezcano, x86, linux-kernel
The following commit has been merged into the timers/clocksource branch of tip:
Commit-ID: 3fcc11a56f762b01063a9013613afc09a785778b
Gitweb: https://git.kernel.org/tip/3fcc11a56f762b01063a9013613afc09a785778b
Author: Daniel Lezcano <daniel.lezcano@linaro.org>
AuthorDate: Mon, 02 Jun 2025 17:18:45 +02:00
Committer: Daniel Lezcano <daniel.lezcano@linaro.org>
CommitterDate: Thu, 10 Jul 2025 11:28:29 +02:00
clocksource/drivers/scx200: Add module owner
The conversion to modules requires a correct handling of the module
refcount in order to prevent to unload it if it is in use. That is
especially true with the clockevents where there is no function to
unregister them.
The core time framework correctly handles the module refcount with the
different clocksource and clockevents if the module owner is set.
Add the module owner to make sure the core framework will prevent
stupid things happening when the driver will be converted into a
module.
Reviewed-by: Will McVicker <willmcvicker@google.com>
Link: https://lore.kernel.org/r/20250602151853.1942521-2-daniel.lezcano@linaro.org
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
drivers/clocksource/scx200_hrt.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/clocksource/scx200_hrt.c b/drivers/clocksource/scx200_hrt.c
index c3536ff..5a99801 100644
--- a/drivers/clocksource/scx200_hrt.c
+++ b/drivers/clocksource/scx200_hrt.c
@@ -52,6 +52,7 @@ static struct clocksource cs_hrt = {
.mask = CLOCKSOURCE_MASK(32),
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
/* mult, shift are set based on mhz27 flag */
+ .owner = THIS_MODULE,
};
static int __init init_hrt_clocksource(void)
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [tip: timers/clocksource] time/sched_clock: Export symbol for sched_clock_register() function
2025-06-02 15:18 ` [PATCH v1 7/7] time: Export symbol for sched_clock register function Daniel Lezcano
` (3 preceding siblings ...)
2025-07-23 7:17 ` [tip: timers/clocksource] time/sched_clock: " tip-bot2 for Daniel Lezcano
@ 2025-07-25 10:31 ` tip-bot2 for Daniel Lezcano
4 siblings, 0 replies; 34+ messages in thread
From: tip-bot2 for Daniel Lezcano @ 2025-07-25 10:31 UTC (permalink / raw)
To: linux-tip-commits
Cc: Daniel Lezcano, Ingo Molnar, Will McVicker, Thomas Gleixner,
Carlos Llamas, John Stultz, x86, linux-kernel
The following commit has been merged into the timers/clocksource branch of tip:
Commit-ID: 84deaa77d5dbecdca1f6a12107080a2a2870dd52
Gitweb: https://git.kernel.org/tip/84deaa77d5dbecdca1f6a12107080a2a2870dd52
Author: Daniel Lezcano <daniel.lezcano@linaro.org>
AuthorDate: Mon, 02 Jun 2025 17:18:51 +02:00
Committer: Ingo Molnar <mingo@kernel.org>
CommitterDate: Fri, 25 Jul 2025 11:43:43 +02:00
time/sched_clock: Export symbol for sched_clock_register() function
Timer drivers could be converted into modules. The different
functions to register the clocksource or the clockevent are already
exporting their symbols for modules, but the sched_clock_register()
function is missing.
Export the symbol so the drivers using this function can be converted
into modules.
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Reviewed-by: Will McVicker <willmcvicker@google.com>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Carlos Llamas <cmllamas@google.com>
Acked-by: John Stultz <jstultz@google.com>
Link: https://lore.kernel.org/r/20250602151853.1942521-8-daniel.lezcano@linaro.org
---
kernel/time/sched_clock.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/kernel/time/sched_clock.c b/kernel/time/sched_clock.c
index cc15fe2..cc1afec 100644
--- a/kernel/time/sched_clock.c
+++ b/kernel/time/sched_clock.c
@@ -174,8 +174,7 @@ static enum hrtimer_restart sched_clock_poll(struct hrtimer *hrt)
return HRTIMER_RESTART;
}
-void __init
-sched_clock_register(u64 (*read)(void), int bits, unsigned long rate)
+void sched_clock_register(u64 (*read)(void), int bits, unsigned long rate)
{
u64 res, wrap, new_mask, new_epoch, cyc, ns;
u32 new_mult, new_shift;
@@ -247,6 +246,7 @@ sched_clock_register(u64 (*read)(void), int bits, unsigned long rate)
pr_debug("Registered %pS as sched_clock source\n", read);
}
+EXPORT_SYMBOL_GPL(sched_clock_register);
void __init generic_sched_clock_init(void)
{
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [tip: timers/clocksource] clocksource/drivers/cs5535: Add module owner
2025-06-02 15:18 ` [PATCH v1 6/7] clocksource/drivers/cs5535: " Daniel Lezcano
2025-06-03 18:00 ` William McVicker
2025-07-23 7:17 ` [tip: timers/clocksource] " tip-bot2 for Daniel Lezcano
@ 2025-07-25 10:31 ` tip-bot2 for Daniel Lezcano
2 siblings, 0 replies; 34+ messages in thread
From: tip-bot2 for Daniel Lezcano @ 2025-07-25 10:31 UTC (permalink / raw)
To: linux-tip-commits
Cc: Daniel Lezcano, Ingo Molnar, Will McVicker, x86, linux-kernel
The following commit has been merged into the timers/clocksource branch of tip:
Commit-ID: 667b41e7364742120484ed5cca73d7cd77f3b10e
Gitweb: https://git.kernel.org/tip/667b41e7364742120484ed5cca73d7cd77f3b10e
Author: Daniel Lezcano <daniel.lezcano@linaro.org>
AuthorDate: Mon, 02 Jun 2025 17:18:50 +02:00
Committer: Ingo Molnar <mingo@kernel.org>
CommitterDate: Fri, 25 Jul 2025 11:43:38 +02:00
clocksource/drivers/cs5535: Add module owner
The conversion to modules requires a correct handling of the module
refcount in order to prevent to unload it if it is in use. That is
especially true with clockevents where there is no function to
unregister them.
The core time framework correctly handles the module refcount with the
different clocksource and clockevents if the module owner is set.
Add the module owner to make sure the core framework will prevent
stupid things happening when the driver will be converted into a
module.
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Reviewed-by: Will McVicker <willmcvicker@google.com>
Link: https://lore.kernel.org/r/20250602151853.1942521-7-daniel.lezcano@linaro.org
---
drivers/clocksource/timer-cs5535.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/clocksource/timer-cs5535.c b/drivers/clocksource/timer-cs5535.c
index d47acfe..8af666c 100644
--- a/drivers/clocksource/timer-cs5535.c
+++ b/drivers/clocksource/timer-cs5535.c
@@ -101,6 +101,7 @@ static struct clock_event_device cs5535_clockevent = {
.tick_resume = mfgpt_shutdown,
.set_next_event = mfgpt_next_event,
.rating = 250,
+ .owner = THIS_MODULE,
};
static irqreturn_t mfgpt_tick(int irq, void *dev_id)
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [tip: timers/clocksource] clocksource/drivers/stm: Add module owner
2025-06-02 15:18 ` [PATCH v1 5/7] clocksource/drivers/stm: " Daniel Lezcano
2025-06-03 17:59 ` William McVicker
2025-07-23 7:17 ` [tip: timers/clocksource] " tip-bot2 for Daniel Lezcano
@ 2025-07-25 10:31 ` tip-bot2 for Daniel Lezcano
2 siblings, 0 replies; 34+ messages in thread
From: tip-bot2 for Daniel Lezcano @ 2025-07-25 10:31 UTC (permalink / raw)
To: linux-tip-commits
Cc: Daniel Lezcano, Ingo Molnar, Will McVicker, x86, linux-kernel
The following commit has been merged into the timers/clocksource branch of tip:
Commit-ID: 7a449b9d1dfad2a0163d4d4b0d817e09e564648e
Gitweb: https://git.kernel.org/tip/7a449b9d1dfad2a0163d4d4b0d817e09e564648e
Author: Daniel Lezcano <daniel.lezcano@linaro.org>
AuthorDate: Mon, 02 Jun 2025 17:18:49 +02:00
Committer: Ingo Molnar <mingo@kernel.org>
CommitterDate: Fri, 25 Jul 2025 11:43:32 +02:00
clocksource/drivers/stm: Add module owner
The conversion to modules requires a correct handling of the module
refcount in order to prevent to unload it if it is in use. That is
especially true with clockevents where there is no function to
unregister them.
The core time framework correctly handles the module refcount with the
different clocksource and clockevents if the module owner is set.
Add the module owner to make sure the core framework will prevent
stupid things happening when the driver will be converted into a
module.
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Reviewed-by: Will McVicker <willmcvicker@google.com>
Link: https://lore.kernel.org/r/20250602151853.1942521-6-daniel.lezcano@linaro.org
---
drivers/clocksource/timer-nxp-stm.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/clocksource/timer-nxp-stm.c b/drivers/clocksource/timer-nxp-stm.c
index d7ccf90..bbc4062 100644
--- a/drivers/clocksource/timer-nxp-stm.c
+++ b/drivers/clocksource/timer-nxp-stm.c
@@ -201,6 +201,7 @@ static int __init nxp_stm_clocksource_init(struct device *dev, struct stm_timer
stm_timer->cs.resume = nxp_stm_clocksource_resume;
stm_timer->cs.mask = CLOCKSOURCE_MASK(32);
stm_timer->cs.flags = CLOCK_SOURCE_IS_CONTINUOUS;
+ stm_timer->cs.owner = THIS_MODULE;
ret = clocksource_register_hz(&stm_timer->cs, stm_timer->rate);
if (ret)
@@ -314,6 +315,7 @@ static int __init nxp_stm_clockevent_per_cpu_init(struct device *dev, struct stm
stm_timer->ced.cpumask = cpumask_of(cpu);
stm_timer->ced.rating = 460;
stm_timer->ced.irq = irq;
+ stm_timer->ced.owner = THIS_MODULE;
per_cpu(stm_timers, cpu) = stm_timer;
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [tip: timers/clocksource] clocksource/drivers/tegra186: Add module owner
2025-06-02 15:18 ` [PATCH v1 4/7] clocksource/drivers/tegra186: " Daniel Lezcano
2025-06-03 17:57 ` William McVicker
2025-07-23 7:17 ` [tip: timers/clocksource] " tip-bot2 for Daniel Lezcano
@ 2025-07-25 10:31 ` tip-bot2 for Daniel Lezcano
2 siblings, 0 replies; 34+ messages in thread
From: tip-bot2 for Daniel Lezcano @ 2025-07-25 10:31 UTC (permalink / raw)
To: linux-tip-commits
Cc: Daniel Lezcano, Ingo Molnar, Will McVicker, x86, linux-kernel
The following commit has been merged into the timers/clocksource branch of tip:
Commit-ID: 6d92fe9b423c19e6ec6dcbf71528a4bbbb7bf814
Gitweb: https://git.kernel.org/tip/6d92fe9b423c19e6ec6dcbf71528a4bbbb7bf814
Author: Daniel Lezcano <daniel.lezcano@linaro.org>
AuthorDate: Mon, 02 Jun 2025 17:18:48 +02:00
Committer: Ingo Molnar <mingo@kernel.org>
CommitterDate: Fri, 25 Jul 2025 11:43:25 +02:00
clocksource/drivers/tegra186: Add module owner
The conversion to modules requires a correct handling of the module
refcount in order to prevent to unload it if it is in use. That is
especially true with clockevents where there is no function to
unregister them.
The core time framework correctly handles the module refcount with the
different clocksource and clockevents if the module owner is set.
Add the module owner to make sure the core framework will prevent
stupid things happening when the driver will be converted into a
module.
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Reviewed-by: Will McVicker <willmcvicker@google.com>
Link: https://lore.kernel.org/r/20250602151853.1942521-5-daniel.lezcano@linaro.org
---
drivers/clocksource/timer-tegra186.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/clocksource/timer-tegra186.c b/drivers/clocksource/timer-tegra186.c
index e5394f9..56a5342 100644
--- a/drivers/clocksource/timer-tegra186.c
+++ b/drivers/clocksource/timer-tegra186.c
@@ -373,6 +373,7 @@ static int tegra186_timer_tsc_init(struct tegra186_timer *tegra)
tegra->tsc.read = tegra186_timer_tsc_read;
tegra->tsc.mask = CLOCKSOURCE_MASK(56);
tegra->tsc.flags = CLOCK_SOURCE_IS_CONTINUOUS;
+ tegra->tsc.owner = THIS_MODULE;
return clocksource_register_hz(&tegra->tsc, 31250000);
}
@@ -392,6 +393,7 @@ static int tegra186_timer_osc_init(struct tegra186_timer *tegra)
tegra->osc.read = tegra186_timer_osc_read;
tegra->osc.mask = CLOCKSOURCE_MASK(32);
tegra->osc.flags = CLOCK_SOURCE_IS_CONTINUOUS;
+ tegra->osc.owner = THIS_MODULE;
return clocksource_register_hz(&tegra->osc, 38400000);
}
@@ -411,6 +413,7 @@ static int tegra186_timer_usec_init(struct tegra186_timer *tegra)
tegra->usec.read = tegra186_timer_usec_read;
tegra->usec.mask = CLOCKSOURCE_MASK(32);
tegra->usec.flags = CLOCK_SOURCE_IS_CONTINUOUS;
+ tegra->usec.owner = THIS_MODULE;
return clocksource_register_hz(&tegra->usec, USEC_PER_SEC);
}
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [tip: timers/clocksource] clocksource/drivers/sun5i: Add module owner
2025-06-02 15:18 ` [PATCH v1 3/7] clocksource/drivers/sun5i: " Daniel Lezcano
` (2 preceding siblings ...)
2025-07-23 7:17 ` [tip: timers/clocksource] " tip-bot2 for Daniel Lezcano
@ 2025-07-25 10:31 ` tip-bot2 for Daniel Lezcano
3 siblings, 0 replies; 34+ messages in thread
From: tip-bot2 for Daniel Lezcano @ 2025-07-25 10:31 UTC (permalink / raw)
To: linux-tip-commits
Cc: Daniel Lezcano, Ingo Molnar, Will McVicker, Chen-Yu Tsai, x86,
linux-kernel
The following commit has been merged into the timers/clocksource branch of tip:
Commit-ID: d89048fedbe7a13056497a2bd93e28981e17c6fe
Gitweb: https://git.kernel.org/tip/d89048fedbe7a13056497a2bd93e28981e17c6fe
Author: Daniel Lezcano <daniel.lezcano@linaro.org>
AuthorDate: Mon, 02 Jun 2025 17:18:47 +02:00
Committer: Ingo Molnar <mingo@kernel.org>
CommitterDate: Fri, 25 Jul 2025 11:43:18 +02:00
clocksource/drivers/sun5i: Add module owner
The conversion to modules requires a correct handling of the module
refcount in order to prevent to unload it if it is in use. That is
especially true with clockevents where there is no function to
unregister them.
The core time framework correctly handles the module refcount with the
different clocksource and clockevents if the module owner is set.
Add the module owner to make sure the core framework will prevent
stupid things happening when the driver will be converted into a
module.
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Reviewed-by: Will McVicker <willmcvicker@google.com>
Acked-by: Chen-Yu Tsai <wens@csie.org>
Link: https://lore.kernel.org/r/20250602151853.1942521-4-daniel.lezcano@linaro.org
---
drivers/clocksource/timer-sun5i.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/clocksource/timer-sun5i.c b/drivers/clocksource/timer-sun5i.c
index 6b48a90..f827d3f 100644
--- a/drivers/clocksource/timer-sun5i.c
+++ b/drivers/clocksource/timer-sun5i.c
@@ -185,6 +185,7 @@ static int sun5i_setup_clocksource(struct platform_device *pdev,
cs->clksrc.read = sun5i_clksrc_read;
cs->clksrc.mask = CLOCKSOURCE_MASK(32);
cs->clksrc.flags = CLOCK_SOURCE_IS_CONTINUOUS;
+ cs->clksrc.owner = THIS_MODULE;
ret = clocksource_register_hz(&cs->clksrc, rate);
if (ret) {
@@ -214,6 +215,7 @@ static int sun5i_setup_clockevent(struct platform_device *pdev,
ce->clkevt.rating = 340;
ce->clkevt.irq = irq;
ce->clkevt.cpumask = cpu_possible_mask;
+ ce->clkevt.owner = THIS_MODULE;
/* Enable timer0 interrupt */
val = readl(base + TIMER_IRQ_EN_REG);
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [tip: timers/clocksource] clocksource/drivers/stm32-lp: Add module owner
2025-06-02 15:18 ` [PATCH v1 2/7] clocksource/drivers/stm32-lp: " Daniel Lezcano
2025-06-03 17:54 ` William McVicker
2025-07-23 7:17 ` [tip: timers/clocksource] " tip-bot2 for Daniel Lezcano
@ 2025-07-25 10:31 ` tip-bot2 for Daniel Lezcano
2 siblings, 0 replies; 34+ messages in thread
From: tip-bot2 for Daniel Lezcano @ 2025-07-25 10:31 UTC (permalink / raw)
To: linux-tip-commits
Cc: Daniel Lezcano, Ingo Molnar, Will McVicker, x86, linux-kernel
The following commit has been merged into the timers/clocksource branch of tip:
Commit-ID: d3362af84d0c3aa02d3ebd0600c3a2640b2bd06a
Gitweb: https://git.kernel.org/tip/d3362af84d0c3aa02d3ebd0600c3a2640b2bd06a
Author: Daniel Lezcano <daniel.lezcano@linaro.org>
AuthorDate: Mon, 02 Jun 2025 17:18:46 +02:00
Committer: Ingo Molnar <mingo@kernel.org>
CommitterDate: Fri, 25 Jul 2025 11:43:10 +02:00
clocksource/drivers/stm32-lp: Add module owner
The conversion to modules requires a correct handling of the module
refcount in order to prevent to unload it if it is in use. That is
especially true with clockevents where there is no function to
unregister them.
The core time framework correctly handles the module refcount with the
different clocksource and clockevents if the module owner is set.
Add the module owner to make sure the core framework will prevent
stupid things happening when the driver will be converted into a
module.
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Reviewed-by: Will McVicker <willmcvicker@google.com>
Link: https://lore.kernel.org/r/20250602151853.1942521-3-daniel.lezcano@linaro.org
---
drivers/clocksource/timer-stm32-lp.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/clocksource/timer-stm32-lp.c b/drivers/clocksource/timer-stm32-lp.c
index 6e7944f..c2a699f 100644
--- a/drivers/clocksource/timer-stm32-lp.c
+++ b/drivers/clocksource/timer-stm32-lp.c
@@ -211,6 +211,7 @@ static void stm32_clkevent_lp_init(struct stm32_lp_private *priv,
priv->clkevt.rating = STM32_LP_RATING;
priv->clkevt.suspend = stm32_clkevent_lp_suspend;
priv->clkevt.resume = stm32_clkevent_lp_resume;
+ priv->clkevt.owner = THIS_MODULE;
clockevents_config_and_register(&priv->clkevt, rate, 0x1,
STM32_LPTIM_MAX_ARR);
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [tip: timers/clocksource] clocksource/drivers/scx200: Add module owner
2025-06-02 15:18 ` [PATCH v1 1/7] clocksource/drivers/scx200: Add module owner Daniel Lezcano
2025-06-03 17:48 ` William McVicker
2025-07-23 7:17 ` [tip: timers/clocksource] " tip-bot2 for Daniel Lezcano
@ 2025-07-25 10:31 ` tip-bot2 for Daniel Lezcano
2 siblings, 0 replies; 34+ messages in thread
From: tip-bot2 for Daniel Lezcano @ 2025-07-25 10:31 UTC (permalink / raw)
To: linux-tip-commits
Cc: Daniel Lezcano, Ingo Molnar, Will McVicker, x86, linux-kernel
The following commit has been merged into the timers/clocksource branch of tip:
Commit-ID: 32095e3f3c0affe59a1a465ed19ae9a24f5fb44a
Gitweb: https://git.kernel.org/tip/32095e3f3c0affe59a1a465ed19ae9a24f5fb44a
Author: Daniel Lezcano <daniel.lezcano@linaro.org>
AuthorDate: Mon, 02 Jun 2025 17:18:45 +02:00
Committer: Ingo Molnar <mingo@kernel.org>
CommitterDate: Fri, 25 Jul 2025 11:42:32 +02:00
clocksource/drivers/scx200: Add module owner
The conversion to modules requires a correct handling of the module
refcount in order to prevent to unload it if it is in use. That is
especially true with clockevents where there is no function to
unregister them.
The core time framework correctly handles the module refcount with the
different clocksource and clockevents if the module owner is set.
Add the module owner to make sure the core framework will prevent
stupid things happening when the driver will be converted into a
module.
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Reviewed-by: Will McVicker <willmcvicker@google.com>
Link: https://lore.kernel.org/r/20250602151853.1942521-2-daniel.lezcano@linaro.org
---
drivers/clocksource/scx200_hrt.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/clocksource/scx200_hrt.c b/drivers/clocksource/scx200_hrt.c
index c3536ff..5a99801 100644
--- a/drivers/clocksource/scx200_hrt.c
+++ b/drivers/clocksource/scx200_hrt.c
@@ -52,6 +52,7 @@ static struct clocksource cs_hrt = {
.mask = CLOCKSOURCE_MASK(32),
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
/* mult, shift are set based on mhz27 flag */
+ .owner = THIS_MODULE,
};
static int __init init_hrt_clocksource(void)
^ permalink raw reply related [flat|nested] 34+ messages in thread
* Re: [PATCH v1 0/7] Setting the scene to convert the timers into modules
2025-06-02 15:18 [PATCH v1 0/7] Setting the scene to convert the timers into modules Daniel Lezcano
` (7 preceding siblings ...)
2025-06-03 18:04 ` [PATCH v1 0/7] Setting the scene to convert the timers into modules William McVicker
@ 2025-08-13 13:00 ` Daniel Lezcano
8 siblings, 0 replies; 34+ messages in thread
From: Daniel Lezcano @ 2025-08-13 13:00 UTC (permalink / raw)
To: tglx
Cc: Jim Cromie, Maxime Coquelin, Alexandre Torgue, Chen-Yu Tsai,
Jernej Skrabec, Samuel Holland, Thierry Reding, Jonathan Hunter,
Peter Zijlstra (Intel), Marco Elver, Nam Cao, linux-kernel,
linux-stm32, linux-arm-kernel, linux-sunxi, linux-tegra,
John Stulz, Will McVicker, Peter Griffin, Saravan Kanna
Hi Thomas,
was this series dropped ?
I'm not able to find it in v6.17-rc1 but it is in the master branch of
the tip tree (v6.16-rc7)
On 02/06/2025 17:18, Daniel Lezcano wrote:
> The timer drivers are all compiled-in. The initial pre-requisite is to
> have them available as soon as possible in the boot process. While
> this statement made sense a long time ago, the platforms have today
> multiple timers for different purposes along with architected timers
> which are initialized very early. For example, a timer can be used as
> a backup timer when the local timers are belonging to a power domain
> which is shutted down, or used a watchdog timer when the counter are
> shared, or also as a pulse width modulation counter. Another use case
> is the platform user may want to switch to a timer different from the
> architected timers because they have interesting characteristics in
> the context of a dedicated platform (eg. automotive).
>
> In some existing drivers, there is already the code to load and unload
> a timer driver even if the Kconfig does not allow that. It means, the
> need is there but partially upstream.
>
> There were multiple attempts to configure the timer drivers into
> modules but it faced the fact that we were unsure if it is correctly
> supported by the time framework.
>
> After investigating deeper in the core code it appears we have
> everything set for the modularization of the timer drivers.
>
> - When a clocksource is registered with a better rating, the current
> clocksource is swapped with the new one. The userspace allows to
> change the current clocksource via sysfs
>
> - A clocksource can be unregistered
>
> - When a clockevent is registered with a better rating, it becomes
> the active one
>
> - A clockevent can not be unregistered
>
> A timer driver can be loaded later because of all the supported
> above. However unloading is unsupported because a clockevent can not
> be unregistered and that will lead to a crash.
>
> But if the timer driver has the module owner set, the core framework
> will handle the refcount correctly and will prevent to unload the
> module if a clockevent is registered. All the refcounting is working
> in different use cases.
>
> - A clocksource is the current clocksource, the refcount is held
>
> - A current clocksource is switched to another one, the refcount is
> released
>
> - A broadcast timer is registered, the refcount is held
>
> - A local timer is registered, the refcount is held
>
> Consequently, it is possible to unload a module which is only used as
> a clocksource. As soon as a clockevent is registered, the refcount is
> held and can not be released thus preventing the module to be
> unloaded.
>
> That mechanism ensure it is safe to convert the different timer
> drivers into modules.
>
> This series adds the module owner in the different driver which are
> initialized with the module_platform_driver() function and export the
> symbols for the sched_clock_register() function.
>
> Cc: Jim Cromie <jim.cromie@gmail.com>
> Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: Maxime Coquelin <mcoquelin.stm32@gmail.com>
> Cc: Alexandre Torgue <alexandre.torgue@foss.st.com>
> Cc: Chen-Yu Tsai <wens@csie.org>
> Cc: Jernej Skrabec <jernej.skrabec@gmail.com>
> Cc: Samuel Holland <samuel@sholland.org>
> Cc: Thierry Reding <thierry.reding@gmail.com>
> Cc: Jonathan Hunter <jonathanh@nvidia.com>
> Cc: "Peter Zijlstra (Intel)" <peterz@infradead.org>
> Cc: Marco Elver <elver@google.com>
> Cc: Nam Cao <namcao@linutronix.de>
> Cc: linux-kernel@vger.kernel.org
> Cc: linux-stm32@st-md-mailman.stormreply.com
> Cc: linux-arm-kernel@lists.infradead.org
> Cc: linux-sunxi@lists.linux.dev
> Cc: linux-tegra@vger.kernel.org
> Cc: John Stulz <jstultz@google.com>
> Cc: Will McVicker <willmcvicker@google.com>
> Cc: Peter Griffin <peter.griffin@linaro.org>
> Cc: Saravan Kanna <saravanak@google.com>
>
>
> Daniel Lezcano (7):
> clocksource/drivers/scx200: Add module owner
> clocksource/drivers/stm32-lp: Add module owner
> clocksource/drivers/sun5i: Add module owner
> clocksource/drivers/tegra186: Add module owner
> clocksource/drivers/stm: Add module owner
> clocksource/drivers/cs5535: Add module owner
> time: Export symbol for sched_clock register function
>
> drivers/clocksource/scx200_hrt.c | 1 +
> drivers/clocksource/timer-cs5535.c | 1 +
> drivers/clocksource/timer-nxp-stm.c | 2 ++
> drivers/clocksource/timer-stm32-lp.c | 1 +
> drivers/clocksource/timer-sun5i.c | 2 ++
> drivers/clocksource/timer-tegra186.c | 3 +++
> kernel/time/sched_clock.c | 4 ++--
> 7 files changed, 12 insertions(+), 2 deletions(-)
>
--
<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
^ permalink raw reply [flat|nested] 34+ messages in thread
end of thread, other threads:[~2025-08-13 13:00 UTC | newest]
Thread overview: 34+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-02 15:18 [PATCH v1 0/7] Setting the scene to convert the timers into modules Daniel Lezcano
2025-06-02 15:18 ` [PATCH v1 1/7] clocksource/drivers/scx200: Add module owner Daniel Lezcano
2025-06-03 17:48 ` William McVicker
2025-07-23 7:17 ` [tip: timers/clocksource] " tip-bot2 for Daniel Lezcano
2025-07-25 10:31 ` tip-bot2 for Daniel Lezcano
2025-06-02 15:18 ` [PATCH v1 2/7] clocksource/drivers/stm32-lp: " Daniel Lezcano
2025-06-03 17:54 ` William McVicker
2025-07-23 7:17 ` [tip: timers/clocksource] " tip-bot2 for Daniel Lezcano
2025-07-25 10:31 ` tip-bot2 for Daniel Lezcano
2025-06-02 15:18 ` [PATCH v1 3/7] clocksource/drivers/sun5i: " Daniel Lezcano
2025-06-03 4:41 ` Chen-Yu Tsai
2025-06-03 17:55 ` William McVicker
2025-07-23 7:17 ` [tip: timers/clocksource] " tip-bot2 for Daniel Lezcano
2025-07-25 10:31 ` tip-bot2 for Daniel Lezcano
2025-06-02 15:18 ` [PATCH v1 4/7] clocksource/drivers/tegra186: " Daniel Lezcano
2025-06-03 17:57 ` William McVicker
2025-07-23 7:17 ` [tip: timers/clocksource] " tip-bot2 for Daniel Lezcano
2025-07-25 10:31 ` tip-bot2 for Daniel Lezcano
2025-06-02 15:18 ` [PATCH v1 5/7] clocksource/drivers/stm: " Daniel Lezcano
2025-06-03 17:59 ` William McVicker
2025-07-23 7:17 ` [tip: timers/clocksource] " tip-bot2 for Daniel Lezcano
2025-07-25 10:31 ` tip-bot2 for Daniel Lezcano
2025-06-02 15:18 ` [PATCH v1 6/7] clocksource/drivers/cs5535: " Daniel Lezcano
2025-06-03 18:00 ` William McVicker
2025-07-23 7:17 ` [tip: timers/clocksource] " tip-bot2 for Daniel Lezcano
2025-07-25 10:31 ` tip-bot2 for Daniel Lezcano
2025-06-02 15:18 ` [PATCH v1 7/7] time: Export symbol for sched_clock register function Daniel Lezcano
2025-06-03 18:01 ` William McVicker
2025-06-04 3:43 ` John Stultz
2025-06-04 9:25 ` Thomas Gleixner
2025-07-23 7:17 ` [tip: timers/clocksource] time/sched_clock: " tip-bot2 for Daniel Lezcano
2025-07-25 10:31 ` [tip: timers/clocksource] time/sched_clock: Export symbol for sched_clock_register() function tip-bot2 for Daniel Lezcano
2025-06-03 18:04 ` [PATCH v1 0/7] Setting the scene to convert the timers into modules William McVicker
2025-08-13 13:00 ` Daniel Lezcano
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).