|  | # | 
|  | # 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" |