#
# For a description of the syntax of this configuration file,
# see Linux's Documentation/kbuild/kconfig-language.txt.
#
mainmenu "Akaros/$SRCARCH Kernel Configuration"

# This is info, not a setable option.  Must make ARCH=arch to change.
config SRCARCH
	string
	option env="ARCH"

config 64BIT
	bool "64-bit kernel"
	default y
	help
		Say yes to build a 64-bit kernel.  Must be 'y' for x86.

menuconfig RUN_INIT_SCRIPT
	bool "Run init script after boot"
	default n
	help
		Run an init script after boot instead of dropping into the monitor

config INIT_SCRIPT_PATH_AND_ARGS
    depends on RUN_INIT_SCRIPT
    string "Path to init script, followed by its arguments."
    default /bin/init.sh
    help
		Path to the init script run at boot time, followed by a space separated
		list of arguments

source "kern/arch/$SRCARCH/Kconfig"

source "kern/src/net/Kconfig"

source "kern/drivers/Kconfig"

menu "Filesystems"

config KFS
	bool "KFS filesystem"
	default y
	help
		KFS is an initramfs bundled into the kernel, and contains your root
		filesystem.

config KFS_PATHS
	depends on KFS
	string "KFS/Initramfs paths"
	default kern/kfs
	help
		Space separated list of paths to directories to bundle into KFS.  This
		will be your root filesystem.

config KFS_CPIO_BIN
	depends on KFS
	string "KFS CPIO helper"
	default ""
	help
		This binary (relative to the root directory) will be run before
		bundling the KFS Paths into the CPIO.

config EXT2FS
	bool "Ext2 filesystem"
	default n
	help
		Build in support for ext2.  Extremely experimental, and only works with
		a block device image, which will be mounted at /mnt.  If you select
		this, you must specify a block device.

config EXT2_BDEV
	depends on EXT2FS
	string "Ext2 image file"
	default mnt/ext2fs.img
	help
		This file needs to be an ext2 image (file that looks like a block
		device).  You should be able to mount this file in your host OS.  It
		will be bundled into the kernel and mounted at /mnt.

endmenu

menu "Memory Management"

config PAGE_COLORING
	bool "Page coloring"
	default n
	help
		Turns on internal support for page coloring.  When turned off, the page
		allocator acts like there is only one color.  Hasn't been used in a few
		years.

config BOXBORO
	depends on PAGE_COLORING
	bool "Boxboro-specific page coloring"
	default n
	help
		Say 'n'.

endmenu

menu "Kernel Debugging"

menu "Per-cpu Tracers"

config TRACE_KMSGS
	bool "KMSG Tracing"
	default n
	help
		Turns on KMSG tracing, using the per-cpu ring buffer (holds about 256
		events).  You can access this from the monitor via "trace pcpui".  Turn
		this off for a slight performance improvement on every KMSG (and every
		MCP proc_yield).

