All of lore.kernel.org
 help / color / mirror / Atom feed
* RCU: undefined reference to irq_work_queue
@ 2022-03-17 11:32 Hyeonggon Yoo
  2022-03-17 14:00 ` Paul E. McKenney
  2022-03-17 15:22 ` Zhouyi Zhou
  0 siblings, 2 replies; 14+ messages in thread
From: Hyeonggon Yoo @ 2022-03-17 11:32 UTC (permalink / raw)
  To: rcu
  Cc: Paul E. McKenney, Josh Triplett, Steven Rostedt,
	Mathieu Desnoyers, Joel Fernandes, Hyeonggon Yoo, linux-kernel

Hello RCU folks,

I like to use minimal configuration for kernel development.
when building with tinyconfig + CONFIG_PREEMPT=y on arm64:

ld: kernel/rcu/update.o: in function `call_rcu_tasks':
update.c:(.text+0xb2c): undefined reference to `irq_work_queue'
update.c:(.text+0xb2c): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `irq_work_queue'
make: *** [Makefile:1155: vmlinux] Error 1

It seems RCU calls irq_work_queue() without checking if CONFIG_IRQ_WORK is enabled.

-- 
Thank you, You are awesome!
Hyeonggon :-)

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: RCU: undefined reference to irq_work_queue
  2022-03-17 11:32 RCU: undefined reference to irq_work_queue Hyeonggon Yoo
@ 2022-03-17 14:00 ` Paul E. McKenney
  2022-03-17 15:24   ` Hyeonggon Yoo
  2022-03-17 15:22 ` Zhouyi Zhou
  1 sibling, 1 reply; 14+ messages in thread
From: Paul E. McKenney @ 2022-03-17 14:00 UTC (permalink / raw)
  To: Hyeonggon Yoo
  Cc: rcu, Josh Triplett, Steven Rostedt, Mathieu Desnoyers,
	Joel Fernandes, linux-kernel

On Thu, Mar 17, 2022 at 11:32:53AM +0000, Hyeonggon Yoo wrote:
> Hello RCU folks,
> 
> I like to use minimal configuration for kernel development.
> when building with tinyconfig + CONFIG_PREEMPT=y on arm64:
> 
> ld: kernel/rcu/update.o: in function `call_rcu_tasks':
> update.c:(.text+0xb2c): undefined reference to `irq_work_queue'
> update.c:(.text+0xb2c): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `irq_work_queue'
> make: *** [Makefile:1155: vmlinux] Error 1
> 
> It seems RCU calls irq_work_queue() without checking if CONFIG_IRQ_WORK is enabled.

Indeed it does!

And kernel/rcu/Kconfig shows why:

config TASKS_TRACE_RCU
	def_bool 0
	select IRQ_WORK
	help
	  This option enables a task-based RCU implementation that uses
	  explicit rcu_read_lock_trace() read-side markers, and allows
	  these readers to appear in the idle loop as well as on the CPU
	  hotplug code paths.  It can force IPIs on online CPUs, including
	  idle ones, so use with caution.

So the solution is to further minimize your configuration so as to
deselect TASKS_TRACE_RCU.  This means making sure that both BPF and
the various RCU torture tests are all deselected.

Or turn on IRQ_WORK, for example, if you need to use BPF.

							Thanx, Paul

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: RCU: undefined reference to irq_work_queue
  2022-03-17 11:32 RCU: undefined reference to irq_work_queue Hyeonggon Yoo
  2022-03-17 14:00 ` Paul E. McKenney
@ 2022-03-17 15:22 ` Zhouyi Zhou
  2022-03-17 15:54   ` Hyeonggon Yoo
  1 sibling, 1 reply; 14+ messages in thread
From: Zhouyi Zhou @ 2022-03-17 15:22 UTC (permalink / raw)
  To: Hyeonggon Yoo
  Cc: rcu, Paul E. McKenney, Josh Triplett, Steven Rostedt,
	Mathieu Desnoyers, Joel Fernandes, linux-kernel

Hi,

On Thu, Mar 17, 2022 at 8:48 PM Hyeonggon Yoo <42.hyeyoo@gmail.com> wrote:
>
> Hello RCU folks,
>
> I like to use minimal configuration for kernel development.
> when building with tinyconfig + CONFIG_PREEMPT=y on arm64:
I invoke cross compiler to reproduce the bug on my X86 machine
$make  ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
CC=aarch64-linux-gnu-gcc-10 tinyconfig
let CONFIG_PREEMPT=y  in .config
$make  ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
CC=aarch64-linux-gnu-gcc-10 -j 16
LD      vmlinux
aarch64-linux-gnu-ld: kernel/rcu/update.o: in function `call_rcu_tasks':
update.c:(.text+0xb30): undefined reference to `irq_work_queue'
update.c:(.text+0xb30): relocation truncated to fit: R_AARCH64_CALL26
against undefined symbol `irq_work_queue'
>
> ld: kernel/rcu/update.o: in function `call_rcu_tasks':
> update.c:(.text+0xb2c): undefined reference to `irq_work_queue'
> update.c:(.text+0xb2c): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `irq_work_queue'
> make: *** [Makefile:1155: vmlinux] Error 1
>
> It seems RCU calls irq_work_queue() without checking if CONFIG_IRQ_WORK is enabled.
>
> --
> Thank you, You are awesome!
> Hyeonggon :-)
Meanwhile, there is no error for doing the same to build X86 kernel.
I think the reason is:
arch/x86/Kconfig select PERF_EVENT
and PERF_EVENT select IRQ_WORK

Hope my little research could provide some clues to solve the problem ;-)

You are welcome
Cheers
Zhouyi

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: RCU: undefined reference to irq_work_queue
  2022-03-17 14:00 ` Paul E. McKenney
@ 2022-03-17 15:24   ` Hyeonggon Yoo
  2022-03-17 16:20     ` Paul E. McKenney
  0 siblings, 1 reply; 14+ messages in thread
From: Hyeonggon Yoo @ 2022-03-17 15:24 UTC (permalink / raw)
  To: Paul E. McKenney
  Cc: rcu, Josh Triplett, Steven Rostedt, Mathieu Desnoyers,
	Joel Fernandes, linux-kernel

On Thu, Mar 17, 2022 at 07:00:00AM -0700, Paul E. McKenney wrote:
> On Thu, Mar 17, 2022 at 11:32:53AM +0000, Hyeonggon Yoo wrote:
> > Hello RCU folks,
> > 
> > I like to use minimal configuration for kernel development.
> > when building with tinyconfig + CONFIG_PREEMPT=y on arm64:
> > 
> > ld: kernel/rcu/update.o: in function `call_rcu_tasks':
> > update.c:(.text+0xb2c): undefined reference to `irq_work_queue'
> > update.c:(.text+0xb2c): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `irq_work_queue'
> > make: *** [Makefile:1155: vmlinux] Error 1
> > 
> > It seems RCU calls irq_work_queue() without checking if CONFIG_IRQ_WORK is enabled.
> 
> Indeed it does!
> 
> And kernel/rcu/Kconfig shows why:
> 
> config TASKS_TRACE_RCU
> 	def_bool 0
> 	select IRQ_WORK
> 	help
> 	  This option enables a task-based RCU implementation that uses
> 	  explicit rcu_read_lock_trace() read-side markers, and allows
> 	  these readers to appear in the idle loop as well as on the CPU
> 	  hotplug code paths.  It can force IPIs on online CPUs, including
> 	  idle ones, so use with caution.
> 
> So the solution is to further minimize your configuration so as to
> deselect TASKS_TRACE_RCU.

They are already not selected.

> This means making sure that both BPF and
> the various RCU torture tests are all deselected.

I wanted to say call_rcu_tasks() can be referenced even when IRQ_WORK is not
selected, making it fail to build.

> > ld: kernel/rcu/update.o: in function `call_rcu_tasks':
> > update.c:(.text+0xb2c): undefined reference to `irq_work_queue'
> > update.c:(.text+0xb2c): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `irq_work_queue'
> > make: *** [Makefile:1155: vmlinux] Error 1

Isn't it better to fix this build failure?

It fails to build when both TASKS_TRACE_RCU and IRQ_WORK are not selected
and PREEMPT is selected.

  │ Symbol: TASKS_TRACE_RCU [=n]                                            │
  │ Type  : bool                                                            │
  │ Defined at kernel/rcu/Kconfig:96                                        │
  │ Selects: IRQ_WORK [=n]                                                  │
  │ Selected by [n]:                                                        │
  │   - BPF_SYSCALL [=n]                                                    │
  │   - RCU_SCALE_TEST [=n] && DEBUG_KERNEL [=y]                            │
  │   - RCU_TORTURE_TEST [=n] && DEBUG_KERNEL [=y]                          │
  │   - RCU_REF_SCALE_TEST [=n] && DEBUG_KERNEL [=y]

Thanks!

> 
> Or turn on IRQ_WORK, for example, if you need to use BPF.
> 
> 							Thanx, Paul

-- 
Thank you, You are awesome!
Hyeonggon :-)

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: RCU: undefined reference to irq_work_queue
  2022-03-17 15:22 ` Zhouyi Zhou
@ 2022-03-17 15:54   ` Hyeonggon Yoo
  0 siblings, 0 replies; 14+ messages in thread
From: Hyeonggon Yoo @ 2022-03-17 15:54 UTC (permalink / raw)
  To: Zhouyi Zhou
  Cc: rcu, Paul E. McKenney, Josh Triplett, Steven Rostedt,
	Mathieu Desnoyers, Joel Fernandes, linux-kernel

On Thu, Mar 17, 2022 at 11:22:28PM +0800, Zhouyi Zhou wrote:
> Hi,
> 
> On Thu, Mar 17, 2022 at 8:48 PM Hyeonggon Yoo <42.hyeyoo@gmail.com> wrote:
> >
> > Hello RCU folks,
> >
> > I like to use minimal configuration for kernel development.
> > when building with tinyconfig + CONFIG_PREEMPT=y on arm64:
> I invoke cross compiler to reproduce the bug on my X86 machine
> $make  ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
> CC=aarch64-linux-gnu-gcc-10 tinyconfig
> let CONFIG_PREEMPT=y  in .config
> $make  ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
> CC=aarch64-linux-gnu-gcc-10 -j 16
> LD      vmlinux
> aarch64-linux-gnu-ld: kernel/rcu/update.o: in function `call_rcu_tasks':
> update.c:(.text+0xb30): undefined reference to `irq_work_queue'
> update.c:(.text+0xb30): relocation truncated to fit: R_AARCH64_CALL26
> against undefined symbol `irq_work_queue'

Right. that was exactly what I faced :)

> >
> > ld: kernel/rcu/update.o: in function `call_rcu_tasks':
> > update.c:(.text+0xb2c): undefined reference to `irq_work_queue'
> > update.c:(.text+0xb2c): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `irq_work_queue'
> > make: *** [Makefile:1155: vmlinux] Error 1
> >
> > It seems RCU calls irq_work_queue() without checking if CONFIG_IRQ_WORK is enabled.
> >
> > --
> > Thank you, You are awesome!
> > Hyeonggon :-)

> Meanwhile, there is no error for doing the same to build X86 kernel.
> I think the reason is:
> arch/x86/Kconfig select PERF_EVENT
> and PERF_EVENT select IRQ_WORK

Right. selecting anything that selects IRQ_WORK solves the problem.
Simply enabling printk also solves this.

> Hope my little research could provide some clues to solve the problem ;-)

Thank you for kind reply!

BTW, can we just fix this? (e.g. by conditionally compiling the problematic
code or always selecting IRQ_WORK)

> You are welcome
> Cheers
> Zhouyi

-- 
Thank you, You are awesome!
Hyeonggon :-)

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: RCU: undefined reference to irq_work_queue
  2022-03-17 15:24   ` Hyeonggon Yoo
@ 2022-03-17 16:20     ` Paul E. McKenney
  2022-03-17 16:45       ` Hyeonggon Yoo
  0 siblings, 1 reply; 14+ messages in thread
From: Paul E. McKenney @ 2022-03-17 16:20 UTC (permalink / raw)
  To: Hyeonggon Yoo
  Cc: rcu, Josh Triplett, Steven Rostedt, Mathieu Desnoyers,
	Joel Fernandes, linux-kernel

On Thu, Mar 17, 2022 at 03:24:42PM +0000, Hyeonggon Yoo wrote:
> On Thu, Mar 17, 2022 at 07:00:00AM -0700, Paul E. McKenney wrote:
> > On Thu, Mar 17, 2022 at 11:32:53AM +0000, Hyeonggon Yoo wrote:
> > > Hello RCU folks,
> > > 
> > > I like to use minimal configuration for kernel development.
> > > when building with tinyconfig + CONFIG_PREEMPT=y on arm64:
> > > 
> > > ld: kernel/rcu/update.o: in function `call_rcu_tasks':
> > > update.c:(.text+0xb2c): undefined reference to `irq_work_queue'
> > > update.c:(.text+0xb2c): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `irq_work_queue'
> > > make: *** [Makefile:1155: vmlinux] Error 1
> > > 
> > > It seems RCU calls irq_work_queue() without checking if CONFIG_IRQ_WORK is enabled.
> > 
> > Indeed it does!
> > 
> > And kernel/rcu/Kconfig shows why:
> > 
> > config TASKS_TRACE_RCU
> > 	def_bool 0
> > 	select IRQ_WORK
> > 	help
> > 	  This option enables a task-based RCU implementation that uses
> > 	  explicit rcu_read_lock_trace() read-side markers, and allows
> > 	  these readers to appear in the idle loop as well as on the CPU
> > 	  hotplug code paths.  It can force IPIs on online CPUs, including
> > 	  idle ones, so use with caution.
> > 
> > So the solution is to further minimize your configuration so as to
> > deselect TASKS_TRACE_RCU.
> 
> They are already not selected.

Good, thank you.

How about TASKS_RUDE_RCU, TASKS_TRACE_RCU, and TASKS_RCU_GENERIC?

> > This means making sure that both BPF and
> > the various RCU torture tests are all deselected.
> 
> I wanted to say call_rcu_tasks() can be referenced even when IRQ_WORK is not
> selected, making it fail to build.

I am guessing because TASKS_RCU_GENERIC is selected?

If so, does the patch at the end of this email help?

> > > ld: kernel/rcu/update.o: in function `call_rcu_tasks':
> > > update.c:(.text+0xb2c): undefined reference to `irq_work_queue'
> > > update.c:(.text+0xb2c): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `irq_work_queue'
> > > make: *** [Makefile:1155: vmlinux] Error 1
> 
> Isn't it better to fix this build failure?

But of course!  However, first I need to know exactly what is causing your
build failure.  I cannot see your .config file, so I am having to guess.

Don't get me wrong, I do have a lot of practice guessing, but it is still
just guessing.  ;-)

