Messages in this thread Patch in this message | | | Date | Wed, 17 Nov 2021 12:24:43 -0700 | From | Nathan Chancellor <> | Subject | Re: [PATCH] clocksource/drivers/arm_arch_timer: Force inlining of erratum_set_next_event_generic() |
| |
On Wed, Nov 17, 2021 at 11:35:32AM +0000, Marc Zyngier wrote: > With some specific kernel configuration and Clang, the kernel fails > to like with something like:
Specifically, CONFIG_CFI_CLANG=y from what I could tell from looking into this: https://github.com/ClangBuiltLinux/linux/issues/1503
> ld.lld: error: undefined symbol: __compiletime_assert_200 > >>> referenced by arch_timer.h:156 (./arch/arm64/include/asm/arch_timer.h:156) > >>> clocksource/arm_arch_timer.o:(erratum_set_next_event_generic) in archive drivers/built-in.a > > ld.lld: error: undefined symbol: __compiletime_assert_197 > >>> referenced by arch_timer.h:133 (./arch/arm64/include/asm/arch_timer.h:133) > >>> clocksource/arm_arch_timer.o:(erratum_set_next_event_generic) in archive drivers/built-in.a > make: *** [Makefile:1161: vmlinux] Error 1 > > These are due to the BUILD_BUG() macros contained in the low-level > accessors (arch_timer_reg_{write,read}_cp15) being emitted, as the > access type wasn't known at compile time. > > Fix this by making erratum_set_next_event_generic() __force_inline, > resulting in the 'access' parameter to be resolved at compile time, > similarly to what is already done for set_next_event(). > > Fixes: 4775bc63f880 ("Add build-time guards for unhandled register accesses")
It looks like the prefix was removed? Shouldn't it be:
Fixes: 4775bc63f880 ("clocksource/arm_arch_timer: Add build-time guards for unhandled register accesses")
> Reported-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > Signed-off-by: Marc Zyngier <maz@kernel.org> > Cc: Mark Rutland <mark.rutland@arm.com> > Cc: Daniel Lezcano <daniel.lezcano@linaro.org> > Cc: Sami Tolvanen <samitolvanen@google.com> > Cc: Nick Desaulniers <ndesaulniers@google.com>
Reviewed-by: Nathan Chancellor <nathan@kernel.org> Tested-by: Nathan Chancellor <nathan@kernel.org>
> --- > drivers/clocksource/arm_arch_timer.c | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c > index 9a04eacc4412..1ecd52f903b8 100644 > --- a/drivers/clocksource/arm_arch_timer.c > +++ b/drivers/clocksource/arm_arch_timer.c > @@ -394,8 +394,13 @@ EXPORT_SYMBOL_GPL(timer_unstable_counter_workaround); > > static atomic_t timer_unstable_counter_workaround_in_use = ATOMIC_INIT(0); > > -static void erratum_set_next_event_generic(const int access, unsigned long evt, > - struct clock_event_device *clk) > +/* > + * Force the inlining of this function so that the register accesses > + * can be themselves correctly inlined. > + */ > +static __always_inline > +void erratum_set_next_event_generic(const int access, unsigned long evt, > + struct clock_event_device *clk) > { > unsigned long ctrl; > u64 cval; > -- > 2.30.2 >
| |