#
# For a description of the syntax of this configuration file,
# see Documentation/kbuild/kconfig-language.txt.
#

config SCHED_MC
	def_bool y
	depends on SMP

config MMU
	def_bool y

config ZONE_DMA
	def_bool y
	depends on 64BIT

config LOCKDEP_SUPPORT
	def_bool y

config STACKTRACE_SUPPORT
	def_bool y

config HAVE_LATENCYTOP_SUPPORT
	def_bool y

config RWSEM_GENERIC_SPINLOCK
	bool

config RWSEM_XCHGADD_ALGORITHM
	def_bool y

config ARCH_HAS_ILOG2_U32
	bool
	default n

config ARCH_HAS_ILOG2_U64
	bool
	default n

config GENERIC_HWEIGHT
	def_bool y

config GENERIC_TIME
	def_bool y

config GENERIC_TIME_VSYSCALL
	def_bool y

config GENERIC_CLOCKEVENTS
	def_bool y

config GENERIC_BUG
	bool
	depends on BUG
	default y

config NO_IOMEM
	def_bool y

config NO_DMA
	def_bool y

config GENERIC_LOCKBREAK
	bool
	default y
	depends on SMP && PREEMPT

config PGSTE
	bool
	default y if KVM

config VIRT_CPU_ACCOUNTING
	def_bool y

config ARCH_SUPPORTS_DEBUG_PAGEALLOC
	def_bool y

mainmenu "Linux Kernel Configuration"

config S390
	def_bool y
	select USE_GENERIC_SMP_HELPERS if SMP
	select HAVE_SYSCALL_WRAPPERS
	select HAVE_FUNCTION_TRACER
	select HAVE_FUNCTION_TRACE_MCOUNT_TEST
	select HAVE_FTRACE_MCOUNT_RECORD
	select HAVE_FTRACE_SYSCALLS
	select HAVE_DYNAMIC_FTRACE
	select HAVE_FUNCTION_GRAPH_TRACER
	select HAVE_DEFAULT_NO_SPIN_MUTEXES
	select HAVE_OPROFILE
	select HAVE_KPROBES
	select HAVE_KRETPROBES
	select HAVE_KVM if 64BIT
	select HAVE_ARCH_TRACEHOOK
	select INIT_ALL_POSSIBLE
	select HAVE_PERF_COUNTERS
	select GENERIC_ATOMIC64 if !64BIT

config SCHED_OMIT_FRAME_POINTER
	bool
	default y

source "init/Kconfig"

source "kernel/Kconfig.freezer"

menu "Base setup"

comment "Processor type and features"

source "kernel/time/Kconfig"

config 64BIT
	bool "64 bit kernel"
	help
	  Select this option if you have a 64 bit IBM zSeries machine
	  and want to use the 64 bit addressing mode.

config 32BIT
	bool
	default y if !64BIT

config KTIME_SCALAR
	def_bool 32BIT

config SMP
	bool "Symmetric multi-processing support"
	---help---
	  This enables support for systems with more than one CPU. If you have
	  a system with only one CPU, like most personal computers, say N. If
	  you have a system with more than one CPU, say Y.

	  If you say N here, the kernel will run on single and multiprocessor
	  machines, but will use only one CPU of a multiprocessor machine. If
	  you say Y here, the kernel will run on many, but not all,
	  singleprocessor machines. On a singleprocessor machine, the kernel
	  will run faster if you say N here.

	  See also the SMP-HOWTO available at
	  <http://www.tldp.org/docs.html#howto>.

	  Even if you don't know what to do here, say Y.

config NR_CPUS
	int "Maximum number of CPUs (2-64)"
	range 2 64
	depends on SMP
	default "32" if !64BIT
	default "64" if 64BIT
	help
	  This allows you to specify the maximum number of CPUs which this
	  kernel will support.  The maximum supported value is 64 and the
	  minimum value which makes sense is 2.

	  This is purely to save memory - each supported CPU adds
	  approximately sixteen kilobytes to the kernel image.

config HOTPLUG_CPU
	bool "Support for hot-pluggable CPUs"
	depends on SMP
	select HOTPLUG
	default n
	help
	  Say Y here to be able to turn CPUs off and on. CPUs
	  can be controlled through /sys/devices/system/cpu/cpu#.
	  Say N if you want to disable CPU hotplug.

config MATHEMU
	bool "IEEE FPU emulation"
	depends on MARCH_G5
	help
	  This option is required for IEEE compliant floating point arithmetic
	  on older S/390 machines. Say Y unless you know your machine doesn't
	  need this.

config COMPAT
	bool "Kernel support for 31 bit emulation"
	depends on 64BIT
	select COMPAT_BINFMT_ELF
	help
	  Select this option if you want to enable your system kernel to
	  handle system-calls from ELF binaries for 31 bit ESA.  This option
	  (and some other stuff like libraries and such) is needed for
	  executing 31 bit applications.  It is safe to say "Y".