> It fails to build when both TASKS_TRACE_RCU and IRQ_WORK are not selected
> and PREEMPT is selected.
> 
>   │ Symbol: TASKS_TRACE_RCU [=n]                                            │
>   │ Type  : bool                                                            │
>   │ Defined at kernel/rcu/Kconfig:96                                        │
>   │ Selects: IRQ_WORK [=n]                                                  │
>   │ Selected by [n]:                                                        │
>   │   - BPF_SYSCALL [=n]                                                    │
>   │   - RCU_SCALE_TEST [=n] && DEBUG_KERNEL [=y]                            │
>   │   - RCU_TORTURE_TEST [=n] && DEBUG_KERNEL [=y]                          │
>   │   - RCU_REF_SCALE_TEST [=n] && DEBUG_KERNEL [=y]
> 
> Thanks!
> 
> > 
> > Or turn on IRQ_WORK, for example, if you need to use BPF.

Or do you already have TASKS_RCU_GENERIC deselected?

							Thanx, Paul

------------------------------------------------------------------------

diff --git a/kernel/rcu/Kconfig b/kernel/rcu/Kconfig
index bf8e341e75b4..f559870fbf8b 100644
--- a/kernel/rcu/Kconfig
+++ b/kernel/rcu/Kconfig
@@ -86,6 +86,7 @@ config TASKS_RCU
 
 config TASKS_RUDE_RCU
 	def_bool 0
+	select IRQ_WORK
 	help
 	  This option enables a task-based RCU implementation that uses
 	  only context switch (including preemption) and user-mode

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: RCU: undefined reference to irq_work_queue
  2022-03-17 16:20     ` Paul E. McKenney
@ 2022-03-17 16:45       ` Hyeonggon Yoo
  2022-03-17 17:36         ` Paul E. McKenney
  0 siblings, 1 reply; 14+ messages in thread
From: Hyeonggon Yoo @ 2022-03-17 16:45 UTC (permalink / raw)
  To: Paul E. McKenney
  Cc: rcu, Josh Triplett, Steven Rostedt, Mathieu Desnoyers,
	Joel Fernandes, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 4996 bytes --]

On Thu, Mar 17, 2022 at 09:20:33AM -0700, Paul E. McKenney wrote:
> On Thu, Mar 17, 2022 at 03:24:42PM +0000, Hyeonggon Yoo wrote:
> > On Thu, Mar 17, 2022 at 07:00:00AM -0700, Paul E. McKenney wrote:
> > > On Thu, Mar 17, 2022 at 11:32:53AM +0000, Hyeonggon Yoo wrote:
> > > > Hello RCU folks,
> > > > 
> > > > I like to use minimal configuration for kernel development.
> > > > when building with tinyconfig + CONFIG_PREEMPT=y on arm64:
> > > > 
> > > > ld: kernel/rcu/update.o: in function `call_rcu_tasks':
> > > > update.c:(.text+0xb2c): undefined reference to `irq_work_queue'
> > > > update.c:(.text+0xb2c): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `irq_work_queue'
> > > > make: *** [Makefile:1155: vmlinux] Error 1
> > > > 
> > > > It seems RCU calls irq_work_queue() without checking if CONFIG_IRQ_WORK is enabled.
> > > 
> > > Indeed it does!
> > > 
> > > And kernel/rcu/Kconfig shows why:
> > > 
> > > config TASKS_TRACE_RCU
> > > 	def_bool 0
> > > 	select IRQ_WORK
> > > 	help
> > > 	  This option enables a task-based RCU implementation that uses
> > > 	  explicit rcu_read_lock_trace() read-side markers, and allows
> > > 	  these readers to appear in the idle loop as well as on the CPU
> > > 	  hotplug code paths.  It can force IPIs on online CPUs, including
> > > 	  idle ones, so use with caution.
> > > 
> > > So the solution is to further minimize your configuration so as to
> > > deselect TASKS_TRACE_RCU.
> > 
> > They are already not selected.
> 
> Good, thank you.
> 
> How about TASKS_RUDE_RCU, TASKS_TRACE_RCU, and TASKS_RCU_GENERIC?
>

TASKS_RUDE_RCU=n
TASKS_TRACE_RCU=n
TASKS_RCU_GENERIC=y
TASKS_RCU=y

> > > This means making sure that both BPF and
> > > the various RCU torture tests are all deselected.
> > 
> > I wanted to say call_rcu_tasks() can be referenced even when IRQ_WORK is not
> > selected, making it fail to build.
> 
> I am guessing because TASKS_RCU_GENERIC is selected?
>

Right.

> If so, does the patch at the end of this email help?
>

No. did not help.

I think I found reason...
with PREEMPTION=y,

in kernel/rcu/Kconfig:
config TASKS_RCU
        def_bool PREEMPTION
        help
          This option enables a task-based RCU implementation that uses
          only voluntary context switch (not preemption!), idle, and 
          user-mode execution as quiescent states.  Not for manual selection.

in kernel/rcu/Kconfig:
config TASKS_RCU_GENERIC
        def_bool TASKS_RCU || TASKS_RUDE_RCU || TASKS_TRACE_RCU
        select SRCU
        help
          This option enables generic infrastructure code supporting
          task-based RCU implementations.  Not for manual selection.


