# SPDX-License-Identifier: GPL-2.0-only
menuconfig SAMPLES
	bool "Sample kernel code"
	help
	  You can build and test sample kernel code here.

if SAMPLES

config SAMPLE_AUXDISPLAY
	bool "auxdisplay sample"
	depends on CC_CAN_LINK

config SAMPLE_TRACE_EVENTS
	tristate "Build trace_events examples -- loadable modules only"
	depends on EVENT_TRACING && m
	help
	  This builds the trace event example module.

config SAMPLE_TRACE_CUSTOM_EVENTS
	tristate "Build custom trace event example -- loadable modules only"
	depends on EVENT_TRACING && m
	help
	  This builds the custom trace event example module.

config SAMPLE_TRACE_PRINTK
        tristate "Build trace_printk module - tests various trace_printk formats"
	depends on EVENT_TRACING && m
	help
	 This builds a module that calls trace_printk() and can be used to
	 test various trace_printk() calls from a module.

config SAMPLE_FTRACE_DIRECT
	tristate "Build register_ftrace_direct() example"
	depends on DYNAMIC_FTRACE_WITH_DIRECT_CALLS && m
	depends on HAVE_SAMPLE_FTRACE_DIRECT
	help
	  This builds an ftrace direct function example
	  that hooks to wake_up_process and prints the parameters.

config SAMPLE_FTRACE_DIRECT_MULTI
	tristate "Build register_ftrace_direct() on multiple ips example"
	depends on DYNAMIC_FTRACE_WITH_DIRECT_CALLS && m
	depends on HAVE_SAMPLE_FTRACE_DIRECT_MULTI
	help
	  This builds an ftrace direct function example
	  that hooks to wake_up_process and schedule, and prints
	  the function addresses.

config SAMPLE_FTRACE_OPS
	tristate "Build custom ftrace ops example"
	depends on FUNCTION_TRACER
	help
	  This builds an ftrace ops example that hooks two functions and
	  measures the time taken to invoke one function a number of times.

config SAMPLE_TRACE_ARRAY
        tristate "Build sample module for kernel access to Ftrace instances"
	depends on EVENT_TRACING && m
	help
	 This builds a module that demonstrates the use of various APIs to
	 access Ftrace instances from within the kernel.

config SAMPLE_KOBJECT
	tristate "Build kobject examples"
	help
	  This config option will allow you to build a number of
	  different kobject sample modules showing how to use kobjects,
	  ksets, and ktypes properly.

	  If in doubt, say "N" here.

config SAMPLE_KPROBES
	tristate "Build kprobes examples -- loadable modules only"
	depends on KPROBES && m
	help
	  This build several kprobes example modules.

config SAMPLE_KRETPROBES
	tristate "Build kretprobes example -- loadable modules only"
	default m
	depends on SAMPLE_KPROBES && KRETPROBES

config SAMPLE_HW_BREAKPOINT
	tristate "Build kernel hardware breakpoint examples -- loadable module only"
	depends on HAVE_HW_BREAKPOINT && m
	help
	  This builds kernel hardware breakpoint example modules.

config SAMPLE_FPROBE
	tristate "Build fprobe examples -- loadable modules only"
	depends on FPROBE && m
	help
	  This builds a fprobe example module. This module has an option 'symbol'.
	  You can specify a probed symbol or symbols separated with ','.

config SAMPLE_KFIFO
	tristate "Build kfifo examples -- loadable modules only"
	depends on m
	help
	  This config option will allow you to build a number of
	  different kfifo sample modules showing how to use the
	  generic kfifo API.

	  If in doubt, say "N" here.

config SAMPLE_KDB
	tristate "Build kdb command example -- loadable modules only"
	depends on KGDB_KDB && m
	help
	  Build an example of how to dynamically add the hello
	  command to the kdb shell.

config SAMPLE_QMI_CLIENT
	tristate "Build qmi client sample -- loadable modules only"
	depends on m
	depends on ARCH_QCOM
	depends on NET
	select QCOM_QMI_HELPERS
	help
	  Build an QMI client sample driver, which demonstrates how to
	  communicate with a remote QRTR service, using QMI encoded messages.

