Serialize console prints with the print_lock
[akaros.git] / Kconfig
1 #
2 # For a description of the syntax of this configuration file,
3 # see Linux's Documentation/kbuild/kconfig-language.txt.
4 #
5 mainmenu "Akaros/$SRCARCH Kernel Configuration"
6
7 # This is info, not a setable option.  Must make ARCH=arch to change.
8 config SRCARCH
9         string
10         option env="ARCH"
11
12 config 64BIT
13         bool "64-bit kernel"
14         default y
15         help
16                 Say yes to build a 64-bit kernel.  Must be 'y' for x86.
17
18 menuconfig RUN_INIT_SCRIPT
19         bool "Run init script after boot"
20         default n
21         help
22                 Run an init script after boot instead of dropping into the monitor
23
24 config INIT_SCRIPT_PATH_AND_ARGS
25     depends on RUN_INIT_SCRIPT
26     string "Path to init script, followed by its arguments."
27     default /bin/init.sh
28     help
29                 Path to the init script run at boot time, followed by a space separated
30                 list of arguments
31
32 source "kern/arch/$SRCARCH/Kconfig"
33
34 source "kern/src/net/Kconfig"
35
36 source "kern/drivers/Kconfig"
37
38 menu "Filesystems"
39
40 config KFS
41         bool "KFS filesystem"
42         default y
43         help
44                 KFS is an initramfs bundled into the kernel, and contains your root
45                 filesystem.
46
47 config KFS_PATHS
48         depends on KFS
49         string "KFS/Initramfs paths"
50         default kern/kfs
51         help
52                 Space separated list of paths to directories to bundle into KFS.  This
53                 will be your root filesystem.
54
55 config KFS_CPIO_BIN
56         depends on KFS
57         string "KFS CPIO helper"
58         default ""
59         help
60                 This binary (relative to the root directory) will be run before
61                 bundling the KFS Paths into the CPIO.
62
63 endmenu
64
65 choice COREALLOC_POLICY
66         prompt "Core Allocation Policy"
67         help
68                 Select a policy for allocating cores to a process upon request.  All
69                 strategies first allocate cores from the set of provisioned cores for a
70                 process, but differ in how they select cores beyond this.
71
72 config COREALLOC_FCFS
73         bool "Simple FCFS"
74         help
75                 Allocate cores to processes on a first-come-first-served basis. All
76                 cores are treated equally, and no topology information is used to try
77                 and optimize which cores are given to which processes upon request.
78
79 config COREALLOC_PACKED
80         bool "Packed Topology"
81         help
82                 Allocate cores to a process based on a topology-aware algorithm that
83                 tries to pack allocated cores as close together as possible.  It first
84                 tries to pair new cores with their hyper-threaded pair, then keep them
85                 on the same socket, then the same numa domain.
86
87 endchoice
88
89 menu "Kernel Debugging"
90
91 menu "Per-cpu Tracers"
92
93 config TRACE_KMSGS
94         bool "KMSG Tracing"
95         default n
96         help
97                 Turns on KMSG tracing, using the per-cpu ring buffer (holds about 256
98                 events).  You can access this from the monitor via "trace pcpui".  Turn
99                 this off for a slight performance improvement on every KMSG (and every
100                 MCP proc_yield).
101
102 config TRACE_LOCKS
103         bool "Lock Tracing"
104         depends on SPINLOCK_DEBUG
105         default n
106         help
107                 Turns on lock tracing, using the per-cpu ring buffer.  This records the
108                 a timestamp and lock address, in an over-write tracing style (meaning
109                 it'll clobber older events).  If you have locking issues, this may give
110                 you clues as to which locks were grabbed recently.
111
112 endmenu
113
114 config DEVELOPMENT_ASSERTIONS
115         bool "dasserts"
116         default n
117         help
118                 Turn on dassert() in code, dassert will compile to assert().
119
120 config SPINLOCK_DEBUG
121         bool "Spinlock debugging"
122         default n
123         help
124                 Turns on debugging, which tracks the last time a lock was acquired and
125                 detects improper lock acquisition based on IRQ levels (e.g. using
126                 spin_lock() in IRQ context).  This will slow down all lock
127                 acquisitions.
128
129 config SEQLOCK_DEBUG
130         bool "Seqlock debugging"
131         default n
132         help
133                 Provides asserts to detect seqlock errors.  This will allow a malicious
134                 userspace to trigger a panic in the kernel.
135
136 config SEMAPHORE_DEBUG
137         bool "Semaphore debugging"
138         default n
139         help
140                 Turns on debugging, which tracks the last time and location that a
141                 semaphore was downed, and provides a linked list of all semaphores that
142                 have waiters.  This will slow down all semaphore ups and downs.
143
144 config SEM_SPINWAIT
145         bool "Semaphore spinwaiting"
146         default n
147         help
148                 Turns on semaphore spinwaiting.  In lieu of intelligent Adaptive
149                 Mutexes, busy semaphores will just spin for a while before fully
150                 sleeping.
151
152 config SEM_SPINWAIT_NR_LOOPS
153         int "Number of polls before sleeping"
154         depends on SEM_SPINWAIT
155         default 100
156         help
157                 How many times to poll a busy semaphore before going to sleep.
158
159 config LARGE_KSTACKS
160         bool "Large (two-page) Kernel Stacks"
161         default y
162         help
163                 Ideally, we'd like to use single-page stacks, which are easier on the
164                 memory allocator.  Some of the Plan 9 code hogs stack space, and we may
165                 run off the end of a single-page stack.
166
167                 Say 'y' to play it safe and use the larger, slower stacks.  Say 'n' for
168                 higher performance, and mention this setting if you have any weird
169                 crashes or panics.
170
171 config DISABLE_SMT
172         bool "Disables symmetric multithreading"
173         default n
174         help
175                 Disables hyperthreading by telling the kernel to never give out even
176                 numbered cores to MCPs.  This does not check to see if the threads are
177                 in fact siblings, or if the target machine is hyperthreaded.
178
179 config PRINTK_NO_BACKSPACE
180         bool "Printk with no backspace"
181         default n
182         help
183                 One of the serial devices I was using a while back had issues printing
184                 backspaces.  This was an old hack to deal with that.
185
186 config SYSCALL_STRING_SAVING
187         bool "Syscall string saving"
188         default n
189         help
190                 Kmallocs a small buffer for each syscall and attaches it to the
191                 kthread, which can be viewed when debugging semaphores.  Individual
192                 syscalls can save info in this buffer.
193
194 config BLOCK_EXTRAS
195         bool "Block Extra Data"
196         default y
197         help
198                 Extends blocks to have a list of other memory blocks.  Useful for
199                 networking performance.  This is only an option while we debug the
200                 implementation.  Say y.  If you have networking bugs, try turning this
201                 off, and if that helps, tell someone.
202
203 config BETTER_BACKTRACE
204         bool "Better backtraces, less optimizations"
205         default n
206         help
207                 The kernel uses the frame pointer and call stacks for backtraces.
208                 Tail-call optimizations remove some of this information.  Say 'Y' here
209                 to have better backtraces, at the expense of performance.
210
211 endmenu
212
213 menu "Misc/Old Options"
214
215 config ARSC_SERVER
216         bool "Asynchronous remote syscalls"
217         default n
218         help
219                 Code to run a syscall-server on a core.  A process can submit syscalls
220                 and get the results asynchronously.  Hasn't been used in years.  Say
221                 'n' unless you want to play around.
222
223 # SPARC auto-selects this
224 config APPSERVER
225         bool "Appserver"
226         default n
227         help
228                 Old school I/O was through a remote machine.  Not sure if anyone uses
229                 this anymore.
230
231 config SERIAL_IO
232         bool "Serial IO"
233         default n
234         help
235                 Like the appserver, serial I/O was an old attempt to process I/O on a
236                 remote machine across the serial port.
237
238 config SINGLE_CORE
239         bool "Single core"
240         default n
241         help
242                 Have the kernel boot only a single core.  Can be useful for debugging,
243                 but hasn't been used in years.
244
245 config BSD_ON_CORE0
246         bool "BSD on core 0"
247         default n
248         help
249                 This was an old joke.  Say 'n', since we can't simply #include <bsd>.
250
251 endmenu
252
253 source "kern/lib/Kconfig"
254
255 source "kern/src/ktest/Kconfig"