> > > > ld: kernel/rcu/update.o: in function `call_rcu_tasks':
> > > > update.c:(.text+0xb2c): undefined reference to `irq_work_queue'
> > > > update.c:(.text+0xb2c): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `irq_work_queue'
> > > > make: *** [Makefile:1155: vmlinux] Error 1
> > 
> > Isn't it better to fix this build failure?
> 
> But of course!  However, first I need to know exactly what is causing your
> build failure.  I cannot see your .config file, so I am having to guess.
>
> Don't get me wrong, I do have a lot of practice guessing, but it is still
> just guessing.  ;-)

Sorry to make you guess. Maybe too late, but added config as attachment ;)

> 
> > It fails to build when both TASKS_TRACE_RCU and IRQ_WORK are not selected
> > and PREEMPT is selected.
> > 
> >   │ Symbol: TASKS_TRACE_RCU [=n]                                            │
> >   │ Type  : bool                                                            │
> >   │ Defined at kernel/rcu/Kconfig:96                                        │
> >   │ Selects: IRQ_WORK [=n]                                                  │
> >   │ Selected by [n]:                                                        │
> >   │   - BPF_SYSCALL [=n]                                                    │
> >   │   - RCU_SCALE_TEST [=n] && DEBUG_KERNEL [=y]                            │
> >   │   - RCU_TORTURE_TEST [=n] && DEBUG_KERNEL [=y]                          │
> >   │   - RCU_REF_SCALE_TEST [=n] && DEBUG_KERNEL [=y]
> > 
> > Thanks!
> > 
> > > 
> > > Or turn on IRQ_WORK, for example, if you need to use BPF.
> 
> Or do you already have TASKS_RCU_GENERIC deselected?
>

No, this is selected. TASKS_RCU_GENERIC=y. because of PREEMPTION=y.

Thanks!

> 							Thanx, Paul
> 
> ------------------------------------------------------------------------
> 
> diff --git a/kernel/rcu/Kconfig b/kernel/rcu/Kconfig
> index bf8e341e75b4..f559870fbf8b 100644
> --- a/kernel/rcu/Kconfig
> +++ b/kernel/rcu/Kconfig
> @@ -86,6 +86,7 @@ config TASKS_RCU
>  
>  config TASKS_RUDE_RCU
>  	def_bool 0
> +	select IRQ_WORK
>  	help
>  	  This option enables a task-based RCU implementation that uses
>  	  only context switch (including preemption) and user-mode

-- 
Thank you, You are awesome!
Hyeonggon :-)

[-- Attachment #2: .config --]
[-- Type: text/plain, Size: 32164 bytes --]

#
# Automatically generated file; DO NOT EDIT.
# Linux/arm64 5.17.0-rc3 Kernel Configuration
#
CONFIG_CC_VERSION_TEXT="gcc (GCC) 11.2.1 20211203 (Red Hat 11.2.1-7)"
CONFIG_CC_IS_GCC=y
CONFIG_GCC_VERSION=110201
CONFIG_CLANG_VERSION=0
CONFIG_AS_IS_GNU=y
CONFIG_AS_VERSION=23700
CONFIG_LD_IS_BFD=y
CONFIG_LD_VERSION=23700
CONFIG_LLD_VERSION=0
CONFIG_CC_CAN_LINK=y
CONFIG_CC_HAS_ASM_GOTO=y
CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y
CONFIG_CC_HAS_ASM_INLINE=y
CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y
CONFIG_BUILDTIME_TABLE_SORT=y
CONFIG_THREAD_INFO_IN_TASK=y

#
# General setup
#
CONFIG_INIT_ENV_ARG_LIMIT=32
# CONFIG_COMPILE_TEST is not set
# CONFIG_WERROR is not set
CONFIG_LOCALVERSION=""
# CONFIG_LOCALVERSION_AUTO is not set
CONFIG_BUILD_SALT=""
CONFIG_DEFAULT_INIT=""
CONFIG_DEFAULT_HOSTNAME="(none)"
# CONFIG_SYSVIPC is not set
# CONFIG_WATCH_QUEUE is not set
# CONFIG_CROSS_MEMORY_ATTACH is not set
# CONFIG_USELIB is not set
CONFIG_HAVE_ARCH_AUDITSYSCALL=y

#
# IRQ subsystem
#
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_GENERIC_IRQ_SHOW=y
CONFIG_GENERIC_IRQ_SHOW_LEVEL=y
CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y
CONFIG_HARDIRQS_SW_RESEND=y
CONFIG_IRQ_DOMAIN=y
CONFIG_IRQ_DOMAIN_HIERARCHY=y
CONFIG_GENERIC_IRQ_IPI=y
CONFIG_GENERIC_MSI_IRQ=y
CONFIG_GENERIC_MSI_IRQ_DOMAIN=y
CONFIG_IRQ_FORCED_THREADING=y
CONFIG_SPARSE_IRQ=y
# end of IRQ subsystem

CONFIG_GENERIC_TIME_VSYSCALL=y
CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_ARCH_HAS_TICK_BROADCAST=y
CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
CONFIG_HAVE_POSIX_CPU_TIMERS_TASK_WORK=y

#
# Timers subsystem
#
CONFIG_HZ_PERIODIC=y
# CONFIG_NO_HZ_IDLE is not set
# CONFIG_NO_HZ_FULL is not set
# CONFIG_NO_HZ is not set
# CONFIG_HIGH_RES_TIMERS is not set
# end of Timers subsystem

CONFIG_HAVE_EBPF_JIT=y
CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y

#
# BPF subsystem
#
# CONFIG_BPF_SYSCALL is not set
# end of BPF subsystem

CONFIG_PREEMPT_BUILD=y
# CONFIG_PREEMPT_NONE is not set
# CONFIG_PREEMPT_VOLUNTARY is not set
CONFIG_PREEMPT=y
CONFIG_PREEMPT_COUNT=y
CONFIG_PREEMPTION=y

#
# CPU/Task time and stats accounting
#
CONFIG_TICK_CPU_ACCOUNTING=y
# CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set
# CONFIG_IRQ_TIME_ACCOUNTING is not set
# CONFIG_PSI is not set
# end of CPU/Task time and stats accounting

# CONFIG_CPU_ISOLATION is not set

#
# RCU Subsystem
#
CONFIG_TREE_RCU=y
CONFIG_PREEMPT_RCU=y
# CONFIG_RCU_EXPERT is not set
CONFIG_SRCU=y
CONFIG_TREE_SRCU=y
CONFIG_TASKS_RCU_GENERIC=y
CONFIG_TASKS_RCU=y
CONFIG_RCU_STALL_COMMON=y
CONFIG_RCU_NEED_SEGCBLIST=y
# end of RCU Subsystem

# CONFIG_IKCONFIG is not set
CONFIG_GENERIC_SCHED_CLOCK=y

#
# Scheduler features
#
# end of Scheduler features

CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y
CONFIG_CC_HAS_INT128=y
CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5"
CONFIG_ARCH_SUPPORTS_INT128=y
# CONFIG_CGROUPS is not set
# CONFIG_CHECKPOINT_RESTORE is not set
# CONFIG_SCHED_AUTOGROUP is not set
# CONFIG_RELAY is not set
# CONFIG_BLK_DEV_INITRD is not set
# CONFIG_BOOT_CONFIG is not set
# CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE is not set
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_LD_ORPHAN_WARN=y
CONFIG_SYSCTL_EXCEPTION_TRACE=y
CONFIG_EXPERT=y
# CONFIG_MULTIUSER is not set
# CONFIG_SGETMASK_SYSCALL is not set
# CONFIG_SYSFS_SYSCALL is not set
# CONFIG_FHANDLE is not set
# CONFIG_POSIX_TIMERS is not set
# CONFIG_PRINTK is not set
# CONFIG_BUG is not set
# CONFIG_BASE_FULL is not set
# CONFIG_FUTEX is not set
# CONFIG_EPOLL is not set
# CONFIG_SIGNALFD is not set
# CONFIG_TIMERFD is not set
# CONFIG_EVENTFD is not set
# CONFIG_SHMEM is not set
# CONFIG_AIO is not set
# CONFIG_IO_URING is not set
# CONFIG_ADVISE_SYSCALLS is not set
# CONFIG_MEMBARRIER is not set
# CONFIG_KALLSYMS is not set
# CONFIG_USERFAULTFD is not set
CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y
# CONFIG_KCMP is not set
# CONFIG_RSEQ is not set
CONFIG_EMBEDDED=y
CONFIG_HAVE_PERF_EVENTS=y
# CONFIG_PC104 is not set

#
# Kernel Performance Events And Counters
#
# CONFIG_PERF_EVENTS is not set
# end of Kernel Performance Events And Counters

# CONFIG_VM_EVENT_COUNTERS is not set
# CONFIG_COMPAT_BRK is not set
# CONFIG_SLAB is not set
# CONFIG_SLUB is not set
CONFIG_SLOB=y
# CONFIG_SHUFFLE_PAGE_ALLOCATOR is not set
# CONFIG_PROFILING is not set
# end of General setup

CONFIG_ARM64=y
CONFIG_64BIT=y
CONFIG_MMU=y
CONFIG_ARM64_PAGE_SHIFT=12
CONFIG_ARM64_CONT_PTE_SHIFT=4
CONFIG_ARM64_CONT_PMD_SHIFT=4
CONFIG_ARCH_MMAP_RND_BITS_MIN=18
CONFIG_ARCH_MMAP_RND_BITS_MAX=24
CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=11
CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=16
CONFIG_NO_IOPORT_MAP=y
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CSUM=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y
CONFIG_SMP=y
CONFIG_KERNEL_MODE_NEON=y
CONFIG_FIX_EARLYCON_MEM=y
CONFIG_PGTABLE_LEVELS=3
CONFIG_ARCH_SUPPORTS_UPROBES=y
CONFIG_ARCH_PROC_KCORE_TEXT=y

#
# Platform selection
#
# CONFIG_ARCH_ACTIONS is not set
# CONFIG_ARCH_SUNXI is not set
# CONFIG_ARCH_ALPINE is not set
# CONFIG_ARCH_APPLE is not set
# CONFIG_ARCH_BCM2835 is not set
# CONFIG_ARCH_BCM4908 is not set
# CONFIG_ARCH_BCM_IPROC is not set
# CONFIG_ARCH_BERLIN is not set
# CONFIG_ARCH_BITMAIN is not set
# CONFIG_ARCH_BRCMSTB is not set
# CONFIG_ARCH_EXYNOS is not set
# CONFIG_ARCH_SPARX5 is not set
# CONFIG_ARCH_K3 is not set
# CONFIG_ARCH_LAYERSCAPE is not set
# CONFIG_ARCH_LG1K is not set
# CONFIG_ARCH_HISI is not set
# CONFIG_ARCH_KEEMBAY is not set
# CONFIG_ARCH_MEDIATEK is not set
# CONFIG_ARCH_MESON is not set
# CONFIG_ARCH_MVEBU is not set
# CONFIG_ARCH_MXC is not set
# CONFIG_ARCH_QCOM is not set
# CONFIG_ARCH_REALTEK is not set
# CONFIG_ARCH_RENESAS is not set
# CONFIG_ARCH_ROCKCHIP is not set
# CONFIG_ARCH_S32 is not set
# CONFIG_ARCH_SEATTLE is not set
# CONFIG_ARCH_INTEL_SOCFPGA is not set
# CONFIG_ARCH_SYNQUACER is not set
# CONFIG_ARCH_TEGRA is not set
# CONFIG_ARCH_SPRD is not set
# CONFIG_ARCH_THUNDER is not set
# CONFIG_ARCH_THUNDER2 is not set
# CONFIG_ARCH_UNIPHIER is not set
# CONFIG_ARCH_VEXPRESS is not set
# CONFIG_ARCH_VISCONTI is not set
# CONFIG_ARCH_XGENE is not set
# CONFIG_ARCH_ZYNQMP is not set
# end of Platform selection

#
# Kernel Features
#

#
# ARM errata workarounds via the alternatives framework
#
# CONFIG_ARM64_ERRATUM_826319 is not set
# CONFIG_ARM64_ERRATUM_827319 is not set
# CONFIG_ARM64_ERRATUM_824069 is not set
# CONFIG_ARM64_ERRATUM_819472 is not set
# CONFIG_ARM64_ERRATUM_832075 is not set
# CONFIG_ARM64_ERRATUM_843419 is not set
CONFIG_ARM64_LD_HAS_FIX_ERRATUM_843419=y
# CONFIG_ARM64_ERRATUM_1024718 is not set
# CONFIG_ARM64_ERRATUM_1165522 is not set
# CONFIG_ARM64_ERRATUM_1319367 is not set
# CONFIG_ARM64_ERRATUM_1530923 is not set
# CONFIG_ARM64_ERRATUM_1286807 is not set
# CONFIG_ARM64_ERRATUM_1463225 is not set
# CONFIG_ARM64_ERRATUM_1542419 is not set
# CONFIG_ARM64_ERRATUM_1508412 is not set
# CONFIG_ARM64_ERRATUM_2051678 is not set
# CONFIG_ARM64_ERRATUM_2077057 is not set
# CONFIG_ARM64_ERRATUM_2054223 is not set
# CONFIG_ARM64_ERRATUM_2067961 is not set
# CONFIG_CAVIUM_ERRATUM_22375 is not set
# CONFIG_CAVIUM_ERRATUM_23154 is not set
# CONFIG_CAVIUM_ERRATUM_27456 is not set
# CONFIG_CAVIUM_ERRATUM_30115 is not set
# CONFIG_CAVIUM_TX2_ERRATUM_219 is not set
# CONFIG_FUJITSU_ERRATUM_010001 is not set
# CONFIG_HISILICON_ERRATUM_161600802 is not set
# CONFIG_QCOM_FALKOR_ERRATUM_1003 is not set
# CONFIG_QCOM_FALKOR_ERRATUM_1009 is not set
# CONFIG_QCOM_QDF2400_ERRATUM_0065 is not set
# CONFIG_QCOM_FALKOR_ERRATUM_E1041 is not set
# CONFIG_NVIDIA_CARMEL_CNP_ERRATUM is not set
# CONFIG_SOCIONEXT_SYNQUACER_PREITS is not set
# end of ARM errata workarounds via the alternatives framework

CONFIG_ARM64_4K_PAGES=y
# CONFIG_ARM64_16K_PAGES is not set
# CONFIG_ARM64_64K_PAGES is not set
CONFIG_ARM64_VA_BITS_39=y
# CONFIG_ARM64_VA_BITS_48 is not set
CONFIG_ARM64_VA_BITS=39
CONFIG_ARM64_PA_BITS_48=y
CONFIG_ARM64_PA_BITS=48
# CONFIG_CPU_BIG_ENDIAN is not set
CONFIG_CPU_LITTLE_ENDIAN=y
# CONFIG_SCHED_MC is not set
# CONFIG_SCHED_CLUSTER is not set
# CONFIG_SCHED_SMT is not set
CONFIG_NR_CPUS=256
# CONFIG_HOTPLUG_CPU is not set
# CONFIG_NUMA is not set
# CONFIG_HZ_100 is not set
CONFIG_HZ_250=y
# CONFIG_HZ_300 is not set
# CONFIG_HZ_1000 is not set
CONFIG_HZ=250
CONFIG_ARCH_SPARSEMEM_ENABLE=y
CONFIG_ARCH_HAS_FILTER_PGPROT=y
# CONFIG_PARAVIRT is not set
# CONFIG_PARAVIRT_TIME_ACCOUNTING is not set
# CONFIG_KEXEC_FILE is not set
# CONFIG_CRASH_DUMP is not set
# CONFIG_XEN is not set
CONFIG_FORCE_MAX_ZONEORDER=11
# CONFIG_UNMAP_KERNEL_AT_EL0 is not set
# CONFIG_RODATA_FULL_DEFAULT_ENABLED is not set
# CONFIG_ARM64_SW_TTBR0_PAN is not set
# CONFIG_ARM64_TAGGED_ADDR_ABI is not set
# CONFIG_COMPAT is not set

#
# ARMv8.1 architectural features
#
# CONFIG_ARM64_HW_AFDBM is not set
# CONFIG_ARM64_PAN is not set
CONFIG_AS_HAS_LDAPR=y
CONFIG_AS_HAS_LSE_ATOMICS=y
# end of ARMv8.1 architectural features

#
# ARMv8.2 architectural features
#
CONFIG_AS_HAS_ARMV8_2=y
CONFIG_AS_HAS_SHA3=y
# CONFIG_ARM64_PMEM is not set
# CONFIG_ARM64_RAS_EXTN is not set
# CONFIG_ARM64_CNP is not set
# end of ARMv8.2 architectural features

#
# ARMv8.3 architectural features
#
# CONFIG_ARM64_PTR_AUTH is not set
CONFIG_CC_HAS_BRANCH_PROT_PAC_RET=y
CONFIG_CC_HAS_SIGN_RETURN_ADDRESS=y
CONFIG_AS_HAS_PAC=y
CONFIG_AS_HAS_CFI_NEGATE_RA_STATE=y
# end of ARMv8.3 architectural features

#
# ARMv8.4 architectural features
#
# CONFIG_ARM64_AMU_EXTN is not set
CONFIG_AS_HAS_ARMV8_4=y
# CONFIG_ARM64_TLB_RANGE is not set
# end of ARMv8.4 architectural features

#
# ARMv8.5 architectural features
#
CONFIG_AS_HAS_ARMV8_5=y
# CONFIG_ARM64_BTI is not set
CONFIG_CC_HAS_BRANCH_PROT_PAC_RET_BTI=y
# CONFIG_ARM64_E0PD is not set
# CONFIG_ARCH_RANDOM is not set
CONFIG_ARM64_AS_HAS_MTE=y
# end of ARMv8.5 architectural features

#
# ARMv8.7 architectural features
#
# end of ARMv8.7 architectural features

# CONFIG_ARM64_SVE is not set
# CONFIG_ARM64_PSEUDO_NMI is not set
# CONFIG_RELOCATABLE is not set
# CONFIG_RANDOMIZE_BASE is not set
CONFIG_CC_HAVE_STACKPROTECTOR_SYSREG=y
# end of Kernel Features

#
# Boot options
#
CONFIG_CMDLINE=""
# CONFIG_EFI is not set
# end of Boot options

#
# Power management options
#
# CONFIG_SUSPEND is not set
# CONFIG_PM is not set
CONFIG_ARCH_SUSPEND_POSSIBLE=y
# end of Power management options

#
# CPU Power Management
#

#
# CPU Idle
#
# CONFIG_CPU_IDLE is not set
# end of CPU Idle

#
# CPU Frequency scaling
#
# CONFIG_CPU_FREQ is not set
# end of CPU Frequency scaling
# end of CPU Power Management

CONFIG_HAVE_KVM=y
# CONFIG_VIRTUALIZATION is not set

#
# General architecture-dependent options
#
# CONFIG_JUMP_LABEL is not set
CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
CONFIG_HAVE_KPROBES=y
CONFIG_HAVE_KRETPROBES=y
CONFIG_ARCH_CORRECT_STACKTRACE_ON_KRETPROBE=y
CONFIG_HAVE_FUNCTION_ERROR_INJECTION=y
CONFIG_HAVE_NMI=y
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_HAVE_ARCH_TRACEHOOK=y
CONFIG_HAVE_DMA_CONTIGUOUS=y
CONFIG_GENERIC_SMP_IDLE_THREAD=y
CONFIG_GENERIC_IDLE_POLL_SETUP=y
CONFIG_ARCH_HAS_FORTIFY_SOURCE=y
CONFIG_ARCH_HAS_KEEPINITRD=y
CONFIG_ARCH_HAS_SET_MEMORY=y
CONFIG_ARCH_HAS_SET_DIRECT_MAP=y
CONFIG_HAVE_ARCH_THREAD_STRUCT_WHITELIST=y
CONFIG_ARCH_WANTS_NO_INSTR=y
CONFIG_HAVE_ASM_MODVERSIONS=y
CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
CONFIG_HAVE_RSEQ=y
CONFIG_HAVE_FUNCTION_ARG_ACCESS_API=y
CONFIG_HAVE_PERF_REGS=y
CONFIG_HAVE_PERF_USER_STACK_DUMP=y
CONFIG_HAVE_ARCH_JUMP_LABEL=y
CONFIG_HAVE_ARCH_JUMP_LABEL_RELATIVE=y
CONFIG_MMU_GATHER_TABLE_FREE=y
CONFIG_MMU_GATHER_RCU_TABLE_FREE=y
CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y
CONFIG_HAVE_CMPXCHG_LOCAL=y
CONFIG_HAVE_CMPXCHG_DOUBLE=y
CONFIG_HAVE_ARCH_SECCOMP=y
CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
# CONFIG_SECCOMP is not set
CONFIG_HAVE_ARCH_STACKLEAK=y
CONFIG_HAVE_STACKPROTECTOR=y
# CONFIG_STACKPROTECTOR is not set
CONFIG_ARCH_SUPPORTS_LTO_CLANG=y
CONFIG_ARCH_SUPPORTS_LTO_CLANG_THIN=y
CONFIG_LTO_NONE=y
CONFIG_ARCH_SUPPORTS_CFI_CLANG=y
CONFIG_HAVE_CONTEXT_TRACKING=y
CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y
CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
CONFIG_HAVE_MOVE_PUD=y
CONFIG_HAVE_MOVE_PMD=y
CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y
CONFIG_HAVE_ARCH_HUGE_VMAP=y
CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y
CONFIG_MODULES_USE_ELF_RELA=y
CONFIG_ARCH_HAS_ELF_RANDOMIZE=y
CONFIG_HAVE_ARCH_MMAP_RND_BITS=y
CONFIG_ARCH_MMAP_RND_BITS=18
CONFIG_PAGE_SIZE_LESS_THAN_64KB=y
CONFIG_PAGE_SIZE_LESS_THAN_256KB=y
CONFIG_ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT=y
CONFIG_CLONE_BACKWARDS=y
# CONFIG_COMPAT_32BIT_TIME is not set
CONFIG_HAVE_ARCH_VMAP_STACK=y
# CONFIG_VMAP_STACK is not set
CONFIG_HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET=y
# CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT is not set
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_HAVE_ARCH_COMPILER_H=y
CONFIG_HAVE_ARCH_PREL32_RELOCATIONS=y
CONFIG_ARCH_WANT_LD_ORPHAN_WARN=y
CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y

#
# GCOV-based kernel profiling
#
CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y
# end of GCOV-based kernel profiling

CONFIG_HAVE_GCC_PLUGINS=y
# end of General architecture-dependent options

CONFIG_BASE_SMALL=1
# CONFIG_MODULES is not set
# CONFIG_BLOCK is not set
CONFIG_UNINLINE_SPIN_UNLOCK=y
CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y
CONFIG_MUTEX_SPIN_ON_OWNER=y
CONFIG_RWSEM_SPIN_ON_OWNER=y
CONFIG_LOCK_SPIN_ON_OWNER=y
CONFIG_ARCH_USE_QUEUED_SPINLOCKS=y
CONFIG_QUEUED_SPINLOCKS=y
CONFIG_ARCH_USE_QUEUED_RWLOCKS=y
CONFIG_QUEUED_RWLOCKS=y
CONFIG_ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE=y
CONFIG_ARCH_HAS_SYSCALL_WRAPPER=y

#
# Executable file formats
#
# CONFIG_BINFMT_ELF is not set
CONFIG_ARCH_BINFMT_ELF_STATE=y
CONFIG_ARCH_HAVE_ELF_PROT=y
CONFIG_ARCH_USE_GNU_PROPERTY=y
# CONFIG_BINFMT_SCRIPT is not set
# CONFIG_BINFMT_MISC is not set
# CONFIG_COREDUMP is not set
# end of Executable file formats

#
# Memory Management options
#
CONFIG_SPARSEMEM=y
CONFIG_SPARSEMEM_EXTREME=y
CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
CONFIG_SPARSEMEM_VMEMMAP=y
CONFIG_HAVE_FAST_GUP=y
CONFIG_ARCH_KEEP_MEMBLOCK=y
CONFIG_EXCLUSIVE_SYSTEM_RAM=y
CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
# CONFIG_MEMORY_HOTPLUG is not set
CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
CONFIG_SPLIT_PTLOCK_CPUS=4
CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y
# CONFIG_COMPACTION is not set
# CONFIG_PAGE_REPORTING is not set
# CONFIG_MIGRATION is not set
CONFIG_PHYS_ADDR_T_64BIT=y
# CONFIG_KSM is not set
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
CONFIG_ARCH_SUPPORTS_MEMORY_FAILURE=y
# CONFIG_MEMORY_FAILURE is not set
# CONFIG_TRANSPARENT_HUGEPAGE is not set
# CONFIG_CMA is not set
# CONFIG_ZPOOL is not set
# CONFIG_ZSMALLOC is not set
CONFIG_GENERIC_EARLY_IOREMAP=y
# CONFIG_DEFERRED_STRUCT_PAGE_INIT is not set
CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
CONFIG_ARCH_HAS_PTE_DEVMAP=y
CONFIG_ARCH_HAS_ZONE_DMA_SET=y
# CONFIG_ZONE_DMA is not set
# CONFIG_ZONE_DMA32 is not set
# CONFIG_PERCPU_STATS is not set

#
# GUP_TEST needs to have DEBUG_FS enabled
#
CONFIG_ARCH_HAS_PTE_SPECIAL=y

#
# Data Access Monitoring
#
# CONFIG_DAMON is not set
# end of Data Access Monitoring
# end of Memory Management options

# CONFIG_NET is not set

#
# Device Drivers
#
CONFIG_ARM_AMBA=y
CONFIG_HAVE_PCI=y
# CONFIG_PCI is not set
# CONFIG_PCCARD is not set

#
# Generic Driver Options
#
# CONFIG_UEVENT_HELPER is not set
# CONFIG_DEVTMPFS is not set
# CONFIG_STANDALONE is not set
# CONFIG_PREVENT_FIRMWARE_BUILD is not set

#
# Firmware loader
#
# CONFIG_FW_LOADER is not set
# end of Firmware loader

# CONFIG_ALLOW_DEV_COREDUMP is not set
# CONFIG_DEBUG_DRIVER is not set
# CONFIG_DEBUG_DEVRES is not set
# CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set
CONFIG_GENERIC_CPU_AUTOPROBE=y
CONFIG_GENERIC_CPU_VULNERABILITIES=y
CONFIG_GENERIC_ARCH_TOPOLOGY=y
# end of Generic Driver Options

#
# Bus devices
#
# CONFIG_BRCMSTB_GISB_ARB is not set
# CONFIG_VEXPRESS_CONFIG is not set
# CONFIG_MHI_BUS is not set
# end of Bus devices

#
# Firmware Drivers
#

#
# ARM System Control and Management Interface Protocol
#
# CONFIG_ARM_SCMI_PROTOCOL is not set
# end of ARM System Control and Management Interface Protocol

# CONFIG_ARM_SDE_INTERFACE is not set
# CONFIG_FIRMWARE_MEMMAP is not set
# CONFIG_ARM_FFA_TRANSPORT is not set
# CONFIG_GOOGLE_FIRMWARE is not set
CONFIG_ARM_PSCI_FW=y
CONFIG_HAVE_ARM_SMCCC=y
CONFIG_HAVE_ARM_SMCCC_DISCOVERY=y
# CONFIG_ARM_SMCCC_SOC_ID is not set

#
# Tegra firmware driver
#
# end of Tegra firmware driver
# end of Firmware Drivers

# CONFIG_GNSS is not set
# CONFIG_MTD is not set
CONFIG_DTC=y
CONFIG_OF=y
# CONFIG_OF_UNITTEST is not set
CONFIG_OF_FLATTREE=y
CONFIG_OF_EARLY_FLATTREE=y
CONFIG_OF_ADDRESS=y
CONFIG_OF_IRQ=y
CONFIG_OF_RESERVED_MEM=y
# CONFIG_OF_OVERLAY is not set
# CONFIG_PARPORT is not set

#
# NVME Support
#
# end of NVME Support

#
# Misc devices
#
# CONFIG_DUMMY_IRQ is not set
# CONFIG_ENCLOSURE_SERVICES is not set
# CONFIG_SRAM is not set
# CONFIG_XILINX_SDFEC is not set
# CONFIG_C2PORT is not set

#
# EEPROM support
#
# CONFIG_EEPROM_93CX6 is not set
# end of EEPROM support

#
# Texas Instruments shared transport line discipline
#
# end of Texas Instruments shared transport line discipline

#
# Altera FPGA firmware download module (requires I2C)
#
# CONFIG_ECHO is not set
# CONFIG_PVPANIC is not set
# end of Misc devices

#
# SCSI device support
#
CONFIG_SCSI_MOD=y
# end of SCSI device support

CONFIG_HAVE_PATA_PLATFORM=y

#
# Input device support
#
# CONFIG_INPUT is not set

#
# Hardware I/O ports
#
# CONFIG_SERIO is not set
# CONFIG_GAMEPORT is not set
# end of Hardware I/O ports
# end of Input device support

#
# Character devices
#
# CONFIG_TTY is not set
# CONFIG_SERIAL_DEV_BUS is not set
# CONFIG_IPMI_HANDLER is not set
# CONFIG_HW_RANDOM is not set
# CONFIG_DEVMEM is not set
# CONFIG_TCG_TPM is not set
# CONFIG_XILLYBUS is not set
# CONFIG_RANDOM_TRUST_BOOTLOADER is not set
# end of Character devices

#
# I2C support
#
# CONFIG_I2C is not set
# end of I2C support

# CONFIG_I3C is not set
# CONFIG_SPI is not set
# CONFIG_SPMI is not set
# CONFIG_HSI is not set
# CONFIG_PPS is not set

#
# PTP clock support
#
CONFIG_PTP_1588_CLOCK_OPTIONAL=y

#
# Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks.
#
# end of PTP clock support

# CONFIG_PINCTRL is not set
# CONFIG_GPIOLIB is not set
# CONFIG_W1 is not set
CONFIG_POWER_RESET=y
# CONFIG_POWER_RESET_RESTART is not set
# CONFIG_POWER_RESET_XGENE is not set
# CONFIG_POWER_RESET_SYSCON is not set
# CONFIG_POWER_RESET_SYSCON_POWEROFF is not set
# CONFIG_NVMEM_REBOOT_MODE is not set
CONFIG_POWER_SUPPLY=y
# CONFIG_POWER_SUPPLY_DEBUG is not set
# CONFIG_PDA_POWER is not set
# CONFIG_TEST_POWER is not set
# CONFIG_BATTERY_DS2780 is not set
# CONFIG_BATTERY_DS2781 is not set
# CONFIG_BATTERY_BQ27XXX is not set
# CONFIG_CHARGER_MAX8903 is not set
# CONFIG_BATTERY_GOLDFISH is not set
# CONFIG_HWMON is not set
# CONFIG_THERMAL is not set
# CONFIG_WATCHDOG is not set
CONFIG_SSB_POSSIBLE=y
# CONFIG_SSB is not set
CONFIG_BCMA_POSSIBLE=y
# CONFIG_BCMA is not set

#
# Multifunction device drivers
#
# CONFIG_MFD_ATMEL_FLEXCOM is not set
# CONFIG_MFD_ATMEL_HLCDC is not set
# CONFIG_MFD_MADERA is not set
# CONFIG_MFD_HI6421_PMIC is not set
# CONFIG_HTC_PASIC3 is not set
# CONFIG_MFD_KEMPLD is not set
# CONFIG_MFD_MT6397 is not set
# CONFIG_MFD_SM501 is not set
# CONFIG_MFD_SYSCON is not set
# CONFIG_MFD_TI_AM335X_TSCADC is not set
# CONFIG_MFD_TQMX86 is not set
# end of Multifunction device drivers

# CONFIG_REGULATOR is not set

#
# CEC support
#
# CONFIG_MEDIA_CEC_SUPPORT is not set
# end of CEC support

# CONFIG_MEDIA_SUPPORT is not set

#
# Graphics support
#
# CONFIG_DRM is not set
# CONFIG_DRM_DEBUG_MODESET_LOCK is not set

#
# ARM devices
#
# end of ARM devices

#
# Frame buffer Devices
#
# CONFIG_FB is not set
# end of Frame buffer Devices

#
# Backlight & LCD device support
#
# CONFIG_LCD_CLASS_DEVICE is not set
# CONFIG_BACKLIGHT_CLASS_DEVICE is not set
# end of Backlight & LCD device support
# end of Graphics support

# CONFIG_SOUND is not set
CONFIG_USB_OHCI_LITTLE_ENDIAN=y
# CONFIG_USB_SUPPORT is not set
# CONFIG_MMC is not set
# CONFIG_MEMSTICK is not set
# CONFIG_NEW_LEDS is not set
# CONFIG_ACCESSIBILITY is not set
CONFIG_EDAC_SUPPORT=y
# CONFIG_RTC_CLASS is not set
# CONFIG_DMADEVICES is not set

#
# DMABUF options
#
# CONFIG_SYNC_FILE is not set
# CONFIG_DMABUF_HEAPS is not set
# end of DMABUF options

# CONFIG_AUXDISPLAY is not set
# CONFIG_UIO is not set
# CONFIG_VFIO is not set
# CONFIG_VIRT_DRIVERS is not set
# CONFIG_VIRTIO_MENU is not set
# CONFIG_VHOST_MENU is not set

#
# Microsoft Hyper-V guest support
#
# end of Microsoft Hyper-V guest support

# CONFIG_COMEDI is not set
# CONFIG_STAGING is not set
# CONFIG_GOLDFISH is not set
# CONFIG_CHROME_PLATFORMS is not set
# CONFIG_MELLANOX_PLATFORM is not set
# CONFIG_SURFACE_PLATFORMS is not set
CONFIG_HAVE_CLK=y
CONFIG_HAVE_CLK_PREPARE=y
CONFIG_COMMON_CLK=y

#
# Clock driver for ARM Reference designs
#
# CONFIG_CLK_ICST is not set
# CONFIG_CLK_SP810 is not set
# end of Clock driver for ARM Reference designs

# CONFIG_COMMON_CLK_LAN966X is not set
# CONFIG_COMMON_CLK_AXI_CLKGEN is not set
# CONFIG_COMMON_CLK_XGENE is not set
# CONFIG_COMMON_CLK_FIXED_MMIO is not set
# CONFIG_XILINX_VCU is not set
# CONFIG_HWSPINLOCK is not set

#
# Clock Source drivers
#
CONFIG_TIMER_OF=y
CONFIG_TIMER_PROBE=y
CONFIG_ARM_ARCH_TIMER=y
# CONFIG_ARM_ARCH_TIMER_EVTSTREAM is not set
# CONFIG_FSL_ERRATUM_A008585 is not set
# CONFIG_HISILICON_ERRATUM_161010101 is not set
# CONFIG_ARM64_ERRATUM_858921 is not set
# CONFIG_MICROCHIP_PIT64B is not set
# end of Clock Source drivers

# CONFIG_MAILBOX is not set
# CONFIG_IOMMU_SUPPORT is not set

#
# Remoteproc drivers
#
# CONFIG_REMOTEPROC is not set
# end of Remoteproc drivers

#
# Rpmsg drivers
#
# CONFIG_RPMSG_VIRTIO is not set
# end of Rpmsg drivers

# CONFIG_SOUNDWIRE is not set

#
# SOC (System On Chip) specific Drivers
#

#
# Amlogic SoC drivers
#
# end of Amlogic SoC drivers

#
# Broadcom SoC drivers
#
# CONFIG_SOC_BRCMSTB is not set
# end of Broadcom SoC drivers

#
# NXP/Freescale QorIQ SoC drivers
#
# CONFIG_QUICC_ENGINE is not set
# end of NXP/Freescale QorIQ SoC drivers

#
# i.MX SoC drivers
#
# end of i.MX SoC drivers

#
# Enable LiteX SoC Builder specific drivers
#
# CONFIG_LITEX_SOC_CONTROLLER is not set
# end of Enable LiteX SoC Builder specific drivers

#
# Qualcomm SoC drivers
#
# end of Qualcomm SoC drivers

# CONFIG_SOC_TI is not set

#
# Xilinx SoC drivers
#
# end of Xilinx SoC drivers
# end of SOC (System On Chip) specific Drivers

# CONFIG_PM_DEVFREQ is not set
# CONFIG_EXTCON is not set
# CONFIG_MEMORY is not set
# CONFIG_IIO is not set
# CONFIG_PWM is not set

#
# IRQ chip support
#
CONFIG_IRQCHIP=y
CONFIG_ARM_GIC=y
CONFIG_ARM_GIC_MAX_NR=1
CONFIG_ARM_GIC_V3=y
CONFIG_ARM_GIC_V3_ITS=y
# CONFIG_AL_FIC is not set
CONFIG_PARTITION_PERCPU=y
# end of IRQ chip support

# CONFIG_IPACK_BUS is not set
# CONFIG_RESET_CONTROLLER is not set

#
# PHY Subsystem
#
# CONFIG_GENERIC_PHY is not set
# CONFIG_PHY_XGENE is not set
# CONFIG_PHY_CAN_TRANSCEIVER is not set

#
# PHY drivers for Broadcom platforms
#
# CONFIG_BCM_KONA_USB2_PHY is not set
# end of PHY drivers for Broadcom platforms

# CONFIG_PHY_CADENCE_TORRENT is not set
# CONFIG_PHY_CADENCE_DPHY is not set
# CONFIG_PHY_CADENCE_SALVO is not set
# CONFIG_PHY_FSL_IMX8MQ_USB is not set
# CONFIG_PHY_MIXEL_MIPI_DPHY is not set
# CONFIG_PHY_FSL_IMX8M_PCIE is not set
# CONFIG_PHY_PXA_28NM_HSIC is not set
# CONFIG_PHY_PXA_28NM_USB2 is not set
# end of PHY Subsystem

# CONFIG_POWERCAP is not set
# CONFIG_MCB is not set
# CONFIG_RAS is not set

#
# Android
#
# CONFIG_ANDROID is not set
# end of Android

# CONFIG_DAX is not set
# CONFIG_NVMEM is not set

#
# HW tracing support
#
# CONFIG_STM is not set
# CONFIG_INTEL_TH is not set
# end of HW tracing support

# CONFIG_FPGA is not set
# CONFIG_FSI is not set
# CONFIG_TEE is not set
# CONFIG_SIOX is not set
# CONFIG_SLIMBUS is not set
# CONFIG_INTERCONNECT is not set
# CONFIG_COUNTER is not set
# end of Device Drivers

#
# File systems
#
CONFIG_DCACHE_WORD_ACCESS=y
# CONFIG_VALIDATE_FS_PARSER is not set
# CONFIG_FS_DAX is not set
# CONFIG_EXPORTFS_BLOCK_OPS is not set
# CONFIG_FILE_LOCKING is not set
# CONFIG_FS_ENCRYPTION is not set
# CONFIG_FS_VERITY is not set
# CONFIG_DNOTIFY is not set
# CONFIG_INOTIFY_USER is not set
# CONFIG_FANOTIFY is not set
# CONFIG_QUOTA is not set
# CONFIG_AUTOFS4_FS is not set
# CONFIG_AUTOFS_FS is not set
# CONFIG_FUSE_FS is not set
# CONFIG_OVERLAY_FS is not set

#
# Caches
#
# CONFIG_FSCACHE is not set
# end of Caches

#
# Pseudo filesystems
#
# CONFIG_PROC_FS is not set
# CONFIG_PROC_CHILDREN is not set
# CONFIG_SYSFS is not set
CONFIG_ARCH_SUPPORTS_HUGETLBFS=y
# CONFIG_HUGETLBFS is not set
CONFIG_ARCH_HAS_GIGANTIC_PAGE=y
# CONFIG_CONFIGFS_FS is not set
# end of Pseudo filesystems

# CONFIG_MISC_FILESYSTEMS is not set
# CONFIG_NLS is not set
# CONFIG_UNICODE is not set
# end of File systems

#
# Security options
#
# CONFIG_KEYS is not set
# CONFIG_SECURITY_DMESG_RESTRICT is not set
# CONFIG_SECURITYFS is not set
# CONFIG_FORTIFY_SOURCE is not set
# CONFIG_STATIC_USERMODEHELPER is not set
CONFIG_DEFAULT_SECURITY_DAC=y
CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,integrity,bpf"

#
# Kernel hardening options
#

#
# Memory initialization
#
CONFIG_INIT_STACK_NONE=y
# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set
# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set
CONFIG_CC_HAS_ZERO_CALL_USED_REGS=y
# CONFIG_ZERO_CALL_USED_REGS is not set
# end of Memory initialization
# end of Kernel hardening options
# end of Security options

# CONFIG_CRYPTO is not set

#
# Library routines
#
# CONFIG_PACKING is not set
CONFIG_BITREVERSE=y
CONFIG_HAVE_ARCH_BITREVERSE=y
CONFIG_GENERIC_STRNCPY_FROM_USER=y
CONFIG_GENERIC_STRNLEN_USER=y
# CONFIG_CORDIC is not set
# CONFIG_PRIME_NUMBERS is not set
CONFIG_RATIONAL=y
CONFIG_GENERIC_PCI_IOMAP=y
CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y
CONFIG_ARCH_HAS_FAST_MULTIPLIER=y
CONFIG_ARCH_USE_SYM_ANNOTATIONS=y
# CONFIG_INDIRECT_PIO is not set

#
# Crypto library routines
#
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
# CONFIG_CRYPTO_LIB_CURVE25519 is not set
CONFIG_CRYPTO_LIB_POLY1305_RSIZE=9
# CONFIG_CRYPTO_LIB_POLY1305 is not set
# end of Crypto library routines

# CONFIG_CRC_CCITT is not set
# CONFIG_CRC16 is not set
# CONFIG_CRC_T10DIF is not set
# CONFIG_CRC_ITU_T is not set
CONFIG_CRC32=y
# CONFIG_CRC32_SELFTEST is not set
CONFIG_CRC32_SLICEBY8=y
# CONFIG_CRC32_SLICEBY4 is not set
# CONFIG_CRC32_SARWATE is not set
# CONFIG_CRC32_BIT is not set
# CONFIG_CRC64 is not set
# CONFIG_CRC4 is not set
# CONFIG_CRC7 is not set
# CONFIG_LIBCRC32C is not set
# CONFIG_CRC8 is not set
CONFIG_AUDIT_ARCH_COMPAT_GENERIC=y
# CONFIG_RANDOM32_SELFTEST is not set
# CONFIG_XZ_DEC is not set
CONFIG_GENERIC_ALLOCATOR=y
CONFIG_HAS_IOMEM=y
CONFIG_HAS_DMA=y
CONFIG_NEED_SG_DMA_LENGTH=y
CONFIG_NEED_DMA_MAP_STATE=y
CONFIG_ARCH_DMA_ADDR_T_64BIT=y
CONFIG_DMA_DECLARE_COHERENT=y
CONFIG_ARCH_HAS_SETUP_DMA_OPS=y
CONFIG_ARCH_HAS_SYNC_DMA_FOR_DEVICE=y
CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU=y
CONFIG_ARCH_HAS_DMA_PREP_COHERENT=y
CONFIG_SWIOTLB=y
# CONFIG_DMA_RESTRICTED_POOL is not set
CONFIG_DMA_NONCOHERENT_MMAP=y
CONFIG_DMA_COHERENT_POOL=y
CONFIG_DMA_REMAP=y
CONFIG_DMA_DIRECT_REMAP=y
# CONFIG_DMA_API_DEBUG is not set
# CONFIG_IRQ_POLL is not set
CONFIG_LIBFDT=y
CONFIG_HAVE_GENERIC_VDSO=y
CONFIG_GENERIC_GETTIMEOFDAY=y
CONFIG_GENERIC_VDSO_TIME_NS=y
CONFIG_ARCH_STACKWALK=y
# end of Library routines

CONFIG_GENERIC_LIB_DEVMEM_IS_ALLOWED=y

#
# Kernel hacking
#

#
# printk and dmesg options
#
CONFIG_CONSOLE_LOGLEVEL_DEFAULT=7
CONFIG_CONSOLE_LOGLEVEL_QUIET=4
CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
# CONFIG_SYMBOLIC_ERRNAME is not set
# end of printk and dmesg options

#
# Compile-time checks and compiler options
#
# CONFIG_DEBUG_INFO is not set
CONFIG_FRAME_WARN=2048
# CONFIG_STRIP_ASM_SYMS is not set
# CONFIG_READABLE_ASM is not set
# CONFIG_HEADERS_INSTALL is not set
# CONFIG_DEBUG_SECTION_MISMATCH is not set
# CONFIG_SECTION_MISMATCH_WARN_ONLY is not set
# CONFIG_DEBUG_FORCE_FUNCTION_ALIGN_64B is not set
CONFIG_ARCH_WANT_FRAME_POINTERS=y
CONFIG_FRAME_POINTER=y
# CONFIG_VMLINUX_MAP is not set
# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
# end of Compile-time checks and compiler options

#
# Generic Kernel Debugging Instruments
#
# CONFIG_MAGIC_SYSRQ is not set
# CONFIG_DEBUG_FS is not set
CONFIG_HAVE_ARCH_KGDB=y
# CONFIG_KGDB is not set
CONFIG_ARCH_HAS_UBSAN_SANITIZE_ALL=y
# CONFIG_UBSAN is not set
CONFIG_HAVE_ARCH_KCSAN=y
CONFIG_HAVE_KCSAN_COMPILER=y
# CONFIG_KCSAN is not set
# end of Generic Kernel Debugging Instruments

CONFIG_DEBUG_KERNEL=y
# CONFIG_DEBUG_MISC is not set

#
# Networking Debugging
#
# CONFIG_NET_DEV_REFCNT_TRACKER is not set
# CONFIG_NET_NS_REFCNT_TRACKER is not set
# end of Networking Debugging

#
# Memory Debugging
#
# CONFIG_PAGE_EXTENSION is not set
# CONFIG_DEBUG_PAGEALLOC is not set
# CONFIG_PAGE_OWNER is not set
# CONFIG_PAGE_POISONING is not set
# CONFIG_DEBUG_RODATA_TEST is not set
CONFIG_ARCH_HAS_DEBUG_WX=y
# CONFIG_DEBUG_WX is not set
CONFIG_GENERIC_PTDUMP=y
# CONFIG_DEBUG_OBJECTS is not set
CONFIG_HAVE_DEBUG_KMEMLEAK=y
# CONFIG_DEBUG_KMEMLEAK is not set
# CONFIG_DEBUG_STACK_USAGE is not set
# CONFIG_SCHED_STACK_END_CHECK is not set
CONFIG_ARCH_HAS_DEBUG_VM_PGTABLE=y
# CONFIG_DEBUG_VM is not set
# CONFIG_DEBUG_VM_PGTABLE is not set
CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y
# CONFIG_DEBUG_VIRTUAL is not set
# CONFIG_DEBUG_MEMORY_INIT is not set
# CONFIG_DEBUG_PER_CPU_MAPS is not set
CONFIG_HAVE_ARCH_KASAN=y
CONFIG_HAVE_ARCH_KASAN_SW_TAGS=y
CONFIG_HAVE_ARCH_KASAN_VMALLOC=y
CONFIG_CC_HAS_KASAN_GENERIC=y
CONFIG_CC_HAS_KASAN_SW_TAGS=y
CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y
CONFIG_HAVE_ARCH_KFENCE=y
# end of Memory Debugging

# CONFIG_DEBUG_SHIRQ is not set

#
# Debug Oops, Lockups and Hangs
#
# CONFIG_PANIC_ON_OOPS is not set
CONFIG_PANIC_ON_OOPS_VALUE=0
CONFIG_PANIC_TIMEOUT=0
# CONFIG_SOFTLOCKUP_DETECTOR is not set
# CONFIG_DETECT_HUNG_TASK is not set
# CONFIG_WQ_WATCHDOG is not set
# end of Debug Oops, Lockups and Hangs

#
# Scheduler Debugging
#
# end of Scheduler Debugging

# CONFIG_DEBUG_TIMEKEEPING is not set
CONFIG_DEBUG_PREEMPT=y

#
# Lock Debugging (spinlocks, mutexes, etc...)
#
CONFIG_LOCK_DEBUGGING_SUPPORT=y
# CONFIG_PROVE_LOCKING is not set
# CONFIG_LOCK_STAT is not set
# CONFIG_DEBUG_SPINLOCK is not set
# CONFIG_DEBUG_MUTEXES is not set
# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set
# CONFIG_DEBUG_RWSEMS is not set
# CONFIG_DEBUG_LOCK_ALLOC is not set
# CONFIG_DEBUG_ATOMIC_SLEEP is not set
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
# CONFIG_LOCK_TORTURE_TEST is not set
# CONFIG_WW_MUTEX_SELFTEST is not set
# CONFIG_SCF_TORTURE_TEST is not set
# CONFIG_CSD_LOCK_WAIT_DEBUG is not set
# end of Lock Debugging (spinlocks, mutexes, etc...)

# CONFIG_DEBUG_IRQFLAGS is not set
# CONFIG_STACKTRACE is not set
# CONFIG_WARN_ALL_UNSEEDED_RANDOM is not set
# CONFIG_DEBUG_KOBJECT is not set

#
# Debug kernel data structures
#
# CONFIG_DEBUG_LIST is not set
# CONFIG_DEBUG_PLIST is not set
# CONFIG_DEBUG_SG is not set
# CONFIG_DEBUG_NOTIFIERS is not set
# CONFIG_BUG_ON_DATA_CORRUPTION is not set
# end of Debug kernel data structures

# CONFIG_DEBUG_CREDENTIALS is not set

#
# RCU Debugging
#
# CONFIG_RCU_SCALE_TEST is not set
# CONFIG_RCU_TORTURE_TEST is not set
# CONFIG_RCU_REF_SCALE_TEST is not set
CONFIG_RCU_CPU_STALL_TIMEOUT=21
# CONFIG_RCU_TRACE is not set
# CONFIG_RCU_EQS_DEBUG is not set
# end of RCU Debugging

# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
CONFIG_HAVE_FUNCTION_TRACER=y
CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
CONFIG_HAVE_DYNAMIC_FTRACE=y
CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y
CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
CONFIG_HAVE_C_RECORDMCOUNT=y
CONFIG_TRACING_SUPPORT=y
# CONFIG_FTRACE is not set
# CONFIG_SAMPLES is not set

#
# arm64 Debugging
#
# CONFIG_PID_IN_CONTEXTIDR is not set
# CONFIG_CORESIGHT is not set
# end of arm64 Debugging

#
# Kernel Testing and Coverage
#
# CONFIG_KUNIT is not set
# CONFIG_NOTIFIER_ERROR_INJECTION is not set
# CONFIG_FAULT_INJECTION is not set
CONFIG_ARCH_HAS_KCOV=y
CONFIG_CC_HAS_SANCOV_TRACE_PC=y
# CONFIG_RUNTIME_TESTING_MENU is not set
CONFIG_ARCH_USE_MEMTEST=y
# CONFIG_MEMTEST is not set
# end of Kernel Testing and Coverage
# end of Kernel hacking

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: RCU: undefined reference to irq_work_queue
  2022-03-17 16:45       ` Hyeonggon Yoo
