3f9ad86b1d
Currently printk isn't synchronized except at the byte output level, leading to interleaving of messages on SMP systems that try to log simultaneously. This is actually fairly amusing, and actually helpful occasionally to validate inter-CPU contention down to the "few cycles" level. Still, when you're printing data you need to read, you need to be able to read it. Put a spinlock around each buffered line. This has to happen in a few places, as there are three different code paths taken for !USERSPACE, syscall, and user mode. Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
86 lines
3.1 KiB
Plaintext
86 lines
3.1 KiB
Plaintext
# Copyright (c) 2016 Intel Corporation
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
menu "OS Support Library"
|
|
|
|
config JSON_LIBRARY
|
|
bool "Build JSON library"
|
|
help
|
|
Build a minimal JSON parsing/encoding library. Used by sample
|
|
applications such as the NATS client.
|
|
|
|
config RING_BUFFER
|
|
bool "Enable ring buffers"
|
|
help
|
|
Enable usage of ring buffers. This is similar to kernel FIFOs but ring
|
|
buffers manage their own buffer memory and can store arbitrary data.
|
|
For optimal performance, use buffer sizes that are a power of 2.
|
|
|
|
config BASE64
|
|
bool "Enable base64 encoding and decoding"
|
|
help
|
|
Enable base64 encoding and decoding functionality
|
|
|
|
config SYS_HEAP_VALIDATE
|
|
bool "Enable internal heap validity checking"
|
|
help
|
|
The sys_heap implementation is instrumented for extensive
|
|
internal validation. Leave this off by default, unless
|
|
modifying the heap code or (maybe) when running in
|
|
environments that require sensitive detection of memory
|
|
corruption.
|
|
|
|
config SYS_HEAP_ALLOC_LOOPS
|
|
int "Number of tries in the inner heap allocation loop"
|
|
default 3
|
|
help
|
|
The sys_heap allocator bounds the number of tries from the
|
|
smallest chunk level (the one that might not fit the
|
|
requested allocation) to maintain constant time performance.
|
|
Setting this to a high level will cause the heap to return
|
|
more successful allocations in situations of high
|
|
fragmentation, at the cost of potentially significant
|
|
(linear time) searching of the free list. The default is
|
|
three, which results in an allocator with good statistical
|
|
properties ("most" allocations that fit will succeed) but
|
|
keeps the maximum runtime at a tight bound so that the heap
|
|
is useful in locked or ISR contexts.
|
|
|
|
config SYS_HEAP_ALIGNED_ALLOC
|
|
bool "Enable sys_heap_aligned_alloc() API"
|
|
help
|
|
When true, the sys_heap_aligned_alloc() API is available to
|
|
guarantee alignment of returned heap blocks in an efficient
|
|
way. For technical reasons, this requires the use of the
|
|
"big" 8 byte heap block header format, so it will moderately
|
|
increase heap memory overhead on 32 bit platforms when using
|
|
small (<256kb) heaps.
|
|
|
|
config PRINTK64
|
|
bool
|
|
prompt "Enable 64 bit printk conversions" if !64BIT
|
|
default y
|
|
help
|
|
When true, 64 bit values will be printable on 32 bit systems
|
|
using the "ll" flag to the %d, %i, %u, %x and %X specifiers.
|
|
When false, these values will be correctly parsed from the
|
|
function arguments, but will print "ERR" if their value is
|
|
unrepresentable in 32 bits. This setting is always true on
|
|
64 bit systems. Note that setting this =n does not produce
|
|
significant code savings within the printk library code
|
|
itself. Instead, it suppresses the use of the
|
|
toolchain-provided 64 bit division implementation, which may
|
|
reduce code size if it is unused elsewhere in the
|
|
application. Most apps should leave this set to y.
|
|
|
|
config PRINTK_SYNC
|
|
bool "Serialize printk() calls"
|
|
default y if SMP && MP_NUM_CPUS > 1
|
|
help
|
|
When true, a spinlock will be taken around the output from a
|
|
single printk() call, preventing the output data from
|
|
interleaving with concurrent usage from another CPU or an
|
|
preempting interrupt.
|
|
|
|
endmenu
|