config SAMPLE_RPMSG_CLIENT
	tristate "Build rpmsg client sample -- loadable modules only"
	depends on RPMSG && m
	help
	  Build an rpmsg client sample driver, which demonstrates how
	  to communicate with an AMP-configured remote processor over
	  the rpmsg bus.

config SAMPLE_LIVEPATCH
	tristate "Build live patching samples -- loadable modules only"
	depends on LIVEPATCH && m
	help
	  Build sample live patch demonstrations.

config SAMPLE_CONFIGFS
	tristate "Build configfs patching sample -- loadable modules only"
	depends on CONFIGFS_FS && m
	help
	  Builds a sample configfs interface.

config SAMPLE_CONNECTOR
	tristate "Build connector sample -- loadable modules only"
	depends on CONNECTOR && HEADERS_INSTALL && m
	help
	  When enabled, this builds both a sample kernel module for
	  the connector interface and a user space tool to communicate
	  with it.
	  See also Documentation/driver-api/connector.rst

config SAMPLE_FANOTIFY_ERROR
	bool "Build fanotify error monitoring sample"
	depends on FANOTIFY && CC_CAN_LINK && HEADERS_INSTALL
	help
	  When enabled, this builds an example code that uses the
	  FAN_FS_ERROR fanotify mechanism to monitor filesystem
	  errors.
	  See also Documentation/admin-guide/filesystem-monitoring.rst.

config SAMPLE_HIDRAW
	bool "hidraw sample"
	depends on CC_CAN_LINK && HEADERS_INSTALL

config SAMPLE_LANDLOCK
	bool "Landlock example"
	depends on CC_CAN_LINK && HEADERS_INSTALL
	help
	  Build a simple Landlock sandbox manager able to start a process
	  restricted by a user-defined filesystem access control policy.

config SAMPLE_PIDFD
	bool "pidfd sample"
	depends on CC_CAN_LINK && HEADERS_INSTALL

config SAMPLE_SECCOMP
	bool "Build seccomp sample code"
	depends on SECCOMP_FILTER && CC_CAN_LINK && HEADERS_INSTALL
	help
	  Build samples of seccomp filters using various methods of
	  BPF filter construction.

config SAMPLE_TIMER
	bool "Timer sample"
	depends on CC_CAN_LINK && HEADERS_INSTALL

config SAMPLE_TSM_MR
	tristate "TSM measurement sample"
	select TSM_MEASUREMENTS
	select VIRT_DRIVERS
	help
	  Build a sample module that emulates MRs (Measurement Registers) and
	  exposes them to user mode applications through the TSM sysfs
	  interface (/sys/class/misc/tsm_mr_sample/emulated_mr/).

	  The module name will be tsm-mr-sample when built as a module.

config SAMPLE_UHID
	bool "UHID sample"
	depends on CC_CAN_LINK && HEADERS_INSTALL
	help
	  Build UHID sample program.

config SAMPLE_VFIO_MDEV_MTTY
	tristate "Build VFIO mtty example mediated device sample code"
	depends on VFIO
	select VFIO_MDEV
	help
	  Build a virtual tty sample driver for use as a VFIO
	  mediated device

config SAMPLE_VFIO_MDEV_MDPY
	tristate "Build VFIO mdpy example mediated device sample code"
	depends on VFIO
	select VFIO_MDEV
	help
	  Build a virtual display sample driver for use as a VFIO
	  mediated device.  It is a simple framebuffer and supports
	  the region display interface (VFIO_GFX_PLANE_TYPE_REGION).

config SAMPLE_VFIO_MDEV_MDPY_FB
	tristate "Build VFIO mdpy example guest fbdev driver"
	depends on FB
	select FB_IOMEM_HELPERS
	help
	  Guest fbdev driver for the virtual display sample driver.

