perf: Report errors when counter setup fails
[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 config EXT2FS
64         bool "Ext2 filesystem"
65         default n
66         help
67                 Build in support for ext2.  Extremely experimental, and only works with
68                 a block device image, which will be mounted at /mnt.  If you select
69                 this, you must specify a block device.
70
71 config EXT2_BDEV
72         depends on EXT2FS
73         string "Ext2 image file"
74         default mnt/ext2fs.img
75         help
76                 This file needs to be an ext2 image (file that looks like a block
77                 device).  You should be able to mount this file in your host OS.  It
78                 will be bundled into the kernel and mounted at /mnt.
79
80 endmenu
81
82 choice COREALLOC_POLICY
83         prompt "Core Allocation Policy"
84         help
85                 Select a policy for allocating cores to a process upon request.  All
86                 strategies first allocate cores from the set of provisioned cores for a
87                 process, but differ in how they select cores beyond this.
88
89 config COREALLOC_FCFS
90         bool "Simple FCFS"
91         help
92                 Allocate cores to processes on a first-come-first-served basis. All
93                 cores are treated equally, and no topology information is used to try
94                 and optimize which cores are given to which processes upon request.
95
96 endchoice
97
98 menu "Memory Management"
99
100 config PAGE_COLORING
101         bool "Page coloring"
102         default n
103         help
104                 Turns on internal support for page coloring.  When turned off, the page
105                 allocator acts like there is only one color.  Hasn't been used in a few
106                 years.
107
108 config BOXBORO
109         depends on PAGE_COLORING
110         bool "Boxboro-specific page coloring"
111         default n
112         help
113                 Say 'n'.
114
115 endmenu
116
117 menu "Kernel Debugging"
118
119 menu "Per-cpu Tracers"
120
121 config TRACE_KMSGS
122         bool "KMSG Tracing"
123         default n
124         help
125                 Turns on KMSG tracing, using the per-cpu ring buffer (holds about 256
126                 events).  You can access this from the monitor via "trace pcpui".  Turn
127                 this off for a slight performance improvement on every KMSG (and every
128                 MCP proc_yield).
129
130 config TRACE_LOCKS
131         bool "Lock Tracing"
132         depends on SPINLOCK_DEBUG
133         default n
134         help
135                 Turns on lock tracing, using the per-cpu ring buffer.  This records the
136                 a timestamp and lock address, in an over-write tracing style (meaning
137                 it'll clobber older events).  If you have locking issues, this may give
138                 you clues as to which locks were grabbed recently.
139
140 endmenu
141
142 config DEVELOPMENT_ASSERTIONS
143         bool "dasserts"
144         default n
145         help
146                 Turn on dassert() in code, dassert will compile to assert().
147
148 config SPINLOCK_DEBUG
149         bool "Spinlock debugging"
150         default n
151         help
152                 Turns on debugging, which tracks the last time a lock was acquired and
153                 detects improper lock acquisition based on IRQ levels (e.g. using
154                 spin_lock() in IRQ context).  This will slow down all lock
155                 acquisitions.
156
157 config SEQLOCK_DEBUG
158         bool "Seqlock debugging"
159         default n
160         help
161                 Provides asserts to detect seqlock errors.  This will allow a malicious
162                 userspace to trigger a panic in the kernel.
163
164 config SEMAPHORE_DEBUG
165         bool "Semaphore debugging"
166         default n
167         help
168                 Turns on debugging, which tracks the last time and location that a
169                 semaphore was downed, and provides a linked list of all semaphores that
170                 have waiters.  This will slow down all semaphore ups and downs.
171
172 config SEM_SPINWAIT
173         bool "Semaphore spinwaiting"
174         default n
175         help
176                 Turns on semaphore spinwaiting.  In lieu of intelligent Adaptive
177                 Mutexes, busy semaphores will just spin for a while before fully
178                 sleeping.
179
180 config SEM_SPINWAIT_NR_LOOPS
181         int "Number of polls before sleeping"
182         depends on SEM_SPINWAIT
183         default 100
184         help
185                 How many times to poll a busy semaphore before going to sleep.
186
187 config SEM_TRACE_BLOCKERS
188         bool "Semaphore Blocker Tracing"
189         default n
190         help
191                 Drops a TRACEME whenever a semaphore would block (barring slight
192                 races).  To access the trace data, you'll need to use the opcontrols
193                 and process the data with op2.
194
195 config RESET_STACKS
196         bool "Reset Stacks"
197         default y
198         help
199                 When idling, the kernel will reset the stack of its kernel thread to
200                 the top of the stack, abandoning its context.  This is useful so we do
201                 not run off the end of our stacks, but makes backtracing difficult.
202
203 config LARGE_KSTACKS
204         bool "Large (two-page) Kernel Stacks"
205         default y
206         help
207                 Ideally, we'd like to use single-page stacks, which are easier on the
208                 memory allocator.  Some of the Plan 9 code hogs stack space, and we may
209                 run off the end of a single-page stack.
210
211                 Say 'y' to play it safe and use the larger, slower stacks.  Say 'n' for
212                 higher performance, and mention this setting if you have any weird
213                 crashes or panics.
214
215 config KTHREAD_POISON
216         bool "Kthread Poison Canary"
217         default n
218         help
219                 Kthreads will use a bit of storage at the bottom of the stack to track
220                 the state of the kthread.  This is useful to catch various bugs with
221                 kthreading, such as launching the same kthread twice concurrently.
222
223 config DISABLE_SMT
224         bool "Disables symmetric multithreading"
225         default n
226         help
227                 Disables hyperthreading by telling the kernel to never give out even
228                 numbered cores to MCPs.  This does not check to see if the threads are
229                 in fact siblings, or if the target machine is hyperthreaded.
230
231 config PRINTK_NO_BACKSPACE
232         bool "Printk with no backspace"
233         default n
234         help
235                 One of the serial devices I was using a while back had issues printing
236                 backspaces.  This was an old hack to deal with that.
237
238 config SYSCALL_STRING_SAVING
239         bool "Syscall string saving"
240         default n
241         help
242                 Kmallocs a small buffer for each syscall and attaches it to the
243                 kthread, which can be viewed when debugging semaphores.  Individual
244                 syscalls can save info in this buffer.
245
246 config BLOCK_EXTRAS
247         bool "Block Extra Data"
248         default y
249         help
250                 Extends blocks to have a list of other memory blocks.  Useful for
251                 networking performance.  This is only an option while we debug the
252                 implementation.  Say y.  If you have networking bugs, try turning this
253                 off, and if that helps, tell someone.
254
255 endmenu
256
257 menu "Misc/Old Options"
258
259 config ARSC_SERVER
260         bool "Asynchronous remote syscalls"
261         default n
262         help
263                 Code to run a syscall-server on a core.  A process can submit syscalls
264                 and get the results asynchronously.  Hasn't been used in years.  Say
265                 'n' unless you want to play around.
266
267 # SPARC auto-selects this
268 config APPSERVER
269         bool "Appserver"
270         default n
271         help
272                 Old school I/O was through a remote machine.  Not sure if anyone uses
273                 this anymore.
274
275 config SERIAL_IO
276         bool "Serial IO"
277         default n
278         help
279                 Like the appserver, serial I/O was an old attempt to process I/O on a
280                 remote machine across the serial port.
281
282 config SINGLE_CORE
283         bool "Single core"
284         default n
285         help
286                 Have the kernel boot only a single core.  Can be useful for debugging,
287                 but hasn't been used in years.
288
289 config BSD_ON_CORE0
290         bool "BSD on core 0"
291         default n
292         help
293                 This was an old joke.  Say 'n', since we can't simply #include <bsd>.
294
295 endmenu
296
297 source "kern/lib/Kconfig"
298
299 source "kern/src/ktest/Kconfig"