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

config UML
	bool
	default y

config MMU
	bool
	default 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 y

config GENERIC_CALIBRATE_DELAY
	bool
	default y

# 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
	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 2
	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"

menu "SCSI support"
depends on BROKEN

config SCSI
	tristate "SCSI support"

# This gives us free_dma, which scsi.c wants.
config GENERIC_ISA_DMA
	bool
	depends on SCSI
	default y

source "arch/um/Kconfig.scsi"

endmenu

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"
