config DEFCONFIG_LIST
	string
	option defconfig_list
	default "arch/$ARCH/defconfig"

# UML uses the generic IRQ sugsystem
config GENERIC_HARDIRQS
	bool
	default y

config UML
	bool
	default y

config MMU
	bool
	default y

config NO_IOMEM
	def_bool y

mainmenu "Linux/Usermode Kernel Configuration"

config ISA
	bool

config SBUS
	bool

config PCI
	bool

config PCMCIA
	bool

# Yet to do!
config TRACE_IRQFLAGS_SUPPORT
	bool
	default n

config LOCKDEP_SUPPORT
	bool
	default y

config STACKTRACE_SUPPORT
	bool
	default n

config GENERIC_CALIBRATE_DELAY
	bool
	default y

config GENERIC_BUG
	bool
	default y
	depends on BUG

# Used in kernel/irq/manage.c and include/linux/irq.h
config IRQ_RELEASE_METHOD
	bool
	default y

menu "UML-specific options"

config MODE_TT
	bool "Tracing thread support (DEPRECATED)"
	default n
	depends on BROKEN
	help
	This option controls whether tracing thread support is compiled
	into UML. This option is largely obsolete, given that skas0 provides
	skas security and performance without needing to patch the host.
	It is safe to say 'N' here; saying 'Y' may cause additional problems
	with the resulting binary even if you run UML in SKAS mode, and running
	in TT mode is strongly *NOT RECOMMENDED*.

config STATIC_LINK
	bool "Force a static link"
	default n
	depends on !MODE_TT
	help
	If CONFIG_MODE_TT is disabled, then this option gives you the ability
	to force a static link of UML.  Normally, if only skas mode is built
	in to UML, it will be linked as a shared binary.  This is inconvenient
	for use in a chroot jail.  So, if you intend to run UML inside a
	chroot, and you disable CONFIG_MODE_TT, you probably want to say Y
	here.
	Additionally, this option enables using higher memory spaces (up to
	2.75G) for UML - disabling CONFIG_MODE_TT and enabling this option leads
	to best results for this.

config KERNEL_HALF_GIGS
	int "Kernel address space size (in .5G units)"
	default "1"
	depends on MODE_TT
	help
        This determines the amount of address space that UML will allocate for
        its own, measured in half Gigabyte units.  The default is 1.
        Change this only if you need to boot UML with an unusually large amount
        of physical memory.

config MODE_SKAS
	bool "Separate Kernel Address Space support" if MODE_TT
	default y
	help
	This option controls whether skas (separate kernel address space)
	support is compiled in.
	Unless you have specific needs to use TT mode (which applies almost only
	to developers), you should say Y here.
	SKAS mode will make use of the SKAS3 patch if it is applied on the host
	(and your UML will run in SKAS3 mode), but if no SKAS patch is applied
	on the host it will run in SKAS0 mode, which is anyway faster than TT
	mode.

source "arch/um/Kconfig.arch"
source "mm/Kconfig"

config LD_SCRIPT_STATIC
	bool
	default y
	depends on MODE_TT || STATIC_LINK

config LD_SCRIPT_DYN
	bool
	default y
	depends on !LD_SCRIPT_STATIC

config NET
	bool "Networking support"
	help
	Unless you really know what you are doing, you should say Y here.
	The reason is that some programs need kernel networking support even
	when running on a stand-alone machine that isn't connected to any
	other computer. If you are upgrading from an older kernel, you
	should consider updating your networking tools too because changes
	in the kernel and the tools often go hand in hand. The tools are
	contained in the package net-tools, the location and version number
	of which are given in <file:Documentation/Changes>.

	For a general introduction to Linux networking, it is highly
	recommended to read the NET-HOWTO, available from
	<http://www.tldp.org/docs.html#howto>.


source "fs/Kconfig.binfmt"

config HOSTFS
	tristate "Host filesystem"
	help
        While the User-Mode Linux port uses its own root file system for
        booting and normal file access, this module lets the UML user
        access files stored on the host.  It does not require any
        network connection between the Host and UML.  An example use of
        this might be:

        mount none /tmp/fromhost -t hostfs -o /tmp/umlshare

        where /tmp/fromhost is an empty directory inside UML and
        /tmp/umlshare is a directory on the host with files the UML user
        wishes to access.

        For more information, see
        <http://user-mode-linux.sourceforge.net/hostfs.html>.

        If you'd like to be able to work with files stored on the host,
        say Y or M here; otherwise say N.

config HPPFS
	tristate "HoneyPot ProcFS (EXPERIMENTAL)"
	depends on EXPERIMENTAL
	help
	hppfs (HoneyPot ProcFS) is a filesystem which allows UML /proc
	entries to be overridden, removed, or fabricated from the host.
	Its purpose is to allow a UML to appear to be a physical machine
	by removing or changing anything in /proc which gives away the
	identity of a UML.

	See <http://user-mode-linux.sf.net/hppfs.html> for more information.

	You only need this if you are setting up a UML honeypot.  Otherwise,
	it is safe to say 'N' here.