@ 2022-03-17 17:36         ` Paul E. McKenney
  2022-03-17 20:26           ` Randy Dunlap
  2022-03-17 20:41           ` Zhouyi Zhou
  0 siblings, 2 replies; 14+ messages in thread
From: Paul E. McKenney @ 2022-03-17 17:36 UTC (permalink / raw)
  To: Hyeonggon Yoo
  Cc: rcu, Josh Triplett, Steven Rostedt, Mathieu Desnoyers,
	Joel Fernandes, linux-kernel

On Thu, Mar 17, 2022 at 04:45:11PM +0000, Hyeonggon Yoo wrote:
> On Thu, Mar 17, 2022 at 09:20:33AM -0700, Paul E. McKenney wrote:
> > On Thu, Mar 17, 2022 at 03:24:42PM +0000, Hyeonggon Yoo wrote:
> > > On Thu, Mar 17, 2022 at 07:00:00AM -0700, Paul E. McKenney wrote:
> > > > On Thu, Mar 17, 2022 at 11:32:53AM +0000, Hyeonggon Yoo wrote:
> > > > > Hello RCU folks,
> > > > > 
> > > > > I like to use minimal configuration for kernel development.
> > > > > when building with tinyconfig + CONFIG_PREEMPT=y on arm64:
> > > > > 
> > > > > ld: kernel/rcu/update.o: in function `call_rcu_tasks':
> > > > > update.c:(.text+0xb2c): undefined reference to `irq_work_queue'
> > > > > update.c:(.text+0xb2c): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `irq_work_queue'
> > > > > make: *** [Makefile:1155: vmlinux] Error 1
> > > > > 
> > > > > It seems RCU calls irq_work_queue() without checking if CONFIG_IRQ_WORK is enabled.
> > > > 
> > > > Indeed it does!
> > > > 
> > > > And kernel/rcu/Kconfig shows why:
> > > > 
> > > > config TASKS_TRACE_RCU
> > > > 	def_bool 0
> > > > 	select IRQ_WORK
> > > > 	help
> > > > 	  This option enables a task-based RCU implementation that uses
> > > > 	  explicit rcu_read_lock_trace() read-side markers, and allows
> > > > 	  these readers to appear in the idle loop as well as on the CPU
> > > > 	  hotplug code paths.  It can force IPIs on online CPUs, including
> > > > 	  idle ones, so use with caution.
> > > > 
> > > > So the solution is to further minimize your configuration so as to
> > > > deselect TASKS_TRACE_RCU.
> > > 
> > > They are already not selected.
> > 
> > Good, thank you.
> > 
> > How about TASKS_RUDE_RCU, TASKS_TRACE_RCU, and TASKS_RCU_GENERIC?
> 
> TASKS_RUDE_RCU=n
> TASKS_TRACE_RCU=n
> TASKS_RCU_GENERIC=y
> TASKS_RCU=y
> 
> > > > This means making sure that both BPF and
> > > > the various RCU torture tests are all deselected.
> > > 
> > > I wanted to say call_rcu_tasks() can be referenced even when IRQ_WORK is not
> > > selected, making it fail to build.
> > 
> > I am guessing because TASKS_RCU_GENERIC is selected?
> >
> 
> Right.
> 
> > If so, does the patch at the end of this email help?
> >
> 
> No. did not help.
> 
> I think I found reason...
> with PREEMPTION=y,
> 
> in kernel/rcu/Kconfig:
> config TASKS_RCU
>         def_bool PREEMPTION
>         help
>           This option enables a task-based RCU implementation that uses
>           only voluntary context switch (not preemption!), idle, and 
>           user-mode execution as quiescent states.  Not for manual selection.
> 
> in kernel/rcu/Kconfig:
> config TASKS_RCU_GENERIC
>         def_bool TASKS_RCU || TASKS_RUDE_RCU || TASKS_TRACE_RCU
>         select SRCU
>         help
>           This option enables generic infrastructure code supporting
>           task-based RCU implementations.  Not for manual selection.

