[RFC PATCH 6/6] ARM: implement THREAD_INFO_IN_TASK for uniprocessor systems
Ard Biesheuvel
ardb at kernel.org
Tue Nov 30 00:00:32 PST 2021
On Fri, 26 Nov 2021 at 23:32, Arnd Bergmann <arnd at arndb.de> wrote:
>
> On Fri, Nov 26, 2021 at 11:10 AM Ard Biesheuvel <ardb at kernel.org> wrote:
> > @@ -1169,7 +1169,7 @@ config CURRENT_POINTER_IN_TPIDRURO
> >
> > config IRQSTACKS
> > def_bool y
> > - depends on GENERIC_IRQ_MULTI_HANDLER && THREAD_INFO_IN_TASK
> > + depends on GENERIC_IRQ_MULTI_HANDLER
> > select HAVE_IRQ_EXIT_ON_IRQ_STACK
> > select HAVE_SOFTIRQ_ON_OWN_STACK
>
> Side note: after this, we might want to investigate finishing off
> GENERIC_IRQ_MULTI_HANDLER for all architectures. The
> currently missing platforms are ARM_SINGLE_ARMV7M,
> ARCH_FOOTBRIDGE, ARCH_IOP32X and ARCH_RPC.
>
> These are a bit tricky (presumably this is why they are not converted
> yet), but it should be possible to do.
>
> > static inline void set_current(struct task_struct *cur)
> > {
> > - if (!IS_ENABLED(CONFIG_CURRENT_POINTER_IN_TPIDRURO))
> > + if (!IS_ENABLED(CONFIG_CURRENT_POINTER_IN_TPIDRURO) &&
> > + !(IS_ENABLED(CONFIG_SMP) &&
> > + IS_ENABLED(CONFIG_SMP_ON_UP) &&
> > + smp_on_up)) {
>
> I think you can just use is_smp() here to simplify the condition. You might
> need to move the definition to a different header if that causes an #include
> loop.
>
OK
> > @@ -39,16 +67,30 @@ static inline struct task_struct *get_current(void)
> > * https://github.com/ClangBuiltLinux/linux/issues/1485
> > */
> > cur = __builtin_thread_pointer();
> > +#elif defined(CONFIG_CURRENT_POINTER_IN_TPIDRURO) || defined(CONFIG_SMP)
> > + asm("0: mrc p15, 0, %0, c13, c0, 3 \n\t"
> > +#ifdef CONFIG_CPU_V6
> > + "1: \n\t"
> > + " .subsection 1 \n\t"
> > + "2: " LOAD_CURRENT
> > + " b 1b \n\t"
> > + " .previous \n\t"
> > + " .pushsection \".alt.smp.init\", \"a\" \n\t"
> > + " .long 0b - . \n\t"
> > + " b . + (2b - 0b) \n\t"
> > + " .popsection \n\t"
> > +#endif
>
> You mentioned earlier that this gets ugly with SMP_ON_UP on ARMv6, now
> I see what you meant ;-)
>
> I can see an increasing number of reasons for no longer supporting this
> option. As we recently discussed on IRC, this would affect omap2plus_defconfig,
> imx_v6_v7_defconfig and realview_defconfig, which would all have to drop
> either CPU_V6 or SMP. Since you got it working already, this also seems
> better left as a cleanup for another time once we can build consensus on it,
> but my guess is that at this point the benefits of removing it outweigh those
> of keeping it.
>
Agreed.
More information about the linux-arm-kernel
mailing list