config SYSVIPC_COMPAT
	bool
	depends on COMPAT && SYSVIPC
	default y

config AUDIT_ARCH
	bool
	default y

config S390_SWITCH_AMODE
	bool "Switch kernel/user addressing modes"
	help
	  This option allows to switch the addressing modes of kernel and user
	  space. The kernel parameter switch_amode=on will enable this feature,
	  default is disabled. Enabling this (via kernel parameter) on machines
	  earlier than IBM System z9-109 EC/BC will reduce system performance.

	  Note that this option will also be selected by selecting the execute
	  protection option below. Enabling the execute protection via the
	  noexec kernel parameter will also switch the addressing modes,
	  independent of the switch_amode kernel parameter.


config S390_EXEC_PROTECT
	bool "Data execute protection"
	select S390_SWITCH_AMODE
	help
	  This option allows to enable a buffer overflow protection for user
	  space programs and it also selects the addressing mode option above.
	  The kernel parameter noexec=on will enable this feature and also
	  switch the addressing modes, default is disabled. Enabling this (via
	  kernel parameter) on machines earlier than IBM System z9-109 EC/BC
	  will reduce system performance.

comment "Code generation options"

choice
	prompt "Processor type"
	default MARCH_G5

config MARCH_G5
	bool "S/390 model G5 and G6"
	depends on !64BIT
	help
	  Select this to build a 31 bit kernel that works
	  on all S/390 and zSeries machines.

config MARCH_Z900
	bool "IBM eServer zSeries model z800 and z900"
	help
	  Select this to optimize for zSeries machines. This
	  will enable some optimizations that are not available
	  on older 31 bit only CPUs.

config MARCH_Z990
	bool "IBM eServer zSeries model z890 and z990"
	help
	  Select this enable optimizations for model z890/z990.
	  This will be slightly faster but does not work on
	  older machines such as the z900.

config MARCH_Z9_109
	bool "IBM System z9"
	help
	  Select this to enable optimizations for IBM System z9-109, IBM
	  System z9 Enterprise Class (z9 EC), and IBM System z9 Business
	  Class (z9 BC). The kernel will be slightly faster but will not
	  work on older machines such as the z990, z890, z900, and z800.

config MARCH_Z10
	bool "IBM System z10"
	help
	  Select this to enable optimizations for IBM System z10. The
	  kernel will be slightly faster but will not work on older
	  machines such as the z990, z890, z900, z800, z9-109, z9-ec
	  and z9-bc.

endchoice

config PACK_STACK
	bool "Pack kernel stack"
	help
	  This option enables the compiler option -mkernel-backchain if it
	  is available. If the option is available the compiler supports
	  the new stack layout which dramatically reduces the minimum stack
	  frame size. With an old compiler a non-leaf function needs a
	  minimum of 96 bytes on 31 bit and 160 bytes on 64 bit. With
	  -mkernel-backchain the minimum size drops to 16 byte on 31 bit
	  and 24 byte on 64 bit.

	  Say Y if you are unsure.

config SMALL_STACK
	bool "Use 8kb for kernel stack instead of 16kb"
	depends on PACK_STACK && 64BIT && !LOCKDEP
	help
	  If you say Y here and the compiler supports the -mkernel-backchain
	  option the kernel will use a smaller kernel stack size. The reduced
	  size is 8kb instead of 16kb. This allows to run more threads on a
	  system and reduces the pressure on the memory management for higher
	  order page allocations.

	  Say N if you are unsure.

config CHECK_STACK
	bool "Detect kernel stack overflow"
	help
	  This option enables the compiler option -mstack-guard and
	  -mstack-size if they are available. If the compiler supports them
	  it will emit additional code to each function prolog to trigger
	  an illegal operation if the kernel stack is about to overflow.

	  Say N if you are unsure.

config STACK_GUARD
	int "Size of the guard area (128-1024)"
	range 128 1024
	depends on CHECK_STACK
	default "256"
	help
	  This allows you to specify the size of the guard area at the lower
	  end of the kernel stack. If the kernel stack points into the guard
	  area on function entry an illegal operation is triggered. The size
	  needs to be a power of 2. Please keep in mind that the size of an
	  interrupt frame is 184 bytes for 31 bit and 328 bytes on 64 bit.
	  The minimum size for the stack guard should be 256 for 31 bit and
	  512 for 64 bit.

config WARN_STACK
	bool "Emit compiler warnings for function with broken stack usage"
	help
	  This option enables the compiler options -mwarn-framesize and
	  -mwarn-dynamicstack. If the compiler supports these options it
	  will generate warnings for function which either use alloca or
	  create a stack frame bigger than CONFIG_WARN_STACK_SIZE.

	  Say N if you are unsure.

