# # 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 choice COREALLOC_POLICY prompt "Core Allocation Policy" help Select a policy for allocating cores to a process upon request. All strategies first allocate cores from the set of provisioned cores for a process, but differ in how they select cores beyond this. config COREALLOC_FCFS bool "Simple FCFS" help Allocate cores to processes on a first-come-first-served basis. All cores are treated equally, and no topology information is used to try and optimize which cores are given to which processes upon request. endchoice 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 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 . endmenu source "kern/lib/Kconfig" source "kern/src/ktest/Kconfig"