Ah, this is because some of the tracing code uses TASKS_RCU only
when PREEMPTION=y.  That would be KPROBES and TRACING.  Maybe also
TRACE_CLOCK and TRACEPOINTS, but I would hope that TRACING would
cover those.  Adding the tracing guys for their thoughts.

> > > > > ld: kernel/rcu/update.o: in function `call_rcu_tasks':
> > > > > update.c:(.text+0xb2c): undefined reference to `irq_work_queue'
> > > > > update.c:(.text+0xb2c): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `irq_work_queue'
> > > > > make: *** [Makefile:1155: vmlinux] Error 1
> > > 
> > > Isn't it better to fix this build failure?
> > 
> > But of course!  However, first I need to know exactly what is causing your
> > build failure.  I cannot see your .config file, so I am having to guess.
> >
> > Don't get me wrong, I do have a lot of practice guessing, but it is still
> > just guessing.  ;-)
> 
> Sorry to make you guess. Maybe too late, but added config as attachment ;)

Perhaps I needed the practice.  ;-)

> > > It fails to build when both TASKS_TRACE_RCU and IRQ_WORK are not selected
> > > and PREEMPT is selected.
> > > 
> > >   │ Symbol: TASKS_TRACE_RCU [=n]                                            │
> > >   │ Type  : bool                                                            │
> > >   │ Defined at kernel/rcu/Kconfig:96                                        │
> > >   │ Selects: IRQ_WORK [=n]                                                  │
> > >   │ Selected by [n]:                                                        │
> > >   │   - BPF_SYSCALL [=n]                                                    │
> > >   │   - RCU_SCALE_TEST [=n] && DEBUG_KERNEL [=y]                            │
> > >   │   - RCU_TORTURE_TEST [=n] && DEBUG_KERNEL [=y]                          │
> > >   │   - RCU_REF_SCALE_TEST [=n] && DEBUG_KERNEL [=y]
> > > 
> > > Thanks!
> > > 
> > > > 
> > > > Or turn on IRQ_WORK, for example, if you need to use BPF.
> > 
> > Or do you already have TASKS_RCU_GENERIC deselected?
> >
> 
> No, this is selected. TASKS_RCU_GENERIC=y. because of PREEMPTION=y.

OK, the patch shown below allows me to get TASKS_RCU_GENERIC=n even
with PREEMPTION=y.  This might somehow subtly break tracing, but in
that case further adjustments can be made.  Untested other than
generating a few .config combinations.

Thoughts?

							Thanx, Paul

------------------------------------------------------------------------

diff --git a/arch/Kconfig b/arch/Kconfig
index 678a80713b21..66c5b5543511 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -38,6 +38,7 @@ config KPROBES
 	depends on MODULES
 	depends on HAVE_KPROBES
 	select KALLSYMS
+	select TASKS_RCU if PREEMPTION
 	help
 	  Kprobes allows you to trap at almost any kernel address and
 	  execute a callback function.  register_kprobe() establishes
diff --git a/kernel/rcu/Kconfig b/kernel/rcu/Kconfig
index f559870fbf8b..4f665ae0cf55 100644
--- a/kernel/rcu/Kconfig
+++ b/kernel/rcu/Kconfig
@@ -78,7 +78,8 @@ config TASKS_RCU_GENERIC
 	  task-based RCU implementations.  Not for manual selection.
 
 config TASKS_RCU
-	def_bool PREEMPTION
+	def_bool 0
+	select IRQ_WORK
 	help
 	  This option enables a task-based RCU implementation that uses
 	  only voluntary context switch (not preemption!), idle, and
diff --git a/kernel/trace/Kconfig b/kernel/trace/Kconfig
index 752ed89a293b..a7aaf150b704 100644
--- a/kernel/trace/Kconfig
+++ b/kernel/trace/Kconfig
@@ -127,6 +127,7 @@ config TRACING
 	select BINARY_PRINTF
 	select EVENT_TRACING
 	select TRACE_CLOCK
+	select TASKS_RCU if PREEMPTION
 
 config GENERIC_TRACER
 	bool

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: RCU: undefined reference to irq_work_queue
  2022-03-17 17:36         ` Paul E. McKenney
