[PATCH] ARM: uniphier: only select TWD for SMP

Arnd Bergmann arnd at arndb.de
Mon May 18 13:26:33 PDT 2015


On Tuesday 19 May 2015 02:18:53 Masahiro Yamada wrote:
> Hi Arnd,
> 
> 2015-05-19 0:55 GMT+09:00 Arnd Bergmann <arnd at arndb.de>:
> > This makes uniphier behave like all the other platforms that
> > support TWD, and only select this driver when SMP is enabled.
> > Without this, we get a compile error on UP builds:
> >
> > arch/arm/kernel/smp_twd.c: In function 'twd_local_timer_of_register':
> > arch/arm/kernel/smp_twd.c:391:20: error: 'setup_max_cpus' undeclared (first use in this function)
> >
> > Signed-off-by: Arnd Bergmann <arnd at arndb.de>
> > ---
> > I'd like to apply this directly to the next/soc branch
> >
> > diff --git a/arch/arm/mach-uniphier/Kconfig b/arch/arm/mach-uniphier/Kconfig
> > index a017b1dd9c78..b640458fd757 100644
> > --- a/arch/arm/mach-uniphier/Kconfig
> > +++ b/arch/arm/mach-uniphier/Kconfig
> > @@ -5,7 +5,7 @@ config ARCH_UNIPHIER
> >         select ARM_GLOBAL_TIMER
> >         select ARM_GIC
> >         select HAVE_ARM_SCU
> > -       select HAVE_ARM_TWD
> > +       select HAVE_ARM_TWD if SMP
> >         help
> >           Support for UniPhier SoC family developed by Socionext Inc.
> >           (formerly, System LSI Business Division of Panasonic Corporation)
> 
> 
> 
> I am not familiar with smp_twd.c, but I think
> the local timer and watchdog still exist in the ARM mpcore
> even if it is a uni-processor implementation.
> 
> That is why I simply selected HAVE_ARM_TWD.
> Am I doing something wrong?

I was wondering about this too. Everybody else has the 'if SMP' dependency
here, and if I leave it out, I get the build error. We could probably
fix that build error easily, but I don't know what the exact reason is
we can't have use the code when there is only one CPU.

This was introduced as part of 904464b91eca8 ("ARM: 7655/1: smp_twd: make
twd_local_timer_of_register() no-op for nosmp"), before that, we would
just try to use the driver, but fail in one of these calls:

        twd_evt = alloc_percpu(struct clock_event_device);
        err = request_percpu_irq(twd_ppi, twd_handler, "twd", twd_evt);
        err = register_cpu_notifier(&twd_timer_cpu_nb);

which in turn causes a run-time warning. If we could fix that code
to just work on non-SMP, we can probably use that driver on all
machines that have the hardware.

> Is it reasonable to have something depends on HAVE_ARM_TWD?
> 
> 
> config SMP_ARM_TWD
>       depends on SMP && HAVE_ARM_TWD
> 
> 
> 
> obj-$(SMP_ARM_TWD)       +=   smp_twd.o
> 
> 
> 
> I am not sure...

This would probably work, but I'd like to understand the problem
more thoroughly before we change the behavior.

[adding Russell and Will to Cc, maybe they remember better why we
do things the way we do here]

	Arnd



More information about the linux-arm-kernel mailing list