[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <Yr8TSxroBaL3oRDV@dev-arch.thelio-3990X>
Date: Fri, 1 Jul 2022 08:31:23 -0700
From: Nathan Chancellor <nathan@...nel.org>
To: Greg Kroah-Hartman <gregkh@...uxfoundation.org>
Cc: linux-kernel@...r.kernel.org, stable@...r.kernel.org,
Linus Walleij <linus.walleij@...aro.org>,
Daniel Lezcano <daniel.lezcano@...aro.org>
Subject: Re: [PATCH 5.15 02/28] clocksource/drivers/ixp4xx: remove __init
from ixp4xx_timer_setup()
Hi Greg,
On Thu, Jun 30, 2022 at 03:46:58PM +0200, Greg Kroah-Hartman wrote:
> From: Greg Kroah-Hartman <gregkh@...uxfoundation.org>
>
> ixp4xx_timer_setup is exported, and so can not be an __init function.
> Remove the __init marking as the build system is rightfully claiming
> this is an error in older kernels.
>
> This is fixed "properly" in commit 41929c9f628b
> ("clocksource/drivers/ixp4xx: Drop boardfile probe path") but that can
> not be backported to older kernels as the reworking of the IXP4xx
> codebase is not suitable for stable releases.
>
> Cc: Linus Walleij <linus.walleij@...aro.org>
> Cc: Daniel Lezcano <daniel.lezcano@...aro.org>
> Signed-off-by: Greg Kroah-Hartman <gregkh@...uxfoundation.org>
This patch causes the following warnings with clang when building
ARCH=arm allmodconfig on 5.15, 5.10, and 5.4. I am surprised nobody else
saw them.
WARNING: modpost: vmlinux.o(.text+0x1219ccc): Section mismatch in reference from the function ixp4xx_timer_register() to the function .init.text:sched_clock_register()
The function ixp4xx_timer_register() references
the function __init sched_clock_register().
This is often because ixp4xx_timer_register lacks a __init
annotation or the annotation of sched_clock_register is wrong.
WARNING: modpost: vmlinux.o(.text+0x1219cf4): Section mismatch in reference from the function ixp4xx_timer_register() to the function .init.text:register_current_timer_delay()
The function ixp4xx_timer_register() references
the function __init register_current_timer_delay().
This is often because ixp4xx_timer_register lacks a __init
annotation or the annotation of register_current_timer_delay is wrong.
I think it would just be better to remove the export of
ixp4xx_timer_setup(), rather than removing __init, as it is only called
in arch/arm/mach-ixp4xx/common.c, which has to be built into the kernel
image as it is 'obj-y' in arch/arm/mach-ixp4xx/Makefile.
Cheers,
Nathan
> ---
> drivers/clocksource/mmio.c | 2 +-
> drivers/clocksource/timer-ixp4xx.c | 10 ++++------
> include/linux/platform_data/timer-ixp4xx.h | 5 ++---
> 3 files changed, 7 insertions(+), 10 deletions(-)
>
> --- a/drivers/clocksource/mmio.c
> +++ b/drivers/clocksource/mmio.c
> @@ -46,7 +46,7 @@ u64 clocksource_mmio_readw_down(struct c
> * @bits: Number of valid bits
> * @read: One of clocksource_mmio_read*() above
> */
> -int __init clocksource_mmio_init(void __iomem *base, const char *name,
> +int clocksource_mmio_init(void __iomem *base, const char *name,
> unsigned long hz, int rating, unsigned bits,
> u64 (*read)(struct clocksource *))
> {
> --- a/drivers/clocksource/timer-ixp4xx.c
> +++ b/drivers/clocksource/timer-ixp4xx.c
> @@ -161,9 +161,8 @@ static int ixp4xx_resume(struct clock_ev
> * We use OS timer1 on the CPU for the timer tick and the timestamp
> * counter as a source of real clock ticks to account for missed jiffies.
> */
> -static __init int ixp4xx_timer_register(void __iomem *base,
> - int timer_irq,
> - unsigned int timer_freq)
> +static int ixp4xx_timer_register(void __iomem *base, int timer_irq,
> + unsigned int timer_freq)
> {
> struct ixp4xx_timer *tmr;
> int ret;
> @@ -269,9 +268,8 @@ builtin_platform_driver(ixp4xx_timer_dri
> * @timer_irq: Linux IRQ number for the timer
> * @timer_freq: Fixed frequency of the timer
> */
> -void __init ixp4xx_timer_setup(resource_size_t timerbase,
> - int timer_irq,
> - unsigned int timer_freq)
> +void ixp4xx_timer_setup(resource_size_t timerbase, int timer_irq,
> + unsigned int timer_freq)
> {
> void __iomem *base;
>
> --- a/include/linux/platform_data/timer-ixp4xx.h
> +++ b/include/linux/platform_data/timer-ixp4xx.h
> @@ -4,8 +4,7 @@
>
> #include <linux/ioport.h>
>
> -void __init ixp4xx_timer_setup(resource_size_t timerbase,
> - int timer_irq,
> - unsigned int timer_freq);
> +void ixp4xx_timer_setup(resource_size_t timerbase, int timer_irq,
> + unsigned int timer_freq);
>
> #endif
>
>
>
Powered by blists - more mailing lists