Re: next-20240712: task_work.c:(.text+0xc2): undefined reference to `irq_work_queue'

From: Guenter Roeck
Date: Fri Jul 19 2024 - 10:18:19 EST


On Thu, Jul 18, 2024 at 09:25:27AM -0700, Nathan Chancellor wrote:
> On Fri, Jul 12, 2024 at 05:03:33PM +0200, Peter Zijlstra wrote:
> > On Fri, Jul 12, 2024 at 04:11:54PM +0200, Arnd Bergmann wrote:
> > > On Fri, Jul 12, 2024, at 15:24, Peter Zijlstra wrote:
> > > > On Fri, Jul 12, 2024 at 02:28:38PM +0200, Arnd Bergmann wrote:
> > > >> On Fri, Jul 12, 2024, at 14:13, Naresh Kamboju wrote:
> > > >
> > > >> that we may have to always enable IRQ_WORK even on non-SMP
> > > >> kernels now. In practice it is already enabled in most
> > > >> configurations for one reason or another, the the cost is
> > > >> likely very small.
> > > >>
> > > >> Otherwise checking for CONFIG_HAVE_NMI in the new code might work.
> > > >
> > > > ARM seems to have HAVE_NMI while also being one of the architectures
> > > > that is now failing.
> > >
> > > Right, in this case we would also need
> > >
> > > --- a/arch/Kconfig
> > > +++ b/arch/Kconfig
> > > @@ -236,6 +236,7 @@ config HAVE_FUNCTION_ERROR_INJECTION
> > >
> > > config HAVE_NMI
> > > bool
> > > + select IRQ_WORK
> > >
> > > config HAVE_FUNCTION_DESCRIPTORS
> > > bool
> >
> > Yeah, that works for me I suppose.
>
> Was there any conclusion to this thread that I missed? The
> configurations Naresh mentioned in the original post are now broken in
> mainline because the pull request was sent without any solution to this
> issue.
>
> FWIW, that diff doesn't fix ARCH=powerpc tinyconfig, as it does not have
> CONFIG_HAVE_NMI. kernel/task_work.c is unconditionally built so
> shouldn't IRQ_WORK now be 'default y' (or just eliminated altogether)?
>

Actually, many tinyconfig builds are now broken.

Example from alpha:

alpha-linux-ld: kernel/task_work.o: in function `task_work_add':
(.text+0x1b4): undefined reference to `irq_work_queue'
alpha-linux-ld: (.text+0x1bc): undefined reference to `irq_work_queue'

alpha does not set "HAVE_NMI". AFAICS task_work.c is always built,
and it now calls irq_work_queue() unconditionally, so unless that
is changed IRQ_WORK is now mandatory and must not just depend on
HAVE_NMI or anything else.

Guenter