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

config UML
	bool
	default y

# XXX: does UM have a mmu/swap?
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 RWSEM_GENERIC_SPINLOCK
	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 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)"
	depends on BROKEN
	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 ask for it to be fixed. In this
	moment, it does not work on 2.6 (it works somehow 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 HOST_2G_2G
	bool "2G/2G host address space split"
	default n
	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 SMP
	bool "Symmetric multi-processing support (EXPERIMENTAL)"
	default n
	depends on MODE_TT && EXPERIMENTAL
	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 KERNEL_HALF_GIGS
	int "Kernel address space size (in .5G units)"
	default "1"
	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 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 "drivers/base/Kconfig"

source "arch/um/Kconfig_char"

source "drivers/block/Kconfig"

config NETDEVICES
	bool
	default NET

source "arch/um/Kconfig_net"

source "net/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"