config SAMPLE_VFIO_MDEV_MBOCHS
	tristate "Build VFIO mbochs example mediated device sample code"
	depends on VFIO
	select VFIO_MDEV
	select DMA_SHARED_BUFFER
	help
	  Build a virtual display sample driver for use as a VFIO
	  mediated device.  It supports the region display interface
	  (VFIO_GFX_PLANE_TYPE_DMABUF).
	  Emulate enough of qemu stdvga to make bochs-drm.ko happy.
	  That is basically the vram memory bar and the bochs dispi
	  interface vbe registers in the mmio register bar.
	  Specifically it does *not* include any legacy vga stuff.
	  Device looks a lot like "qemu -device secondary-vga".

config SAMPLE_ANDROID_BINDERFS
	bool "Build Android binderfs example"
	depends on CC_CAN_LINK && HEADERS_INSTALL
	help
	  Builds a sample program to illustrate the use of the Android binderfs
	  filesystem.

config SAMPLE_VFS
	bool "Build example programs that use new VFS system calls"
	depends on CC_CAN_LINK && HEADERS_INSTALL
	help
	  Build example userspace programs that use new VFS system calls such
	  as mount API and statx().  Note that this is restricted to the x86
	  arch whilst it accesses system calls that aren't yet in all arches.

config SAMPLE_INTEL_MEI
	bool "Build example program working with intel mei driver"
	depends on INTEL_MEI
	depends on CC_CAN_LINK && HEADERS_INSTALL
	help
	  Build a sample program to work with mei device.

config SAMPLE_TPS6594_PFSM
	bool "Build example program working with TPS6594 PFSM driver"
	depends on HEADERS_INSTALL
	depends on CC_CAN_LINK
	help
	  Build a sample program to work with PFSM devices.

config SAMPLE_WATCHDOG
	bool "watchdog sample"
	depends on CC_CAN_LINK

config SAMPLE_WATCH_QUEUE
	bool "Build example watch_queue notification API consumer"
	depends on CC_CAN_LINK && HEADERS_INSTALL
	help
	  Build example userspace program to use the new mount_notify(),
	  sb_notify() syscalls and the KEYCTL_WATCH_KEY keyctl() function.

config SAMPLE_CORESIGHT_SYSCFG
	tristate "Build example loadable module for CoreSight config"
	depends on CORESIGHT && m
	help
	  Build an example loadable module that adds new CoreSight features
	  and configuration using the CoreSight system configuration API.
	  This demonstrates how a user may create their own CoreSight
	  configurations and easily load them into the system at runtime.

config SAMPLE_KMEMLEAK
        tristate "Simple test for the kernel memory leak detector"
        depends on DEBUG_KMEMLEAK && m
        help
          Build a sample program which have explicitly leaks memory to test
          kmemleak

config SAMPLE_CGROUP
	bool "Build cgroup sample code"
	depends on CGROUPS && CC_CAN_LINK && HEADERS_INSTALL
	help
	  Build samples that demonstrate the usage of the cgroup API.

config SAMPLE_CHECK_EXEC
	bool "Exec secure bits examples"
	depends on CC_CAN_LINK && HEADERS_INSTALL
	help
	  Build a tool to easily configure SECBIT_EXEC_RESTRICT_FILE and
	  SECBIT_EXEC_DENY_INTERACTIVE, and a simple script interpreter to
	  demonstrate how they should be used with execveat(2) +
	  AT_EXECVE_CHECK.

config SAMPLE_HUNG_TASK
	tristate "Hung task detector test code"
	depends on DETECT_HUNG_TASK && DEBUG_FS
	help
	  Build a module that provides debugfs files (e.g., mutex, semaphore,
	  rw_semaphore_read, rw_semaphore_write) under <debugfs>/hung_task.
	  Reading these files with multiple processes triggers hung task
	  detection by holding locks for a long time (256 seconds).

source "samples/rust/Kconfig"

source "samples/damon/Kconfig"

endif # SAMPLES

config HAVE_SAMPLE_FTRACE_DIRECT
	bool

config HAVE_SAMPLE_FTRACE_DIRECT_MULTI
	bool
