Commit 2424fe1c authored by Kees Cook's avatar Kees Cook
Browse files

arm: Handle KCOV __init vs inline mismatches



When KCOV is enabled all functions get instrumented, unless
the __no_sanitize_coverage attribute is used. To prepare for
__no_sanitize_coverage being applied to __init functions, we have to
handle differences in how GCC's inline optimizations get resolved. For
arm this exposed several places where __init annotations were missing
but ended up being "accidentally correct". Fix these cases and force
several functions to be inline with __always_inline.

Acked-by: default avatarNishanth Menon <nm@ti.com>
Acked-by: default avatarLee Jones <lee@kernel.org>
Reviewed-by: default avatarNishanth Menon <nm@ti.com>
Link: https://lore.kernel.org/r/20250717232519.2984886-5-kees@kernel.org


Signed-off-by: default avatarKees Cook <kees@kernel.org>
parent d01daf9d
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -295,7 +295,7 @@ static inline u32 read_extra_features(void)
	return u;
}

static inline void write_extra_features(u32 u)
static inline void __init write_extra_features(u32 u)
{
	__asm__("mcr p15, 1, %0, c15, c1, 0" : : "r" (u));
}
+1 −1
Original line number Diff line number Diff line
@@ -177,7 +177,7 @@ static inline void __init write_actlr(u32 actlr)
	__asm__("mcr p15, 0, %0, c1, c0, 1\n" : : "r" (actlr));
}

static void enable_extra_feature(unsigned int features)
static void __init enable_extra_feature(unsigned int features)
{
	u32 u;

+1 −1
Original line number Diff line number Diff line
@@ -43,7 +43,7 @@ static struct delay_timer orion_delay_timer = {
	.read_current_timer = orion_read_timer,
};

static void orion_delay_timer_init(unsigned long rate)
static void __init orion_delay_timer_init(unsigned long rate)
{
	orion_delay_timer.freq = rate;
	register_current_timer_delay(&orion_delay_timer);
+1 −1
Original line number Diff line number Diff line
@@ -145,7 +145,7 @@ static int am33xx_do_sram_idle(u32 wfi_flags)
	return pm_ops->cpu_suspend(am33xx_do_wfi_sram, wfi_flags);
}

static int __init am43xx_map_gic(void)
static int am43xx_map_gic(void)
{
	gic_dist_base = ioremap(AM43XX_GIC_DIST_BASE, SZ_4K);

+1 −1
Original line number Diff line number Diff line
@@ -213,7 +213,7 @@ struct prcmu_fw_version {

#if defined(CONFIG_UX500_SOC_DB8500)

static inline void prcmu_early_init(void)
static inline void __init prcmu_early_init(void)
{
	db8500_prcmu_early_init();
}