#
# For a description of the syntax of this configuration file,
-# see Documentation/kbuild/kconfig-language.txt.
+# see Linux's Documentation/kbuild/kconfig-language.txt.
#
-mainmenu "Akaros/$ARCH $KERNELVERSION Kernel Configuration"
+mainmenu "Akaros/$SRCARCH Kernel Configuration"
+# This is info, not a setable option. Must make ARCH=arch to change.
config SRCARCH
string
option env="ARCH"
-#source "arch/$SRCARCH/Kconfig"
+config 64BIT
+ bool "64-bit kernel"
+ default n
+ help
+ Say yes to build a 64-bit kernel, amd64 / x86_64, riscv64, etc.
+
+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.
+
+endmenu
+
+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 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.
+
+
+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/src/ktest/Kconfig"