clocksource/arm_arch_timer: add __ro_after_init and __init
Subsystems (2)
PATCH 1/1 clocksource/arm_arch_timer: add __ro_after_init and __init
Some functions are not needed after booting, so mark them as __init to move them to the .init section.
Some global variables are never modified after init, so can be __ro_after_init.
--- drivers/clocksource/arm_arch_timer.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-)
drivers/clocksource/arm_arch_timer.c +12 -11
@@ -51,7 +51,7 @@static unsigned arch_timers_present__initdata ; -static void __iomem *arch_counter_base; +static void __iomem *arch_counter_base__ro_after_init ;struct arch_timer {void __iomem *base;
@@ -60,15 +60,16 @@ struct arch_timer {#define to_arch_timer (e) container_of(e, struct arch_timer, evt) -static u32 arch_timer_rate; -static int arch_timer_ppi[ARCH_TIMER_MAX_TIMER_PPI ]; +static u32 arch_timer_rate__ro_after_init ; +u32 arch_timer_rate1__ro_after_init ; +static int arch_timer_ppi[ARCH_TIMER_MAX_TIMER_PPI ]__ro_after_init ;static struct clock_event_device __percpu *arch_timer_evt; -static enum arch_timer_ppi_nr arch_timer_uses_ppi =ARCH_TIMER_VIRT_PPI ; -static bool arch_timer_c3stop; -static bool arch_timer_mem_use_virtual; -static bool arch_counter_suspend_stop; +static enum arch_timer_ppi_nr arch_timer_uses_ppi__ro_after_init =ARCH_TIMER_VIRT_PPI ; +static bool arch_timer_c3stop__ro_after_init ; +static bool arch_timer_mem_use_virtual__ro_after_init ; +static bool arch_counter_suspend_stop__ro_after_init ;#ifdef CONFIG_GENERIC_GETTIMEOFDAY static enum vdso_clock_mode vdso_default =VDSO_CLOCKMODE_ARCHTIMER ;#else
@@ -76,7 +77,7 @@ static enum vdso_clock_mode vdso_default = VDSO_CLOCKMODE_NONE;#endif /* CONFIG_GENERIC_GETTIMEOFDAY */ static cpumask_t evtstrm_available =CPU_MASK_NONE ; -static bool evtstrm_enable =IS_ENABLED (CONFIG_ARM_ARCH_TIMER_EVTSTREAM ); +static bool evtstrm_enable__ro_after_init =IS_ENABLED (CONFIG_ARM_ARCH_TIMER_EVTSTREAM );static int __init early_evtstrm_cfg (char *buf) {
@@ -176,7 +177,7 @@ static notrace u64 arch_counter_get_cntvct(void)* to exist on arm64. arm doesn't use this before DT is probed so even * if we don't have the cp15 accessors we won't have a problem. */ -u64 (*arch_timer_read_counter)(void) = arch_counter_get_cntvct; +u64 (*arch_timer_read_counter)(void)__ro_after_init = arch_counter_get_cntvct;EXPORT_SYMBOL_GPL (arch_timer_read_counter);static u64 arch_counter_read (struct clocksource *cs)
@@ -925,7 +926,7 @@ static int validate_timer_rate(void)* rate was probed first, and don't verify that others match. If the first node * probed has a clock-frequency property, this overrides the HW register. */ -static void arch_timer_of_configure_rate (u32 rate,struct device_node *np) +static void __init arch_timer_of_configure_rate (u32 rate,struct device_node *np) {/* Who has more than one independent system counter? */ if (arch_timer_rate)
@@ -939,7 +940,7 @@ static void arch_timer_of_configure_rate(u32 rate, struct device_node *np)pr_warn ("frequency not available\n" ); } -static void arch_timer_banner (unsigned type) +static void __init arch_timer_banner (unsigned type) { pr_info("%s%s%s timer(s) running at %lu.%02luMHz (%s%s%s).\n", type & ARCH_TIMER_TYPE_CP15 ? "cp15" : "",
Signature · 1 line
2.31.0
Hi,
Quoted 7 lines · Jisheng Zhang
Some functions are not needed after booting, so mark them as
__initto move them to the .init section.Some global variables are never modified after init, so can be
__ro_after_init.Signed-off-by Jisheng Zhang <[email protected]>
Mar[ck] ? Any comment on this change ?
Quoted 77 lines
--- drivers/clocksource/arm_arch_timer.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-)drivers/clocksource/arm_arch_timer.c +12
-11@@ -51,7 +51,7 @@static unsigned arch_timers_present__initdata ; -static void __iomem *arch_counter_base; +static void __iomem *arch_counter_base__ro_after_init ;struct arch_timer {void __iomem *base;@@ -60,15 +60,16 @@ struct arch_timer {#define to_arch_timer (e) container_of(e, struct arch_timer, evt) -static u32 arch_timer_rate; -static int arch_timer_ppi[ARCH_TIMER_MAX_TIMER_PPI ]; +static u32 arch_timer_rate__ro_after_init ; +u32 arch_timer_rate1__ro_after_init ; +static int arch_timer_ppi[ARCH_TIMER_MAX_TIMER_PPI ]__ro_after_init ;static struct clock_event_device __percpu *arch_timer_evt; -static enum arch_timer_ppi_nr arch_timer_uses_ppi =ARCH_TIMER_VIRT_PPI ; -static bool arch_timer_c3stop; -static bool arch_timer_mem_use_virtual; -static bool arch_counter_suspend_stop; +static enum arch_timer_ppi_nr arch_timer_uses_ppi__ro_after_init =ARCH_TIMER_VIRT_PPI ; +static bool arch_timer_c3stop__ro_after_init ; +static bool arch_timer_mem_use_virtual__ro_after_init ; +static bool arch_counter_suspend_stop__ro_after_init ;#ifdef CONFIG_GENERIC_GETTIMEOFDAY static enum vdso_clock_mode vdso_default =VDSO_CLOCKMODE_ARCHTIMER ;#else @@ -76,7 +77,7 @@ static enum vdso_clock_mode vdso_default = VDSO_CLOCKMODE_NONE;#endif /* CONFIG_GENERIC_GETTIMEOFDAY */ static cpumask_t evtstrm_available =CPU_MASK_NONE ; -static bool evtstrm_enable =IS_ENABLED (CONFIG_ARM_ARCH_TIMER_EVTSTREAM ); +static bool evtstrm_enable__ro_after_init =IS_ENABLED (CONFIG_ARM_ARCH_TIMER_EVTSTREAM );static int __init early_evtstrm_cfg (char *buf) {@@ -176,7 +177,7 @@ static notrace u64 arch_counter_get_cntvct(void)* to exist on arm64. arm doesn't use this before DT is probed so even * if we don't have the cp15 accessors we won't have a problem. */ -u64 (*arch_timer_read_counter)(void) = arch_counter_get_cntvct; +u64 (*arch_timer_read_counter)(void)__ro_after_init = arch_counter_get_cntvct;EXPORT_SYMBOL_GPL (arch_timer_read_counter);static u64 arch_counter_read (struct clocksource *cs)@@ -925,7 +926,7 @@ static int validate_timer_rate(void)* rate was probed first, and don't verify that others match. If the first node * probed has a clock-frequency property, this overrides the HW register. */ -static void arch_timer_of_configure_rate (u32 rate,struct device_node *np) +static void __init arch_timer_of_configure_rate (u32 rate,struct device_node *np) {/* Who has more than one independent system counter? */ if (arch_timer_rate)@@ -939,7 +940,7 @@ static void arch_timer_of_configure_rate(u32 rate, struct device_node *np)pr_warn ("frequency not available\n" ); } -static void arch_timer_banner (unsigned type) +static void __init arch_timer_banner (unsigned type) { pr_info("%s%s%s timer(s) running at %lu.%02luMHz (%s%s%s).\n", type & ARCH_TIMER_TYPE_CP15 ? "cp15" : "",
Signature · 5 lines
<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
Quoted 8 lines · Jisheng Zhang
Some functions are not needed after booting, so mark them as
__initto move them to the .init section.Some global variables are never modified after init, so can be
__ro_after_init.Signed-off-by Jisheng Zhang <[email protected]>
M.
Signature · 1 line
Without deviation from the norm, progress is not possible.
Quoted 6 lines · Marc Zyngier
Quoted 4 lines · Jisheng Zhang
Some functions are not needed after booting, so mark them as
__initto move them to the .init section.
Quoted 8 lines
Quoted 4 lines
Some global variables are never modified after init, so can be
__ro_after_init.Signed-off-by Jisheng Zhang <[email protected]>Acked-by Marc Zyngier <[email protected]>M.
Thanks Marc
Signature · 5 lines
<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
[tip: timers/core] clocksource/drivers/arm_arch_timer: Add __ro_after_init and __init
In reply to Jisheng ZhangThe following commit has been merged into the timers/core branch of tip:
The following commit has been merged into the timers/core branch of tip:
Commit-ID: e2bf384d4329bb478ad003eae1ab644756a42266 Gitweb: https://git.kernel.org/tip/e2bf384d4329bb478ad003eae1ab644756a42266 Author: Jisheng Zhang <[email protected]> AuthorDate: Tue, 30 Mar 2021 14:04:44 +08:00 Committer: Daniel Lezcano <[email protected]> CommitterDate: Thu, 08 Apr 2021 16:41:19 +02:00
clocksource/drivers/arm_arch_timer: Add __ro_after_init and __init
Some functions are not needed after booting, so mark them as __init to move them to the .init section.
Some global variables are never modified after init, so can be __ro_after_init.
--- drivers/clocksource/arm_arch_timer.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-)
drivers/clocksource/arm_arch_timer.c +12 -11
@@ -51,7 +51,7 @@static unsigned arch_timers_present__initdata ; -static void __iomem *arch_counter_base; +static void __iomem *arch_counter_base__ro_after_init ;struct arch_timer {void __iomem *base;
@@ -60,15 +60,16 @@ struct arch_timer {#define to_arch_timer (e) container_of(e, struct arch_timer, evt) -static u32 arch_timer_rate; -static int arch_timer_ppi[ARCH_TIMER_MAX_TIMER_PPI ]; +static u32 arch_timer_rate__ro_after_init ; +u32 arch_timer_rate1__ro_after_init ; +static int arch_timer_ppi[ARCH_TIMER_MAX_TIMER_PPI ]__ro_after_init ;static struct clock_event_device __percpu *arch_timer_evt; -static enum arch_timer_ppi_nr arch_timer_uses_ppi =ARCH_TIMER_VIRT_PPI ; -static bool arch_timer_c3stop; -static bool arch_timer_mem_use_virtual; -static bool arch_counter_suspend_stop; +static enum arch_timer_ppi_nr arch_timer_uses_ppi__ro_after_init =ARCH_TIMER_VIRT_PPI ; +static bool arch_timer_c3stop__ro_after_init ; +static bool arch_timer_mem_use_virtual__ro_after_init ; +static bool arch_counter_suspend_stop__ro_after_init ;#ifdef CONFIG_GENERIC_GETTIMEOFDAY static enum vdso_clock_mode vdso_default =VDSO_CLOCKMODE_ARCHTIMER ;#else
@@ -76,7 +77,7 @@ static enum vdso_clock_mode vdso_default = VDSO_CLOCKMODE_NONE;#endif /* CONFIG_GENERIC_GETTIMEOFDAY */ static cpumask_t evtstrm_available =CPU_MASK_NONE ; -static bool evtstrm_enable =IS_ENABLED (CONFIG_ARM_ARCH_TIMER_EVTSTREAM ); +static bool evtstrm_enable__ro_after_init =IS_ENABLED (CONFIG_ARM_ARCH_TIMER_EVTSTREAM );static int __init early_evtstrm_cfg (char *buf) {
@@ -176,7 +177,7 @@ static notrace u64 arch_counter_get_cntvct(void)* to exist on arm64. arm doesn't use this before DT is probed so even * if we don't have the cp15 accessors we won't have a problem. */ -u64 (*arch_timer_read_counter)(void) = arch_counter_get_cntvct; +u64 (*arch_timer_read_counter)(void)__ro_after_init = arch_counter_get_cntvct;EXPORT_SYMBOL_GPL (arch_timer_read_counter);static u64 arch_counter_read (struct clocksource *cs)
@@ -925,7 +926,7 @@ static int validate_timer_rate(void)* rate was probed first, and don't verify that others match. If the first node * probed has a clock-frequency property, this overrides the HW register. */ -static void arch_timer_of_configure_rate (u32 rate,struct device_node *np) +static void __init arch_timer_of_configure_rate (u32 rate,struct device_node *np) {/* Who has more than one independent system counter? */ if (arch_timer_rate)
@@ -939,7 +940,7 @@ static void arch_timer_of_configure_rate(u32 rate, struct device_node *np)pr_warn ("frequency not available\n" ); } -static void arch_timer_banner (unsigned type) +static void __init arch_timer_banner (unsigned type) { pr_info("%s%s%s timer(s) running at %lu.%02luMHz (%s%s%s).\n", type & ARCH_TIMER_TYPE_CP15 ? "cp15" : "",