# 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 UID16
	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"
	default y
	help
	This option controls whether tracing thread support is compiled
	into UML.  Normally, this should be set to Y.  If you intend to
	use only skas mode (and the host has the skas patch applied to it),
	then it is OK to say N here.

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.

config HOST_2G_2G
	bool "2G/2G host address space split"
	default n
	depends on MODE_TT
	help
	This is needed when the host on which you run has a 2G/2G memory
	split, instead of the customary 3G/1G.

	Note that to enable such a host
	configuration, which makes sense only in some cases, you need special
	host patches.

	So, if you do not know what to do here, say 'N'.

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"
	default y
	help
	This option controls whether skas (separate kernel address space)
	support is compiled in.  If you have applied the skas patch to the
	host, then you certainly want to say Y here (and consider saying N
	to CONFIG_MODE_TT).  Otherwise, it is safe to say Y.  Disabling this
	option will shrink the UML binary slightly.

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

	If you are actively using it, please report any problems, since it's
	getting fixed. In this moment, it is experimental on 2.6 (it works on
	2.4).

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"
	depends on !64BIT

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
	noticable lag.  If this is a problem, then disable this option.

endmenu

source "init/Kconfig"

source "net/Kconfig"

source "drivers/base/Kconfig"

source "arch/um/Kconfig.char"

source "drivers/block/Kconfig"

config NETDEVICES
	bool
	default NET

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"
