#
# 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_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

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 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

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.
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"