config WARN_STACK_SIZE
	int "Maximum frame size considered safe (128-2048)"
	range 128 2048
	depends on WARN_STACK
	default "2048"
	help
	  This allows you to specify the maximum frame size a function may
	  have without the compiler complaining about it.

config ARCH_POPULATES_NODE_MAP
	def_bool y

comment "Kernel preemption"

source "kernel/Kconfig.preempt"

config ARCH_SPARSEMEM_ENABLE
	def_bool y
	select SPARSEMEM_VMEMMAP_ENABLE
	select SPARSEMEM_VMEMMAP
	select SPARSEMEM_STATIC if !64BIT

config ARCH_SPARSEMEM_DEFAULT
	def_bool y

config ARCH_SELECT_MEMORY_MODEL
       def_bool y

config ARCH_ENABLE_MEMORY_HOTPLUG
	def_bool y
	depends on SPARSEMEM

config ARCH_ENABLE_MEMORY_HOTREMOVE
	def_bool y

config ARCH_HIBERNATION_POSSIBLE
       def_bool y if 64BIT

source "mm/Kconfig"

comment "I/O subsystem configuration"

config QDIO
	tristate "QDIO support"
	---help---
	  This driver provides the Queued Direct I/O base support for
	  IBM System z.

	  To compile this driver as a module, choose M here: the
	  module will be called qdio.

	  If unsure, say Y.

config CHSC_SCH
	tristate "Support for CHSC subchannels"
	help
	  This driver allows usage of CHSC subchannels. A CHSC subchannel
	  is usually present on LPAR only.
	  The driver creates a device /dev/chsc, which may be used to
	  obtain I/O configuration information about the machine and
	  to issue asynchronous chsc commands (DANGEROUS).
	  You will usually only want to use this interface on a special
	  LPAR designated for system management.

	  To compile this driver as a module, choose M here: the
	  module will be called chsc_sch.

	  If unsure, say N.

comment "Misc"

config IPL
	bool "Builtin IPL record support"
	help
	  If you want to use the produced kernel to IPL directly from a
	  device, you have to merge a bootsector specific to the device
	  into the first bytes of the kernel. You will have to select the
	  IPL device.

choice
	prompt "IPL method generated into head.S"
	depends on IPL
	default IPL_VM
	help
	  Select "tape" if you want to IPL the image from a Tape.

	  Select "vm_reader" if you are running under VM/ESA and want
	  to IPL the image from the emulated card reader.

config IPL_TAPE
	bool "tape"

config IPL_VM
	bool "vm_reader"

endchoice

source "fs/Kconfig.binfmt"

config FORCE_MAX_ZONEORDER
	int
	default "9"

config PROCESS_DEBUG
	bool "Show crashed user process info"
	help
	  Say Y to print all process fault locations to the console.  This is
	  a debugging option; you probably do not want to set it unless you
	  are an S390 port maintainer.

config PFAULT
	bool "Pseudo page fault support"
	help
	  Select this option, if you want to use PFAULT pseudo page fault
	  handling under VM. If running native or in LPAR, this option
	  has no effect. If your VM does not support PFAULT, PAGEEX
	  pseudo page fault handling will be used.
	  Note that VM 4.2 supports PFAULT but has a bug in its
	  implementation that causes some problems.
	  Everybody who wants to run Linux under VM != VM4.2 should select
	  this option.

config SHARED_KERNEL
	bool "VM shared kernel support"
	help
	  Select this option, if you want to share the text segment of the
	  Linux kernel between different VM guests. This reduces memory
	  usage with lots of guests but greatly increases kernel size.
	  Also if a kernel was IPL'ed from a shared segment the kexec system
	  call will not work.
	  You should only select this option if you know what you are
	  doing and want to exploit this feature.

config CMM
	tristate "Cooperative memory management"
	help
	  Select this option, if you want to enable the kernel interface
	  to reduce the memory size of the system. This is accomplished
	  by allocating pages of memory and put them "on hold". This only
	  makes sense for a system running under VM where the unused pages
	  will be reused by VM for other guest systems. The interface
	  allows an external monitor to balance memory of many systems.
	  Everybody who wants to run Linux under VM should select this
	  option.

config CMM_PROC
	bool "/proc interface to cooperative memory management"
	depends on CMM
	help
	  Select this option to enable the /proc interface to the
	  cooperative memory management.

config CMM_IUCV
	bool "IUCV special message interface to cooperative memory management"
	depends on CMM && (SMSGIUCV=y || CMM=SMSGIUCV)
	help
	  Select this option to enable the special message interface to
	  the cooperative memory management.