config MCONSOLE
	bool "Management console"
	default y
	help
        The user mode linux management console is a low-level interface to
        the kernel, somewhat like the i386 SysRq interface.  Since there is
        a full-blown operating system running under every user mode linux
        instance, there is much greater flexibility possible than with the
        SysRq mechanism.

        If you answer 'Y' to this option, to use this feature, you need the
        mconsole client (called uml_mconsole) which is present in CVS in
        2.4.5-9um and later (path /tools/mconsole), and is also in the
        distribution RPM package in 2.4.6 and later.

        It is safe to say 'Y' here.

config MAGIC_SYSRQ
	bool "Magic SysRq key"
	depends on MCONSOLE
	---help---
	If you say Y here, you will have some control over the system even
	if the system crashes for example during kernel debugging (e.g., you
	will be able to flush the buffer cache to disk, reboot the system
	immediately or dump some status information). A key for each of the
	possible requests is provided.

	This is the feature normally accomplished by pressing a key
	while holding SysRq (Alt+PrintScreen).

	On UML, this is accomplished by sending a "sysrq" command with
	mconsole, followed by the letter for the requested command.

	The keys are documented in <file:Documentation/sysrq.txt>. Don't say Y
	unless you really know what this hack does.

config SMP
	bool "Symmetric multi-processing support (EXPERIMENTAL)"
	default n
	#SMP_BROKEN is for x86_64.
	depends on MODE_TT && EXPERIMENTAL && (!SMP_BROKEN || (BROKEN && SMP_BROKEN))
	help
	This option enables UML SMP support.
	It is NOT related to having a real SMP box. Not directly, at least.

	UML implements virtual SMP by allowing as many processes to run
	simultaneously on the host as there are virtual processors configured.

	Obviously, if the host is a uniprocessor, those processes will
	timeshare, but, inside UML, will appear to be running simultaneously.
	If the host is a multiprocessor, then UML processes may run
	simultaneously, depending on the host scheduler.

	This, however, is supported only in TT mode. So, if you use the SKAS
	patch on your host, switching to TT mode and enabling SMP usually gives
	you worse performances.
	Also, since the support for SMP has been under-developed, there could
	be some bugs being exposed by enabling SMP.

	If you don't know what to do, say N.

config NR_CPUS
	int "Maximum number of CPUs (2-32)"
	range 2 32
	depends on SMP
	default "32"

config NEST_LEVEL
	int "Nesting level"
	default "0"
	help
        This is set to the number of layers of UMLs that this UML will be run
        in.  Normally, this is zero, meaning that it will run directly on the
        host.  Setting it to one will build a UML that can run inside a UML
        that is running on the host.  Generally, if you intend this UML to run
        inside another UML, set CONFIG_NEST_LEVEL to one more than the host
        UML.

        Note that if the hosting UML has its CONFIG_KERNEL_HALF_GIGS set to
        greater than one, then the guest UML should have its CONFIG_NEST_LEVEL
        set to the host's CONFIG_NEST_LEVEL + CONFIG_KERNEL_HALF_GIGS.
        Only change this if you are running nested UMLs.

config HIGHMEM
	bool "Highmem support (EXPERIMENTAL)"
	depends on !64BIT && EXPERIMENTAL
	default n
	help
	This was used to allow UML to run with big amounts of memory.
	Currently it is unstable, so if unsure say N.

	To use big amounts of memory, it is recommended to disable TT mode (i.e.
	CONFIG_MODE_TT) and enable static linking (i.e. CONFIG_STATIC_LINK) -
	this should allow the guest to use up to 2.75G of memory.

config KERNEL_STACK_ORDER
	int "Kernel stack size order"
	default 1 if 64BIT
	range 1 10 if 64BIT
	default 0 if !64BIT
	help
	This option determines the size of UML kernel stacks.  They will
	be 1 << order pages.  The default is OK unless you're running Valgrind
	on UML, in which case, set this to 3.

config UML_REAL_TIME_CLOCK
	bool "Real-time Clock"
	default y
	help
	This option makes UML time deltas match wall clock deltas.  This should
	normally be enabled.  The exception would be if you are debugging with
	UML and spend long times with UML stopped at a breakpoint.  In this
	case, when UML is restarted, it will call the timer enough times to make
	up for the time spent at the breakpoint.  This could result in a
	noticeable lag.  If this is a problem, then disable this option.

endmenu

source "init/Kconfig"

source "drivers/block/Kconfig"

source "arch/um/Kconfig.char"

source "drivers/base/Kconfig"

source "net/Kconfig"

source "arch/um/Kconfig.net"

source "drivers/net/Kconfig"

source "drivers/connector/Kconfig"

source "fs/Kconfig"

source "security/Kconfig"

source "crypto/Kconfig"

source "lib/Kconfig"

source "drivers/scsi/Kconfig"

source "drivers/md/Kconfig"

if BROKEN
	source "drivers/mtd/Kconfig"
endif

#This is just to shut up some Kconfig warnings, so no prompt.
config INPUT
	bool
	default n

source "arch/um/Kconfig.debug"