@ 2022-03-17 20:26           ` Randy Dunlap
  2022-03-17 20:29             ` Paul E. McKenney
  2022-03-17 20:41           ` Zhouyi Zhou
  1 sibling, 1 reply; 14+ messages in thread
From: Randy Dunlap @ 2022-03-17 20:26 UTC (permalink / raw)
  To: paulmck, Hyeonggon Yoo
  Cc: rcu, Josh Triplett, Steven Rostedt, Mathieu Desnoyers,
	Joel Fernandes, linux-kernel



On 3/17/22 10:36, Paul E. McKenney wrote:
> On Thu, Mar 17, 2022 at 04:45:11PM +0000, Hyeonggon Yoo wrote:
>> On Thu, Mar 17, 2022 at 09:20:33AM -0700, Paul E. McKenney wrote:
>>> On Thu, Mar 17, 2022 at 03:24:42PM +0000, Hyeonggon Yoo wrote:
>>>> On Thu, Mar 17, 2022 at 07:00:00AM -0700, Paul E. McKenney wrote:
>>>>> On Thu, Mar 17, 2022 at 11:32:53AM +0000, Hyeonggon Yoo wrote:
>>>>>> Hello RCU folks,
>>>>>>

> ------------------------------------------------------------------------
> 
> diff --git a/arch/Kconfig b/arch/Kconfig
> index 678a80713b21..66c5b5543511 100644
> --- a/arch/Kconfig
> +++ b/arch/Kconfig
> @@ -38,6 +38,7 @@ config KPROBES
>  	depends on MODULES
>  	depends on HAVE_KPROBES
>  	select KALLSYMS
> +	select TASKS_RCU if PREEMPTION
>  	help
>  	  Kprobes allows you to trap at almost any kernel address and
>  	  execute a callback function.  register_kprobe() establishes
> diff --git a/kernel/rcu/Kconfig b/kernel/rcu/Kconfig
> index f559870fbf8b..4f665ae0cf55 100644
> --- a/kernel/rcu/Kconfig
> +++ b/kernel/rcu/Kconfig
> @@ -78,7 +78,8 @@ config TASKS_RCU_GENERIC
>  	  task-based RCU implementations.  Not for manual selection.
>  
>  config TASKS_RCU
> -	def_bool PREEMPTION
> +	def_bool 0

preferably
	def_bool n

but the 0 probably works...  :)

> +	select IRQ_WORK
>  	help
>  	  This option enables a task-based RCU implementation that uses
>  	  only voluntary context switch (not preemption!), idle, and
> diff --git a/kernel/trace/Kconfig b/kernel/trace/Kconfig
> index 752ed89a293b..a7aaf150b704 100644
> --- a/kernel/trace/Kconfig
> +++ b/kernel/trace/Kconfig
> @@ -127,6 +127,7 @@ config TRACING
>  	select BINARY_PRINTF
>  	select EVENT_TRACING
>  	select TRACE_CLOCK
> +	select TASKS_RCU if PREEMPTION
>  
>  config GENERIC_TRACER
>  	bool

-- 
~Randy

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: RCU: undefined reference to irq_work_queue
  2022-03-17 20:26           ` Randy Dunlap
@ 2022-03-17 20:29             ` Paul E. McKenney
  2022-03-17 20:31               ` Randy Dunlap
  0 siblings, 1 reply; 14+ messages in thread
From: Paul E. McKenney @ 2022-03-17 20:29 UTC (permalink / raw)
  To: Randy Dunlap
  Cc: Hyeonggon Yoo, rcu, Josh Triplett, Steven Rostedt,
	Mathieu Desnoyers, Joel Fernandes, linux-kernel

On Thu, Mar 17, 2022 at 01:26:45PM -0700, Randy Dunlap wrote:
> 
> 
> On 3/17/22 10:36, Paul E. McKenney wrote:
> > On Thu, Mar 17, 2022 at 04:45:11PM +0000, Hyeonggon Yoo wrote:
> >> On Thu, Mar 17, 2022 at 09:20:33AM -0700, Paul E. McKenney wrote:
> >>> On Thu, Mar 17, 2022 at 03:24:42PM +0000, Hyeonggon Yoo wrote:
> >>>> On Thu, Mar 17, 2022 at 07:00:00AM -0700, Paul E. McKenney wrote:
> >>>>> On Thu, Mar 17, 2022 at 11:32:53AM +0000, Hyeonggon Yoo wrote:
> >>>>>> Hello RCU folks,
> >>>>>>
> 
> > ------------------------------------------------------------------------
> > 
> > diff --git a/arch/Kconfig b/arch/Kconfig
> > index 678a80713b21..66c5b5543511 100644
> > --- a/arch/Kconfig
> > +++ b/arch/Kconfig
> > @@ -38,6 +38,7 @@ config KPROBES
> >  	depends on MODULES
> >  	depends on HAVE_KPROBES
> >  	select KALLSYMS
> > +	select TASKS_RCU if PREEMPTION
> >  	help
> >  	  Kprobes allows you to trap at almost any kernel address and
> >  	  execute a callback function.  register_kprobe() establishes
> > diff --git a/kernel/rcu/Kconfig b/kernel/rcu/Kconfig
> > index f559870fbf8b..4f665ae0cf55 100644
> > --- a/kernel/rcu/Kconfig
> > +++ b/kernel/rcu/Kconfig
> > @@ -78,7 +78,8 @@ config TASKS_RCU_GENERIC
> >  	  task-based RCU implementations.  Not for manual selection.
> >  
> >  config TASKS_RCU
> > -	def_bool PREEMPTION
> > +	def_bool 0
> 
> preferably
> 	def_bool n
> 
> but the 0 probably works...  :)

In a later commit, it ends up like this:

config TASKS_TRACE_RCU
	bool "Enable Tasks Trace RCU"
	depends on RCU_EXPERT
	default n
	select IRQ_WORK
	help
	  This option enables a task-based RCU implementation that uses
	  explicit rcu_read_lock_trace() read-side markers, and allows
	  these readers to appear in the idle loop as well as on the CPU
	  hotplug code paths.  It can force IPIs on online CPUs, including
	  idle ones, so use with caution.

The reason being to allow people to use rcutorture without having
to have TASKS_TRACE_RCU enabled.

So you got your wish!  I think...  ;-)

							Thanx, Paul

> > +	select IRQ_WORK
> >  	help
> >  	  This option enables a task-based RCU implementation that uses
> >  	  only voluntary context switch (not preemption!), idle, and
> > diff --git a/kernel/trace/Kconfig b/kernel/trace/Kconfig
> > index 752ed89a293b..a7aaf150b704 100644
> > --- a/kernel/trace/Kconfig
> > +++ b/kernel/trace/Kconfig
> > @@ -127,6 +127,7 @@ config TRACING
> >  	select BINARY_PRINTF
> >  	select EVENT_TRACING
> >  	select TRACE_CLOCK
> > +	select TASKS_RCU if PREEMPTION
> >  
> >  config GENERIC_TRACER
> >  	bool
> 
> -- 
> ~Randy

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: RCU: undefined reference to irq_work_queue
  2022-03-17 20:29             ` Paul E. McKenney
@ 2022-03-17 20:31               ` Randy Dunlap
  0 siblings, 0 replies; 14+ messages in thread
From: Randy Dunlap @ 2022-03-17 20:31 UTC (permalink / raw)
  To: paulmck
  Cc: Hyeonggon Yoo, rcu, Josh Triplett, Steven Rostedt,
	Mathieu Desnoyers, Joel Fernandes, linux-kernel



On 3/17/22 13:29, Paul E. McKenney wrote:
> On Thu, Mar 17, 2022 at 01:26:45PM -0700, Randy Dunlap wrote:
>>
>>
>> On 3/17/22 10:36, Paul E. McKenney wrote:
>>> On Thu, Mar 17, 2022 at 04:45:11PM +0000, Hyeonggon Yoo wrote:
>>>> On Thu, Mar 17, 2022 at 09:20:33AM -0700, Paul E. McKenney wrote:
>>>>> On Thu, Mar 17, 2022 at 03:24:42PM +0000, Hyeonggon Yoo wrote:
>>>>>> On Thu, Mar 17, 2022 at 07:00:00AM -0700, Paul E. McKenney wrote:
>>>>>>> On Thu, Mar 17, 2022 at 11:32:53AM +0000, Hyeonggon Yoo wrote:
>>>>>>>> Hello RCU folks,
>>>>>>>>
>>
>>> ------------------------------------------------------------------------
>>>
>>> diff --git a/arch/Kconfig b/arch/Kconfig
>>> index 678a80713b21..66c5b5543511 100644
>>> --- a/arch/Kconfig
>>> +++ b/arch/Kconfig
>>> @@ -38,6 +38,7 @@ config KPROBES
>>>  	depends on MODULES
>>>  	depends on HAVE_KPROBES
>>>  	select KALLSYMS
>>> +	select TASKS_RCU if PREEMPTION
>>>  	help
>>>  	  Kprobes allows you to trap at almost any kernel address and
>>>  	  execute a callback function.  register_kprobe() establishes
>>> diff --git a/kernel/rcu/Kconfig b/kernel/rcu/Kconfig
>>> index f559870fbf8b..4f665ae0cf55 100644
>>> --- a/kernel/rcu/Kconfig
>>> +++ b/kernel/rcu/Kconfig
>>> @@ -78,7 +78,8 @@ config TASKS_RCU_GENERIC
>>>  	  task-based RCU implementations.  Not for manual selection.
>>>  
>>>  config TASKS_RCU
>>> -	def_bool PREEMPTION
>>> +	def_bool 0
>>
>> preferably
>> 	def_bool n
>>
>> but the 0 probably works...  :)
> 
> In a later commit, it ends up like this:
> 
> config TASKS_TRACE_RCU
> 	bool "Enable Tasks Trace RCU"
> 	depends on RCU_EXPERT
> 	default n
> 	select IRQ_WORK
> 	help
> 	  This option enables a task-based RCU implementation that uses
> 	  explicit rcu_read_lock_trace() read-side markers, and allows
> 	  these readers to appear in the idle loop as well as on the CPU
> 	  hotplug code paths.  It can force IPIs on online CPUs, including
> 	  idle ones, so use with caution.
> 
> The reason being to allow people to use rcutorture without having
> to have TASKS_TRACE_RCU enabled.
> 
> So you got your wish!  I think...  ;-)
> 
> 							Thanx, Paul

Yeah, thanks.