config PAGE_STATES
	bool "Unused page notification"
	help
	  This enables the notification of unused pages to the
	  hypervisor. The ESSA instruction is used to do the states
	  changes between a page that has content and the unused state.

config APPLDATA_BASE
	bool "Linux - VM Monitor Stream, base infrastructure"
	depends on PROC_FS
	help
	  This provides a kernel interface for creating and updating z/VM APPLDATA
	  monitor records. The monitor records are updated at certain time
	  intervals, once the timer is started.
	  Writing 1 or 0 to /proc/appldata/timer starts(1) or stops(0) the timer,
	  i.e. enables or disables monitoring on the Linux side.
	  A custom interval value (in seconds) can be written to
	  /proc/appldata/interval.

	  Defaults are 60 seconds interval and timer off.
	  The /proc entries can also be read from, showing the current settings.

config APPLDATA_MEM
	tristate "Monitor memory management statistics"
	depends on APPLDATA_BASE && VM_EVENT_COUNTERS
	help
	  This provides memory management related data to the Linux - VM Monitor
	  Stream, like paging/swapping rate, memory utilisation, etc.
	  Writing 1 or 0 to /proc/appldata/memory creates(1) or removes(0) a z/VM
	  APPLDATA monitor record, i.e. enables or disables monitoring this record
	  on the z/VM side.

	  Default is disabled.
	  The /proc entry can also be read from, showing the current settings.

	  This can also be compiled as a module, which will be called
	  appldata_mem.o.

config APPLDATA_OS
	tristate "Monitor OS statistics"
	depends on APPLDATA_BASE
	help
	  This provides OS related data to the Linux - VM Monitor Stream, like
	  CPU utilisation, etc.
	  Writing 1 or 0 to /proc/appldata/os creates(1) or removes(0) a z/VM
	  APPLDATA monitor record, i.e. enables or disables monitoring this record
	  on the z/VM side.

	  Default is disabled.
	  This can also be compiled as a module, which will be called
	  appldata_os.o.

config APPLDATA_NET_SUM
	tristate "Monitor overall network statistics"
	depends on APPLDATA_BASE && NET
	help
	  This provides network related data to the Linux - VM Monitor Stream,
	  currently there is only a total sum of network I/O statistics, no
	  per-interface data.
	  Writing 1 or 0 to /proc/appldata/net_sum creates(1) or removes(0) a z/VM
	  APPLDATA monitor record, i.e. enables or disables monitoring this record
	  on the z/VM side.

	  Default is disabled.
	  This can also be compiled as a module, which will be called
	  appldata_net_sum.o.

source kernel/Kconfig.hz

config S390_HYPFS_FS
	bool "s390 hypervisor file system support"
	select SYS_HYPERVISOR
	default y
	help
	  This is a virtual file system intended to provide accounting
	  information in an s390 hypervisor environment.

config KEXEC
	bool "kexec system call"
	help
	  kexec is a system call that implements the ability to shutdown your
	  current kernel, and to start another kernel.  It is like a reboot
	  but is independent of hardware/microcode support.

config ZFCPDUMP
	bool "zfcpdump support"
	select SMP
	default n
	help
	  Select this option if you want to build an zfcpdump enabled kernel.
	  Refer to <file:Documentation/s390/zfcpdump.txt> for more details on this.

config S390_GUEST
bool "s390 guest support for KVM (EXPERIMENTAL)"
	depends on 64BIT && EXPERIMENTAL
	select VIRTIO
	select VIRTIO_RING
	select VIRTIO_CONSOLE
	help
	  Select this option if you want to run the kernel as a guest under
	  the KVM hypervisor. This will add detection for KVM as well  as a
	  virtio transport. If KVM is detected, the virtio console will be
	  the default console.

config SECCOMP
	bool "Enable seccomp to safely compute untrusted bytecode"
	depends on PROC_FS
	default y
	help
	  This kernel feature is useful for number crunching applications
	  that may need to compute untrusted bytecode during their
	  execution. By using pipes or other transports made available to
	  the process as file descriptors supporting the read/write
	  syscalls, it's possible to isolate those applications in
	  their own address space using seccomp. Once seccomp is
	  enabled via /proc/<pid>/seccomp, it cannot be disabled
	  and the task is only allowed to execute a few safe syscalls
	  defined by each seccomp mode.

	  If unsure, say Y.

endmenu

menu "Power Management"

source "kernel/power/Kconfig"

endmenu

source "net/Kconfig"

config PCMCIA
	def_bool n

config CCW
	def_bool y

source "drivers/Kconfig"

source "fs/Kconfig"

source "arch/s390/Kconfig.debug"

source "security/Kconfig"

source "crypto/Kconfig"

source "lib/Kconfig"

source "arch/s390/kvm/Kconfig"
