# SPDX-License-Identifier: GPL-2.0-only
config PROC_FS
	bool "/proc file system support" if EXPERT
	default y
	help
	  This is a virtual file system providing information about the status
	  of the system. "Virtual" means that it doesn't take up any space on
	  your hard disk: the files are created on the fly by the kernel when
	  you try to access them. Also, you cannot read the files with older
	  version of the program less: you need to use more or cat.

	  It's totally cool; for example, "cat /proc/interrupts" gives
	  information about what the different IRQs are used for at the moment
	  (there is a small number of Interrupt ReQuest lines in your computer
	  that are used by the attached devices to gain the CPU's attention --
	  often a source of trouble if two devices are mistakenly configured
	  to use the same IRQ). The program procinfo to display some
	  information about your system gathered from the /proc file system.

	  Before you can use the /proc file system, it has to be mounted,
	  meaning it has to be given a location in the directory hierarchy.
	  That location should be /proc. A command such as "mount -t proc proc
	  /proc" or the equivalent line in /etc/fstab does the job.

	  The /proc file system is explained in the file
	  <file:Documentation/filesystems/proc.rst> and on the proc(5) manpage
	  ("man 5 proc").

	  This option will enlarge your kernel by about 67 KB. Several
	  programs depend on this, so everyone should say Y here.

config PROC_KCORE
	bool "/proc/kcore support" if !ARM
	depends on PROC_FS && MMU
	select VMCORE_INFO
	help
	  Provides a virtual ELF core file of the live kernel.  This can
	  be read with gdb and other ELF tools.  No modifications can be
	  made using this mechanism.

config PROC_VMCORE
	bool "/proc/vmcore support"
	depends on PROC_FS && CRASH_DUMP
	default y
	help
	  Exports the dump image of crashed kernel in ELF format.

config PROC_VMCORE_DEVICE_DUMP
	bool "Device Hardware/Firmware Log Collection"
	depends on PROC_VMCORE
	default n
	help
	  After kernel panic, device drivers can collect the device
	  specific snapshot of their hardware or firmware before the
	  underlying devices are initialized in crash recovery kernel.
	  Note that the device driver must be present in the crash
	  recovery kernel's initramfs to collect its underlying device
	  snapshot.

	  If you say Y here, the collected device dumps will be added
	  as ELF notes to /proc/vmcore. You can still disable device
	  dump using the kernel command line option 'novmcoredd'.

config NEED_PROC_VMCORE_DEVICE_RAM
	bool

config PROC_VMCORE_DEVICE_RAM
	def_bool y
	depends on PROC_VMCORE && NEED_PROC_VMCORE_DEVICE_RAM
	depends on VIRTIO_MEM
	help
	  If the elfcore hdr is allocated and prepared by the dump kernel
	  ("2nd kernel") instead of the crashed kernel, RAM provided by memory
	  devices such as virtio-mem will not be included in the dump
	  image, because only the device driver can properly detect them.

	  With this config enabled, these RAM ranges will be queried from the
	  device drivers once the device gets probed, so they can be included
	  in the crash dump.

	  Relevant architectures should select NEED_PROC_VMCORE_DEVICE_RAM.

config PROC_SYSCTL
	bool "Sysctl support (/proc/sys)" if EXPERT
	depends on PROC_FS
	select SYSCTL
	default y
	help
	  The sysctl interface provides a means of dynamically changing
	  certain kernel parameters and variables on the fly without requiring
	  a recompile of the kernel or reboot of the system.  The primary
	  interface is through /proc/sys.  If you say Y here a tree of
	  modifiable sysctl entries will be generated beneath the
	  /proc/sys directory. They are explained in the files
	  in <file:Documentation/admin-guide/sysctl/>.  Note that enabling this
	  option will enlarge the kernel by at least 8 KB.

	  As it is generally a good thing, you should say Y here unless
	  building a kernel for install/rescue disks or your system is very
	  limited in memory.

config PROC_PAGE_MONITOR
 	default y
	depends on PROC_FS && MMU
	bool "Enable /proc page monitoring" if EXPERT
 	help
	  Various /proc files exist to monitor process memory utilization:
	  /proc/pid/smaps, /proc/pid/clear_refs, /proc/pid/pagemap,
	  /proc/kpagecount, and /proc/kpageflags. Disabling these
	  interfaces will reduce the size of the kernel by approximately 4kb.

config PROC_CHILDREN
	bool "Include /proc/<pid>/task/<tid>/children file"
	depends on PROC_FS
	default n
	help
	  Provides a fast way to retrieve first level children pids of a task. See
	  <file:Documentation/filesystems/proc.rst> for more information.

	  Say Y if you are running any user-space software which takes benefit from
	  this interface. For example, rkt is such a piece of software.

config PROC_PID_ARCH_STATUS
	def_bool n
	depends on PROC_FS

config PROC_CPU_RESCTRL
	def_bool n
	depends on PROC_FS