config TRACE_LOCKS
	bool "Lock Tracing"
	depends on SPINLOCK_DEBUG
	default n
	help
		Turns on lock tracing, using the per-cpu ring buffer.  This records the
		a timestamp and lock address, in an over-write tracing style (meaning
		it'll clobber older events).  If you have locking issues, this may give
		you clues as to which locks were grabbed recently.

config TTRACE
	bool "Timed Tracing"
	default n
	help
		Enables on timestamp based thread tracing, using the per-cpu ring
		buffer.  This records a timestamp, type of tracing event,
		thread_id(gvdl?) and upto 6 uintptr_ts, in an over-write tracing style
		(meaning it'll clobber older events).  Always enables scheduling timed
		tracing.

config TTRACE_CV
	bool "Timed Trace Condition Vars"
	depends on TTRACE
	default n
	help
		Turn on timestamp based thread tracing recording the timestamp,
		condition waits and signals and underlying semaphore up/down event
		types thread_id(gvdl?) in the TTRACE buffer.

config TTRACE_PROCESS
	bool "Timed Trace Process spawn, exec and death"
	depends on TTRACE
	default n
	help
		Turn on timestamp based processtracing recording the timestamp,
		of interesting process related events such as proc creation,
                destruction and execing.

config TTRACE_RWLOCK
	bool "Timed Trace Readers/Writers locking"
	depends on TTRACE
	default n
	help
		Turn on timestamp based tracing recording timestamp and other
                data for reader/writer lock interactions.

config TTRACE_SEMAPHORES
	bool "Timed Trace Semaphores"
	depends on TTRACE
	default n
	help
		Turn on timestamp based thread tracing recording a timestamp, a
		semaphore up/down event type thread_id(gvdl?) in the TTRACE buffer.

endmenu

config DEVELOPMENT_ASSERTIONS
	bool "dasserts"
	default n
	help
		Turn on dassert() in code, dassert will compile to assert().

config SPINLOCK_DEBUG
	bool "Spinlock debugging"
	default n
	help
		Turns on debugging, which tracks the last time a lock was acquired and
		detects improper lock acquisition based on IRQ levels (e.g. using
		spin_lock() in IRQ context).  This will slow down all lock
		acquisitions.

config SEQLOCK_DEBUG
	bool "Seqlock debugging"
	default n
	help
		Provides asserts to detect seqlock errors.  This will allow a malicious
		userspace to trigger a panic in the kernel.

config SEMAPHORE_DEBUG
	bool "Semaphore debugging"
	default n
	help
		Turns on debugging, which tracks the last time and location that a
		semaphore was downed, and provides a linked list of all semaphores that
		have waiters.  This will slow down all semaphore ups and downs.

config SEM_SPINWAIT
	bool "Semaphore spinwaiting"
	default n
	help
		Turns on semaphore spinwaiting.  In lieu of intelligent Adaptive
		Mutexes, busy semaphores will just spin for a while before fully
		sleeping.

config SEM_SPINWAIT_NR_LOOPS
	int "Number of polls before sleeping"
	depends on SEM_SPINWAIT
	default 100
	help
		How many times to poll a busy semaphore before going to sleep.

config SEM_TRACE_BLOCKERS
	bool "Semaphore Blocker Tracing"
	default n
	help
		Drops a TRACEME whenever a semaphore would block (barring slight
		races).  To access the trace data, you'll need to use the opcontrols
		and process the data with op2.

config RESET_STACKS
	bool "Reset Stacks"
	default y
	help
		When idling, the kernel will reset the stack of its kernel thread to
		the top of the stack, abandoning its context.  This is useful so we do
		not run off the end of our stacks, but makes backtracing difficult.

config LARGE_KSTACKS
	bool "Large (two-page) Kernel Stacks"
	default y
	help
		Ideally, we'd like to use single-page stacks, which are easier on the
		memory allocator.  Some of the Plan 9 code hogs stack space, and we may
		run off the end of a single-page stack.

		Say 'y' to play it safe and use the larger, slower stacks.  Say 'n' for
		higher performance, and mention this setting if you have any weird
		crashes or panics.

config KTHREAD_POISON
	bool "Kthread Poison Canary"
	default n
	help
		Kthreads will use a bit of storage at the bottom of the stack to track
		the state of the kthread.  This is useful to catch various bugs with
		kthreading, such as launching the same kthread twice concurrently.

config DISABLE_SMT
	bool "Disables symmetric multithreading"
	default n
	help
		Disables hyperthreading by telling the kernel to never give out even
		numbered cores to MCPs.  This does not check to see if the threads are
		in fact siblings, or if the target machine is hyperthreaded.

config PRINTK_NO_BACKSPACE
	bool "Printk with no backspace"
	default n
	help
		One of the serial devices I was using a while back had issues printing
		backspaces.  This was an old hack to deal with that.

config SYSCALL_STRING_SAVING
	bool "Syscall string saving"
	default n
	help
		Kmallocs a small buffer for each syscall and attaches it to the
		kthread, which can be viewed when debugging semaphores.  Individual
		syscalls can save info in this buffer.

config BLOCK_EXTRAS
	bool "Block Extra Data"
	default y
	help
		Extends blocks to have a list of other memory blocks.  Useful for
		networking performance.  This is only an option while we debug the
		implementation.  Say y.  If you have networking bugs, try turning this
		off, and if that helps, tell someone.

endmenu

config VM
	bool "Virtual Machine support"
	default n
	help
		VM support -- not working! Based on KVM.

menuconfig NIX
	bool "NIX support"
	default n
	help
		NIX support -- Sort of working. You can start kernels that don't enable
		interrupts.

if NIX

config NIX_IMG_PADDR
	hex "Physical address for the NIX image"
	depends on NIX
	default 0x40000000
	help
		Physical address that the NIX device will allocate during
		initialization.

config NIX_IMG_SIZE
	hex "Size of the NIX image"
	depends on NIX
	default 0x40000000
	help
		Size in bytes of the NIX image.  Must be a power of two.

endif # NIX

menu "Misc/Old Options"

config ARSC_SERVER
	bool "Asynchronous remote syscalls"
	default n
	help
		Code to run a syscall-server on a core.  A process can submit syscalls
		and get the results asynchronously.  Hasn't been used in years.  Say
		'n' unless you want to play around.

# SPARC auto-selects this
config APPSERVER
	bool "Appserver"
	default n
	help
		Old school I/O was through a remote machine.  Not sure if anyone uses
		this anymore.

config SERIAL_IO
	bool "Serial IO"
	default n
	help
		Like the appserver, serial I/O was an old attempt to process I/O on a
		remote machine across the serial port.

config SINGLE_CORE
	bool "Single core"
	default n
	help
		Have the kernel boot only a single core.  Can be useful for debugging,
		but hasn't been used in years.

config BSD_ON_CORE0
	bool "BSD on core 0"
	default n
	help
		This was an old joke.  Say 'n', since we can't simply #include <bsd>.

endmenu

source "kern/lib/Kconfig"

source "kern/src/ktest/Kconfig"