>>> +	select IRQ_WORK
>>>  	help
>>>  	  This option enables a task-based RCU implementation that uses
>>>  	  only voluntary context switch (not preemption!), idle, and
>>> diff --git a/kernel/trace/Kconfig b/kernel/trace/Kconfig
>>> index 752ed89a293b..a7aaf150b704 100644
>>> --- a/kernel/trace/Kconfig
>>> +++ b/kernel/trace/Kconfig
>>> @@ -127,6 +127,7 @@ config TRACING
>>>  	select BINARY_PRINTF
>>>  	select EVENT_TRACING
>>>  	select TRACE_CLOCK
>>> +	select TASKS_RCU if PREEMPTION
>>>  
>>>  config GENERIC_TRACER
>>>  	bool
>>
>> -- 
>> ~Randy

-- 
~Randy

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: RCU: undefined reference to irq_work_queue
  2022-03-17 17:36         ` Paul E. McKenney
  2022-03-17 20:26           ` Randy Dunlap
@ 2022-03-17 20:41           ` Zhouyi Zhou
  2022-03-17 20:53             ` Paul E. McKenney
  1 sibling, 1 reply; 14+ messages in thread
From: Zhouyi Zhou @ 2022-03-17 20:41 UTC (permalink / raw)
  To: Paul E. McKenney
  Cc: Hyeonggon Yoo, rcu, Josh Triplett, Steven Rostedt,
	Mathieu Desnoyers, Joel Fernandes, linux-kernel

hi

On Fri, Mar 18, 2022 at 4:20 AM Paul E. McKenney <paulmck@kernel.org> wrote:
>
> On Thu, Mar 17, 2022 at 04:45:11PM +0000, Hyeonggon Yoo wrote:
> > On Thu, Mar 17, 2022 at 09:20:33AM -0700, Paul E. McKenney wrote:
> > > On Thu, Mar 17, 2022 at 03:24:42PM +0000, Hyeonggon Yoo wrote:
> > > > On Thu, Mar 17, 2022 at 07:00:00AM -0700, Paul E. McKenney wrote:
> > > > > On Thu, Mar 17, 2022 at 11:32:53AM +0000, Hyeonggon Yoo wrote:
> > > > > > Hello RCU folks,
> > > > > >
> > > > > > I like to use minimal configuration for kernel development.
> > > > > > when building with tinyconfig + CONFIG_PREEMPT=y on arm64:
> > > > > >
> > > > > > ld: kernel/rcu/update.o: in function `call_rcu_tasks':
> > > > > > update.c:(.text+0xb2c): undefined reference to `irq_work_queue'
> > > > > > update.c:(.text+0xb2c): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `irq_work_queue'
> > > > > > make: *** [Makefile:1155: vmlinux] Error 1
> > > > > >
> > > > > > It seems RCU calls irq_work_queue() without checking if CONFIG_IRQ_WORK is enabled.
> > > > >
> > > > > Indeed it does!
> > > > >
> > > > > And kernel/rcu/Kconfig shows why:
> > > > >
> > > > > config TASKS_TRACE_RCU
> > > > >         def_bool 0
> > > > >         select IRQ_WORK
> > > > >         help
> > > > >           This option enables a task-based RCU implementation that uses
> > > > >           explicit rcu_read_lock_trace() read-side markers, and allows
> > > > >           these readers to appear in the idle loop as well as on the CPU
> > > > >           hotplug code paths.  It can force IPIs on online CPUs, including
> > > > >           idle ones, so use with caution.
> > > > >
> > > > > So the solution is to further minimize your configuration so as to
> > > > > deselect TASKS_TRACE_RCU.
> > > >
> > > > They are already not selected.
> > >
> > > Good, thank you.
> > >
> > > How about TASKS_RUDE_RCU, TASKS_TRACE_RCU, and TASKS_RCU_GENERIC?
> >
> > TASKS_RUDE_RCU=n
> > TASKS_TRACE_RCU=n
> > TASKS_RCU_GENERIC=y
> > TASKS_RCU=y
> >
> > > > > This means making sure that both BPF and
> > > > > the various RCU torture tests are all deselected.
> > > >
> > > > I wanted to say call_rcu_tasks() can be referenced even when IRQ_WORK is not
> > > > selected, making it fail to build.
> > >
> > > I am guessing because TASKS_RCU_GENERIC is selected?
> > >
> >
> > Right.
> >
> > > If so, does the patch at the end of this email help?
> > >
> >
> > No. did not help.
> >
> > I think I found reason...
> > with PREEMPTION=y,
> >
> > in kernel/rcu/Kconfig:
> > config TASKS_RCU
> >         def_bool PREEMPTION
> >         help
> >           This option enables a task-based RCU implementation that uses
> >           only voluntary context switch (not preemption!), idle, and
> >           user-mode execution as quiescent states.  Not for manual selection.
> >
> > in kernel/rcu/Kconfig:
> > config TASKS_RCU_GENERIC
> >         def_bool TASKS_RCU || TASKS_RUDE_RCU || TASKS_TRACE_RCU
> >         select SRCU
> >         help
> >           This option enables generic infrastructure code supporting
> >           task-based RCU implementations.  Not for manual selection.
>
> Ah, this is because some of the tracing code uses TASKS_RCU only
> when PREEMPTION=y.  That would be KPROBES and TRACING.  Maybe also
> TRACE_CLOCK and TRACEPOINTS, but I would hope that TRACING would
> cover those.  Adding the tracing guys for their thoughts.
>
> > > > > > ld: kernel/rcu/update.o: in function `call_rcu_tasks':
> > > > > > update.c:(.text+0xb2c): undefined reference to `irq_work_queue'
> > > > > > update.c:(.text+0xb2c): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `irq_work_queue'
> > > > > > make: *** [Makefile:1155: vmlinux] Error 1
> > > >
> > > > Isn't it better to fix this build failure?
> > >
> > > But of course!  However, first I need to know exactly what is causing your
> > > build failure.  I cannot see your .config file, so I am having to guess.
> > >
> > > Don't get me wrong, I do have a lot of practice guessing, but it is still
> > > just guessing.  ;-)
> >
> > Sorry to make you guess. Maybe too late, but added config as attachment ;)
>
> Perhaps I needed the practice.  ;-)
>
> > > > It fails to build when both TASKS_TRACE_RCU and IRQ_WORK are not selected
> > > > and PREEMPT is selected.
> > > >
> > > >   │ Symbol: TASKS_TRACE_RCU [=n]                                            │
> > > >   │ Type  : bool                                                            │
> > > >   │ Defined at kernel/rcu/Kconfig:96                                        │
> > > >   │ Selects: IRQ_WORK [=n]                                                  │
> > > >   │ Selected by [n]:                                                        │
> > > >   │   - BPF_SYSCALL [=n]                                                    │
> > > >   │   - RCU_SCALE_TEST [=n] && DEBUG_KERNEL [=y]                            │
> > > >   │   - RCU_TORTURE_TEST [=n] && DEBUG_KERNEL [=y]                          │
> > > >   │   - RCU_REF_SCALE_TEST [=n] && DEBUG_KERNEL [=y]
> > > >
> > > > Thanks!
> > > >
> > > > >
> > > > > Or turn on IRQ_WORK, for example, if you need to use BPF.
> > >
> > > Or do you already have TASKS_RCU_GENERIC deselected?
> > >
> >
> > No, this is selected. TASKS_RCU_GENERIC=y. because of PREEMPTION=y.
>
> OK, the patch shown below allows me to get TASKS_RCU_GENERIC=n even
> with PREEMPTION=y.  This might somehow subtly break tracing, but in
> that case further adjustments can be made.  Untested other than
> generating a few .config combinations.
>
> Thoughts?
>
>                                                         Thanx, Paul
>
> ------------------------------------------------------------------------
>
> diff --git a/arch/Kconfig b/arch/Kconfig
> index 678a80713b21..66c5b5543511 100644
> --- a/arch/Kconfig
> +++ b/arch/Kconfig
> @@ -38,6 +38,7 @@ config KPROBES
>         depends on MODULES
>         depends on HAVE_KPROBES
>         select KALLSYMS
> +       select TASKS_RCU if PREEMPTION
>         help
>           Kprobes allows you to trap at almost any kernel address and
>           execute a callback function.  register_kprobe() establishes
> diff --git a/kernel/rcu/Kconfig b/kernel/rcu/Kconfig
> index f559870fbf8b..4f665ae0cf55 100644
> --- a/kernel/rcu/Kconfig
> +++ b/kernel/rcu/Kconfig
> @@ -78,7 +78,8 @@ config TASKS_RCU_GENERIC
>           task-based RCU implementations.  Not for manual selection.
>
>  config TASKS_RCU
> -       def_bool PREEMPTION
> +       def_bool 0
> +       select IRQ_WORK
>         help
>           This option enables a task-based RCU implementation that uses
>           only voluntary context switch (not preemption!), idle, and
> diff --git a/kernel/trace/Kconfig b/kernel/trace/Kconfig
> index 752ed89a293b..a7aaf150b704 100644
> --- a/kernel/trace/Kconfig
> +++ b/kernel/trace/Kconfig
> @@ -127,6 +127,7 @@ config TRACING
>         select BINARY_PRINTF
>         select EVENT_TRACING
>         select TRACE_CLOCK
> +       select TASKS_RCU if PREEMPTION
>
>  config GENERIC_TRACER
>         bool
I apply above patch, and invoke
$make  ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
CC=aarch64-linux-gnu-gcc-10 tinyconfig
$make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
CC=aarch64-linux-gnu-gcc-10 -j 16
kernel build successful this time (without above patch, kernel build
will quit with undefined reference to `irq_work_queue'
Tested-by: Zhouyi Zhou<zhouzhouyi@gmail.com>

Thanks
Zhouyi

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: RCU: undefined reference to irq_work_queue
  2022-03-17 20:41           ` Zhouyi Zhou
@ 2022-03-17 20:53             ` Paul E. McKenney
  2022-03-18 14:42               ` Hyeonggon Yoo
  0 siblings, 1 reply; 14+ messages in thread
From: Paul E. McKenney @ 2022-03-17 20:53 UTC (permalink / raw)
  To: Zhouyi Zhou
  Cc: Hyeonggon Yoo, rcu, Josh Triplett, Steven Rostedt,
	Mathieu Desnoyers, Joel Fernandes, linux-kernel

On Fri, Mar 18, 2022 at 04:41:59AM +0800, Zhouyi Zhou wrote:
> hi
> 
> On Fri, Mar 18, 2022 at 4:20 AM Paul E. McKenney <paulmck@kernel.org> wrote:
> >
> > On Thu, Mar 17, 2022 at 04:45:11PM +0000, Hyeonggon Yoo wrote:
> > > On Thu, Mar 17, 2022 at 09:20:33AM -0700, Paul E. McKenney wrote:
> > > > On Thu, Mar 17, 2022 at 03:24:42PM +0000, Hyeonggon Yoo wrote:
> > > > > On Thu, Mar 17, 2022 at 07:00:00AM -0700, Paul E. McKenney wrote:
> > > > > > On Thu, Mar 17, 2022 at 11:32:53AM +0000, Hyeonggon Yoo wrote:
> > > > > > > Hello RCU folks,
> > > > > > >
> > > > > > > I like to use minimal configuration for kernel development.
> > > > > > > when building with tinyconfig + CONFIG_PREEMPT=y on arm64:
> > > > > > >
> > > > > > > ld: kernel/rcu/update.o: in function `call_rcu_tasks':
> > > > > > > update.c:(.text+0xb2c): undefined reference to `irq_work_queue'
> > > > > > > update.c:(.text+0xb2c): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `irq_work_queue'
> > > > > > > make: *** [Makefile:1155: vmlinux] Error 1
> > > > > > >
> > > > > > > It seems RCU calls irq_work_queue() without checking if CONFIG_IRQ_WORK is enabled.
> > > > > >
> > > > > > Indeed it does!
> > > > > >
> > > > > > And kernel/rcu/Kconfig shows why:
> > > > > >
> > > > > > config TASKS_TRACE_RCU
> > > > > >         def_bool 0
> > > > > >         select IRQ_WORK
> > > > > >         help
> > > > > >           This option enables a task-based RCU implementation that uses
> > > > > >           explicit rcu_read_lock_trace() read-side markers, and allows
> > > > > >           these readers to appear in the idle loop as well as on the CPU
> > > > > >           hotplug code paths.  It can force IPIs on online CPUs, including
> > > > > >           idle ones, so use with caution.
> > > > > >
> > > > > > So the solution is to further minimize your configuration so as to
> > > > > > deselect TASKS_TRACE_RCU.
> > > > >
> > > > > They are already not selected.
> > > >
> > > > Good, thank you.
> > > >
> > > > How about TASKS_RUDE_RCU, TASKS_TRACE_RCU, and TASKS_RCU_GENERIC?
> > >
> > > TASKS_RUDE_RCU=n
> > > TASKS_TRACE_RCU=n
> > > TASKS_RCU_GENERIC=y
> > > TASKS_RCU=y
> > >
> > > > > > This means making sure that both BPF and
> > > > > > the various RCU torture tests are all deselected.
> > > > >
> > > > > I wanted to say call_rcu_tasks() can be referenced even when IRQ_WORK is not
> > > > > selected, making it fail to build.
> > > >
> > > > I am guessing because TASKS_RCU_GENERIC is selected?
> > > >
> > >
> > > Right.
> > >
> > > > If so, does the patch at the end of this email help?
> > > >
> > >
> > > No. did not help.
> > >
> > > I think I found reason...
> > > with PREEMPTION=y,
> > >
> > > in kernel/rcu/Kconfig:
> > > config TASKS_RCU
> > >         def_bool PREEMPTION
> > >         help
> > >           This option enables a task-based RCU implementation that uses
> > >           only voluntary context switch (not preemption!), idle, and
> > >           user-mode execution as quiescent states.  Not for manual selection.
> > >
> > > in kernel/rcu/Kconfig:
> > > config TASKS_RCU_GENERIC
> > >         def_bool TASKS_RCU || TASKS_RUDE_RCU || TASKS_TRACE_RCU
> > >         select SRCU
> > >         help
> > >           This option enables generic infrastructure code supporting
> > >           task-based RCU implementations.  Not for manual selection.
> >
> > Ah, this is because some of the tracing code uses TASKS_RCU only
> > when PREEMPTION=y.  That would be KPROBES and TRACING.  Maybe also
> > TRACE_CLOCK and TRACEPOINTS, but I would hope that TRACING would
> > cover those.  Adding the tracing guys for their thoughts.
> >
> > > > > > > ld: kernel/rcu/update.o: in function `call_rcu_tasks':
> > > > > > > update.c:(.text+0xb2c): undefined reference to `irq_work_queue'
> > > > > > > update.c:(.text+0xb2c): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `irq_work_queue'
> > > > > > > make: *** [Makefile:1155: vmlinux] Error 1
> > > > >
> > > > > Isn't it better to fix this build failure?
> > > >
> > > > But of course!  However, first I need to know exactly what is causing your
> > > > build failure.  I cannot see your .config file, so I am having to guess.
> > > >
> > > > Don't get me wrong, I do have a lot of practice guessing, but it is still
> > > > just guessing.  ;-)
> > >
> > > Sorry to make you guess. Maybe too late, but added config as attachment ;)
> >
> > Perhaps I needed the practice.  ;-)
> >
> > > > > It fails to build when both TASKS_TRACE_RCU and IRQ_WORK are not selected
> > > > > and PREEMPT is selected.
> > > > >
> > > > >   │ Symbol: TASKS_TRACE_RCU [=n]                                            │
> > > > >   │ Type  : bool                                                            │
> > > > >   │ Defined at kernel/rcu/Kconfig:96                                        │
> > > > >   │ Selects: IRQ_WORK [=n]                                                  │
> > > > >   │ Selected by [n]:                                                        │
> > > > >   │   - BPF_SYSCALL [=n]                                                    │
> > > > >   │   - RCU_SCALE_TEST [=n] && DEBUG_KERNEL [=y]                            │
> > > > >   │   - RCU_TORTURE_TEST [=n] && DEBUG_KERNEL [=y]                          │
> > > > >   │   - RCU_REF_SCALE_TEST [=n] && DEBUG_KERNEL [=y]
> > > > >
> > > > > Thanks!
> > > > >
> > > > > >
> > > > > > Or turn on IRQ_WORK, for example, if you need to use BPF.
> > > >
> > > > Or do you already have TASKS_RCU_GENERIC deselected?
> > > >
> > >
> > > No, this is selected. TASKS_RCU_GENERIC=y. because of PREEMPTION=y.
> >
> > OK, the patch shown below allows me to get TASKS_RCU_GENERIC=n even
> > with PREEMPTION=y.  This might somehow subtly break tracing, but in
> > that case further adjustments can be made.  Untested other than
> > generating a few .config combinations.
> >
> > Thoughts?
> >
> >                                                         Thanx, Paul
> >
> > ------------------------------------------------------------------------
> >
> > diff --git a/arch/Kconfig b/arch/Kconfig
> > index 678a80713b21..66c5b5543511 100644
> > --- a/arch/Kconfig
> > +++ b/arch/Kconfig
> > @@ -38,6 +38,7 @@ config KPROBES
> >         depends on MODULES
> >         depends on HAVE_KPROBES
> >         select KALLSYMS
> > +       select TASKS_RCU if PREEMPTION
> >         help
> >           Kprobes allows you to trap at almost any kernel address and
> >           execute a callback function.  register_kprobe() establishes
> > diff --git a/kernel/rcu/Kconfig b/kernel/rcu/Kconfig
> > index f559870fbf8b..4f665ae0cf55 100644
> > --- a/kernel/rcu/Kconfig
> > +++ b/kernel/rcu/Kconfig
> > @@ -78,7 +78,8 @@ config TASKS_RCU_GENERIC
> >           task-based RCU implementations.  Not for manual selection.
> >
> >  config TASKS_RCU
> > -       def_bool PREEMPTION
> > +       def_bool 0
> > +       select IRQ_WORK
> >         help
> >           This option enables a task-based RCU implementation that uses
> >           only voluntary context switch (not preemption!), idle, and
> > diff --git a/kernel/trace/Kconfig b/kernel/trace/Kconfig
> > index 752ed89a293b..a7aaf150b704 100644
> > --- a/kernel/trace/Kconfig
> > +++ b/kernel/trace/Kconfig
> > @@ -127,6 +127,7 @@ config TRACING
> >         select BINARY_PRINTF
> >         select EVENT_TRACING
> >         select TRACE_CLOCK
> > +       select TASKS_RCU if PREEMPTION
> >
> >  config GENERIC_TRACER
> >         bool
> I apply above patch, and invoke
> $make  ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
> CC=aarch64-linux-gnu-gcc-10 tinyconfig
> $make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
> CC=aarch64-linux-gnu-gcc-10 -j 16
> kernel build successful this time (without above patch, kernel build
> will quit with undefined reference to `irq_work_queue'
> Tested-by: Zhouyi Zhou<zhouzhouyi@gmail.com>

I will apply on my next rebase, thank you!

							Thanx, Paul

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: RCU: undefined reference to irq_work_queue
  2022-03-17 20:53             ` Paul E. McKenney
@ 2022-03-18 14:42               ` Hyeonggon Yoo
  0 siblings, 0 replies; 14+ messages in thread
From: Hyeonggon Yoo @ 2022-03-18 14:42 UTC (permalink / raw)
  To: Paul E. McKenney
  Cc: Zhouyi Zhou, rcu, Josh Triplett, Steven Rostedt,
	Mathieu Desnoyers, Joel Fernandes, linux-kernel

On Thu, Mar 17, 2022 at 01:53:39PM -0700, Paul E. McKenney wrote:
> On Fri, Mar 18, 2022 at 04:41:59AM +0800, Zhouyi Zhou wrote:
> > hi
> > 
> > On Fri, Mar 18, 2022 at 4:20 AM Paul E. McKenney <paulmck@kernel.org> wrote:
> > >
> > > On Thu, Mar 17, 2022 at 04:45:11PM +0000, Hyeonggon Yoo wrote:
> > > > On Thu, Mar 17, 2022 at 09:20:33AM -0700, Paul E. McKenney wrote:
> > > > > On Thu, Mar 17, 2022 at 03:24:42PM +0000, Hyeonggon Yoo wrote:
> > > > > > On Thu, Mar 17, 2022 at 07:00:00AM -0700, Paul E. McKenney wrote:
> > > > > > > On Thu, Mar 17, 2022 at 11:32:53AM +0000, Hyeonggon Yoo wrote:
> > > > > > > > Hello RCU folks,
> > > > > > > >
> > > > > > > > I like to use minimal configuration for kernel development.
> > > > > > > > when building with tinyconfig + CONFIG_PREEMPT=y on arm64:
> > > > > > > >
> > > > > > > > ld: kernel/rcu/update.o: in function `call_rcu_tasks':
> > > > > > > > update.c:(.text+0xb2c): undefined reference to `irq_work_queue'
> > > > > > > > update.c:(.text+0xb2c): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `irq_work_queue'
> > > > > > > > make: *** [Makefile:1155: vmlinux] Error 1
> > > > > > > >
> > > > > > > > It seems RCU calls irq_work_queue() without checking if CONFIG_IRQ_WORK is enabled.
> > > > > > >
> > > > > > > Indeed it does!
> > > > > > >
> > > > > > > And kernel/rcu/Kconfig shows why:
> > > > > > >
> > > > > > > config TASKS_TRACE_RCU
> > > > > > >         def_bool 0
> > > > > > >         select IRQ_WORK
> > > > > > >         help
> > > > > > >           This option enables a task-based RCU implementation that uses
> > > > > > >           explicit rcu_read_lock_trace() read-side markers, and allows
> > > > > > >           these readers to appear in the idle loop as well as on the CPU
> > > > > > >           hotplug code paths.  It can force IPIs on online CPUs, including
> > > > > > >           idle ones, so use with caution.
> > > > > > >
> > > > > > > So the solution is to further minimize your configuration so as to
> > > > > > > deselect TASKS_TRACE_RCU.
> > > > > >
> > > > > > They are already not selected.
> > > > >
> > > > > Good, thank you.
> > > > >
> > > > > How about TASKS_RUDE_RCU, TASKS_TRACE_RCU, and TASKS_RCU_GENERIC?
> > > >
> > > > TASKS_RUDE_RCU=n
> > > > TASKS_TRACE_RCU=n
> > > > TASKS_RCU_GENERIC=y
> > > > TASKS_RCU=y
> > > >
> > > > > > > This means making sure that both BPF and
> > > > > > > the various RCU torture tests are all deselected.
> > > > > >
> > > > > > I wanted to say call_rcu_tasks() can be referenced even when IRQ_WORK is not
> > > > > > selected, making it fail to build.
> > > > >
> > > > > I am guessing because TASKS_RCU_GENERIC is selected?
> > > > >
> > > >
> > > > Right.
> > > >
> > > > > If so, does the patch at the end of this email help?
> > > > >
> > > >
> > > > No. did not help.
> > > >
> > > > I think I found reason...
> > > > with PREEMPTION=y,
> > > >
> > > > in kernel/rcu/Kconfig:
> > > > config TASKS_RCU
> > > >         def_bool PREEMPTION
> > > >         help
> > > >           This option enables a task-based RCU implementation that uses
> > > >           only voluntary context switch (not preemption!), idle, and
> > > >           user-mode execution as quiescent states.  Not for manual selection.
> > > >
> > > > in kernel/rcu/Kconfig:
> > > > config TASKS_RCU_GENERIC
> > > >         def_bool TASKS_RCU || TASKS_RUDE_RCU || TASKS_TRACE_RCU
> > > >         select SRCU
> > > >         help
> > > >           This option enables generic infrastructure code supporting
> > > >           task-based RCU implementations.  Not for manual selection.
> > >
> > > Ah, this is because some of the tracing code uses TASKS_RCU only
> > > when PREEMPTION=y.  That would be KPROBES and TRACING.  Maybe also
> > > TRACE_CLOCK and TRACEPOINTS, but I would hope that TRACING would
> > > cover those.  Adding the tracing guys for their thoughts.
> > >
> > > > > > > > ld: kernel/rcu/update.o: in function `call_rcu_tasks':
> > > > > > > > update.c:(.text+0xb2c): undefined reference to `irq_work_queue'
> > > > > > > > update.c:(.text+0xb2c): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `irq_work_queue'
> > > > > > > > make: *** [Makefile:1155: vmlinux] Error 1
> > > > > >
> > > > > > Isn't it better to fix this build failure?
> > > > >
> > > > > But of course!  However, first I need to know exactly what is causing your
> > > > > build failure.  I cannot see your .config file, so I am having to guess.
> > > > >
> > > > > Don't get me wrong, I do have a lot of practice guessing, but it is still
> > > > > just guessing.  ;-)
> > > >
> > > > Sorry to make you guess. Maybe too late, but added config as attachment ;)
> > >
> > > Perhaps I needed the practice.  ;-)
> > >
> > > > > > It fails to build when both TASKS_TRACE_RCU and IRQ_WORK are not selected
> > > > > > and PREEMPT is selected.
> > > > > >
> > > > > >   │ Symbol: TASKS_TRACE_RCU [=n]                                            │
> > > > > >   │ Type  : bool                                                            │
> > > > > >   │ Defined at kernel/rcu/Kconfig:96                                        │
> > > > > >   │ Selects: IRQ_WORK [=n]                                                  │
> > > > > >   │ Selected by [n]:                                                        │
> > > > > >   │   - BPF_SYSCALL [=n]                                                    │
> > > > > >   │   - RCU_SCALE_TEST [=n] && DEBUG_KERNEL [=y]                            │
> > > > > >   │   - RCU_TORTURE_TEST [=n] && DEBUG_KERNEL [=y]                          │
> > > > > >   │   - RCU_REF_SCALE_TEST [=n] && DEBUG_KERNEL [=y]
> > > > > >
> > > > > > Thanks!
> > > > > >
> > > > > > >
> > > > > > > Or turn on IRQ_WORK, for example, if you need to use BPF.
> > > > >
> > > > > Or do you already have TASKS_RCU_GENERIC deselected?
> > > > >
> > > >
> > > > No, this is selected. TASKS_RCU_GENERIC=y. because of PREEMPTION=y.
> > >
> > > OK, the patch shown below allows me to get TASKS_RCU_GENERIC=n even
> > > with PREEMPTION=y.  This might somehow subtly break tracing, but in
> > > that case further adjustments can be made.  Untested other than
> > > generating a few .config combinations.
> > >
> > > Thoughts?
> > >
> > >                                                         Thanx, Paul
> > >
> > > ------------------------------------------------------------------------
> > >
> > > diff --git a/arch/Kconfig b/arch/Kconfig
> > > index 678a80713b21..66c5b5543511 100644
> > > --- a/arch/Kconfig
> > > +++ b/arch/Kconfig
> > > @@ -38,6 +38,7 @@ config KPROBES
> > >         depends on MODULES
> > >         depends on HAVE_KPROBES
> > >         select KALLSYMS
> > > +       select TASKS_RCU if PREEMPTION
> > >         help
> > >           Kprobes allows you to trap at almost any kernel address and
> > >           execute a callback function.  register_kprobe() establishes
> > > diff --git a/kernel/rcu/Kconfig b/kernel/rcu/Kconfig
> > > index f559870fbf8b..4f665ae0cf55 100644
> > > --- a/kernel/rcu/Kconfig
> > > +++ b/kernel/rcu/Kconfig
> > > @@ -78,7 +78,8 @@ config TASKS_RCU_GENERIC
> > >           task-based RCU implementations.  Not for manual selection.
> > >
> > >  config TASKS_RCU
> > > -       def_bool PREEMPTION
> > > +       def_bool 0
> > > +       select IRQ_WORK
> > >         help
> > >           This option enables a task-based RCU implementation that uses
> > >           only voluntary context switch (not preemption!), idle, and
> > > diff --git a/kernel/trace/Kconfig b/kernel/trace/Kconfig
> > > index 752ed89a293b..a7aaf150b704 100644
> > > --- a/kernel/trace/Kconfig
> > > +++ b/kernel/trace/Kconfig
> > > @@ -127,6 +127,7 @@ config TRACING
> > >         select BINARY_PRINTF
> > >         select EVENT_TRACING
> > >         select TRACE_CLOCK
> > > +       select TASKS_RCU if PREEMPTION
> > >
> > >  config GENERIC_TRACER
> > >         bool
> > I apply above patch, and invoke
> > $make  ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
> > CC=aarch64-linux-gnu-gcc-10 tinyconfig
> > $make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
> > CC=aarch64-linux-gnu-gcc-10 -j 16
> > kernel build successful this time (without above patch, kernel build
> > will quit with undefined reference to `irq_work_queue'
> > Tested-by: Zhouyi Zhou<zhouzhouyi@gmail.com>
> 
> I will apply on my next rebase, thank you!
>

Works for configurations I use.

Reported-and-tested-by: Hyeonggon Yoo <42.hyeyoo@gmail.com>

Thanks!

> 							Thanx, Paul

-- 
Thank you, You are awesome!
Hyeonggon :-)

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2022-03-18 14:43 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-17 11:32 RCU: undefined reference to irq_work_queue Hyeonggon Yoo
2022-03-17 14:00 ` Paul E. McKenney
2022-03-17 15:24   ` Hyeonggon Yoo
2022-03-17 16:20     ` Paul E. McKenney
2022-03-17 16:45       ` Hyeonggon Yoo
2022-03-17 17:36         ` Paul E. McKenney
2022-03-17 20:26           ` Randy Dunlap
2022-03-17 20:29             ` Paul E. McKenney
2022-03-17 20:31               ` Randy Dunlap
2022-03-17 20:41           ` Zhouyi Zhou
2022-03-17 20:53             ` Paul E. McKenney
2022-03-18 14:42               ` Hyeonggon Yoo
2022-03-17 15:22 ` Zhouyi Zhou
2022-03-17 15:54   ` Hyeonggon Yoo

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.