Using MPU enabled HW it was evident that a NULL access
(with offset) was happening in the TCP stack due to the
following message:
***** MPU FAULT *****
Executing thread ID (thread): 0x20009b0c
Faulting instruction address: 0x8034496
Data Access Violation
Address: 0x34
Fatal fault in essential thread! Spinning...
Turns out we are referencing a potentially de-referenced
NULL pointer in the SYS_SLIST_PEEK_NEXT_CONTAINER macro.
Let's avoid this by checking the container node for NULL.
Also fix dlist.h SYS_DLIST_PEEK_NEXT_CONTAINER with the same
issue.
Change-Id: I2e765b9af7bcaf8fb13f7c9b7e081f9e6d4928f2
Signed-off-by: Michael Scott <michael.scott@linaro.org>
Scheduler needs to do time slicing only if there are multiple threads
active with the same priority. This function checks if the list has
more than one node. This would be used to check the list containing
threads with same priority for multiple nodes.
Jira: ZEP-339
Change-Id: I8c7daf77a6540c642ce58a3763b26cd1e06ddc30
Signed-off-by: Ramesh Thomas <ramesh.thomas@intel.com>
This is needed by application code that wants to print formatted
strings, but only has a fmt and va_list, and lacks memory to spare for
"buf" and something like:
vsnprintk(buf, sizeof(buf), fmt, ap);
printk("%s", buf);
Change-Id: Ic9cc915ec7e5f8f9492c730667f39788ecae65f6
Signed-off-by: Marti Bolivar <marti.bolivar@linaro.org>
GCC supports __attribute__((format (printf ...))) even when the
variadic arguments are not present. In this case, the attribute
argument specifying the start of the variadic arguments should be
zero.
Use this in printk.h to add __printf_like where it's missing.
Change-Id: I7868439d5791e391aeb07356af9819524e68c771
Signed-off-by: Marti Bolivar <marti.bolivar@linaro.org>
Convert code to use u{8,16,32,64}_t and s{8,16,32,64}_t instead of C99
integer types. This handles the remaining includes and kernel, plus
touching up various points that we skipped because of include
dependancies. We also convert the PRI printf formatters in the arch
code over to normal formatters.
Jira: ZEP-2051
Change-Id: Iecbb12601a3ee4ea936fd7ddea37788a645b08b0
Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
This is a start to move away from the C99 {u}int{8,16,32,64}_t types to
Zephyr defined u{8,16,32,64}_t and s{8,16,32,64}_t. This allows Zephyr
to define the sized types in a consistent manor across all the
architectures we support and not conflict with what various compilers
and libc might do with regards to the C99 types.
We introduce <zephyr/types.h> as part of this and have it include
<stdint.h> for now until we transition all the code away from the C99
types.
We go with u{8,16,32,64}_t and s{8,16,32,64}_t as there are some
existing variables defined u8 & u16 as well as to be consistent with
Zephyr naming conventions.
Jira: ZEP-2051
Change-Id: I451fed0623b029d65866622e478225dfab2c0ca8
Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
We need to move using the PRI* defines to use newlib as the default libc
as different arch's define various base types like {u}int32_t
differently. To deal with that in a consistent manor we need access to
the defines in most spots for print{f,k} or logging functions.
Change-Id: Ic1fbef75cbaee211803d9aaf506056e5e31e73f3
Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
sys_slist_merge_slist shall reinit the appended list not the original.
Change-Id: Iacd5244d0243b7ebdb110991574e9e1d265ced14
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This enables casting if necessary.
Change-Id: I69d537dd1082e1e5a05aa2cacdd503d3f6c1ab95
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This adds SYS_SLIST_PEEK_TAIL_CONTAINER macro to access the container
directly.
Change-Id: I740138a47936ebda1e0090628f4933e921f6a43b
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
To be API-equivalent with doubly-linked lists.
Change-Id: I98b781f4c649e248abb04f660f686ad76d6b39de
Signed-off-by: Benjamin Walsh <walsh.benj@gmail.com>
Like SYS_DLIST_FOR_EACH_NODE(), but __dn contains a node where to fetch
the next node from, NULL to start at the head.
Note that the function does not iterate from @a node, but from
node->next. This allows the following:
sys_dnode_t *funcA(sys_dlist_t *list, sys_dnode_t *node)
{
SYS_DLIST_ITERATE_FROM_NODE(list, node) {
if (node == <some condition>) {
return node;
}
}
return NULL;
}
sys_dlist_t list = &<some list>;
sys_dnode_t *node = NULL;
do {
node = funcA(list, node)
if (node == <some other condition>) {
goto found;
}
} while(node);
<handle error>
found:
<do stuff with node>
Change-Id: I17a5787594a0ed1a4745bd2e1557dd54895105ca
Signed-off-by: Benjamin Walsh <walsh.benj@gmail.com>
While iterating on each node element it is much more common to try to
access the container struct which up until now have been done manually
using CONTAINER_OF macro, so this introduce CONTAINER variants that allow
to iterate directly with container pointer rather than the list node.
Change-Id: Ie1e0da948cb9517c3c5cd8e86b59b95d7d027bfa
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
While iterating on each node element it is much more common to try to
access the container struct which up until now have been done manually
using CONTAINER_OF macro, so this introduce CONTAINER variants that allow
to iterate directly with container pointer rather than the list node.
Change-Id: Ia24d9b88d5e2c43ffd476f565faf5bb523a9927b
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Replace the existing Apache 2.0 boilerplate header with an SPDX tag
throughout the zephyr code tree. This patch was generated via a
script run over the master branch.
Also updated doc/porting/application.rst that had a dependency on
line numbers in a literal include.
Manually updated subsys/logging/sys_log.c that had a malformed
header in the original file. Also cleanup several cases that already
had a SPDX tag and we either got a duplicate or missed updating.
Jira: ZEP-1457
Change-Id: I6131a1d4ee0e58f5b938300c2d2fc77d2e69572c
Signed-off-by: David B. Kinder <david.b.kinder@intel.com>
Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
This trick was pioneered in Linux as the config_enabled() macro. The
madness has the effect of taking a macro value that may be defined to
"1" (e.g. CONFIG_MYFEATURE), or may not be defined at all and turning
it into a literal expression that can be used at "runtime". That is,
it works similarly to "defined(CONFIG_MYFEATURE)" does except that it
is an expansion that can exist in a standard expression and be seen by
the compiler and optimizer. Thus much #ifdef usage can be replaced
with cleaner expressions like:
if (IS_ENABLED(CONFIG_MYFEATURE))
myfeature_enable();
Change-Id: I40657d2aa3f802429ac33675a1fe245a5da86615
Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
This moves the shell component into its own subsys and groups all
related files and options into a single place.
Additionally, one Kconfig option will now be required to enable the
shell:
CONFIG_CONSOLE_SHELL=y
The header files was also moved to include/shell/shell.h and can be now
referenced with
#include <shell/shell.h>
instead of
#include <misc/shell.h>
Updated documentation as well.
Change-Id: Iffbba4acfa05408055e9fd28dffa213451351f94
Signed-off-by: Anas Nashif <anas.nashif@intel.com>
One missing ARG_UNUSED is added by this commit.
Change-Id: I4d9275cd7de4675a960adc67018633dcf8bdc034
Signed-off-by: Flavio Santes <flavio.santes@intel.com>
Like ceil() for real numbers, but for fractions.
Change-Id: I8387732a2b2fd8b5c2bed57a78726eab7cea2c5b
Signed-off-by: Benjamin Walsh <benjamin.walsh@windriver.com>
This commit adds the ARG_UNUSED macro to some function arguments
to avoid compiler warnings when some sections are compiled out.
Change-Id: Ic003c5a6b2757112cbcf9111fceb14c0f8ea352a
Signed-off-by: Flavio Santes <flavio.santes@intel.com>
Use size_t instead of int to avoid the following compiler warning:
warning: comparison between signed and unsigned integer expressions
Change-Id: I1dcd275e685f5c35793bdbf5ba0acc28ae4b181c
Signed-off-by: Flavio Santes <flavio.santes@intel.com>
Use a short name for this option CONFIG_OBJECT_TRACING.
Change-Id: Id27de7ef9ca299492b6b7d2324d9f5bcf8059a31
Signed-off-by: Anas Nashif <anas.nashif@intel.com>
Move logging out of misc/ to its own subsystem. Anything related to
logging and any new logging features or backends could be added here
instead of the generic location in misc/ which is overcrowded with
options that are not related to eachother.
Jira: ZEP-1467
Change-Id: If6a3ea625c3a3562a7a61a0ba5fd7e6ca75518ba
Signed-off-by: Anas Nashif <anas.nashif@intel.com>
The ARG_UNUSED macro is added to avoid compiler warnings.
Change-Id: If14c3928a30c8f3156cdcd0fe11e22407a78c088
Signed-off-by: Flavio Santes <flavio.santes@intel.com>
There are some corner cases where direct access to the formatter
function is needed. Export _vprintk() so code can use it in a similar
way that _prf() can be directly used.
Change-Id: I9dfb68f87f310e900c662dc8beb320bb4ff7d8b2
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Having the logging macros arbitrarily mapping to printk or printf
based on selected Kconfig options that the app isn't necessarily aware
of can have unexpeced (bad) side effects. In particular, printf
consumes *a lot* more stack (closer to 512 bytes) than printk, so
enabling a seemingly innocent CONFIG_STDOUT_CONSOLE option could lead
to stack overflows that are hard to debug.
Jira: ZEP-1419
Change-Id: I5fd77a7ed402e9ca67af23857e0f886f96d243bc
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
These correspond to the libc snprintf and vsnprintf APIs.
Change-Id: If3944972ed95934a4967756593bb2932c3359b72
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Pass a parsing context around, allowing counting the number of
characters written, which is then returned in the return value of
printk(). This makes printk more similar to printf and prepares the
way to extend the implementation to support printing to strings.
Change-Id: Ib28a18a4f36fc58b98b228fd5763b2c05f5af7bc
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
This code is inspired by a similar feature found in ccan[1],
that enforces that the parameter passed to ARRAY_SIZE() is
always an array and not a generic pointer. This is a slightly modified
version that will work if the macro is expanded outside of a function
body.
The check is performed by comparing if typeof(array) and
typeof(&array[0]) are of a different type. Due to the way arrays
decays to pointers in C, if one passes a pointer, the types won't be
compatible and a compile time assertion will fail.
No bugs have been found with this change, but since there's no runtime
or size overheads, there's no reason to not enable it.
[1] https://github.com/rustyrussell/ccan/blob/master/ccan/array_size/\
array_size.h
Change-Id: I6c321714d0024298e593176be43b2d0b5362cc0d
Signed-off-by: Leandro Pereira <leandro.pereira@intel.com>
This macro does two things: first, it validates that the pointer is not
NULL. Second, it validates if it's between the first and the last
element in the array.
This is useful for cases where a pool of structures are used, such as
in the network subsystem.
Change-Id: I9d815936e31d87a3b3ff80466eea97bc4ad954b5
Signed-off-by: Leandro Pereira <leandro.pereira@intel.com>
By adding external hook to sys_log we will allow applications
the flexibility of using various output mechanism such SPI,
flash, FS etc.
Jira: ZEP-1172
Change-Id: Ie32a5e52c3946ada0349b75a35cc107bb29385a1
Signed-off-by: Yossi Havusha <yossi.havusha@intel.com>
Signed-off-by: Anas Nashif <anas.nashif@intel.com>
Rewrites the timestamping logic to always generate timestamps
via a function pointer that is initialized to sys_cycle_get_32(),
but can be changed to point to a user-supplied function. This
eliminates the need for an if/then/else construct in every place
that a timestamp is generated.
Change-Id: Id11f8c41b193a93cece16565978a525056010f0e
Signed-off-by: Allan Stephens <allan.stephens@windriver.com>
Prepares the kernel event logger APIs for inclusion in the
API guide. Also corrects a couple of other issues:
* Gets rid of obsolete thread monitor code.
* Renames "timer_func" global variable to "_sys_k_timer_func"
to align it with kernel naming conventions.
Change-Id: I93d403f83ae44ff45dda489c2ead7bfec6ce1fa3
Signed-off-by: Allan Stephens <allan.stephens@windriver.com>
There was no check to see if the head of a list was empty before trying
to fetch the next node in the list. The fix is added to
sys_dlist_peek_next() so that it also return NULL if the node parameter
is NULL, in addition to being the tail of the list.
Since the value is not used until the second iteration of the loop, and
there will be no second iteration if the list is empty, as long as the
CPU does allow reading at address 0, this was not causing any issues.
Our ARC targets did not seem to like that.
Fixes ZEP-1263 and ZEP-1297.
Change-Id: I07ca16592d206d13662226d1249f487ee78c06aa
Signed-off-by: Benjamin Walsh <walsh.benj@gmail.com>
Most kernel APIs are now ready for inclusion in the API guide.
The APIs largely follow a standard template to provide users
of the API guide with a consistent look-and-feel.
Change-Id: Ib682c31f912e19f5f6d8545d74c5f675b1741058
Signed-off-by: Allan Stephens <allan.stephens@windriver.com>
There was a lot of duplication between architectures for the definition
of threads and the "nanokernel" guts. These have been consolidated.
Now, a common file kernel/unified/include/kernel_structs.h holds the
common definitions. Architectures provide two files to complement it:
kernel_arch_data.h and kernel_arch_func.h. The first one contains at
least the struct _thread_arch and struct _kernel_arch data structures,
as well as the struct _callee_saved and struct _caller_saved register
layouts. The second file contains anything that needs what is provided
by the common stuff in kernel_structs.h. Those two files are only meant
to be included in kernel_structs.h in very specific locations.
The thread data structure has been separated into three major parts:
common struct _thread_base and struct k_thread, and arch-specific struct
_thread_arch. The first and third ones are included in the second.
The struct s_NANO data structure has been split into two: common struct
_kernel and arch-specific struct _kernel_arch. The latter is included in
the former.
Offsets files have also changed: nano_offsets.h has been renamed
kernel_offsets.h and is still included by the arch-specific offsets.c.
Also, since the thread and kernel data structures are now made of
sub-structures, offsets have to be added to make up the full offset.
Some of these additions have been consolidated in shorter symbols,
available from kernel/unified/include/offsets_short.h, which includes an
arch-specific offsets_arch_short.h. Most of the code include
offsets_short.h now instead of offsets.h.
Change-Id: I084645cb7e6db8db69aeaaf162963fe157045d5a
Signed-off-by: Benjamin Walsh <benjamin.walsh@windriver.com>
C++ support moved from nanokernel.h to kernel.h.
Change-Id: I5e1631941e26f4ab3f311b680267b743bab15e40
Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
Defines an object tracing list for each kernel object type
that supports object tracing, and ensures that both statically
and dynamically defined objects are added to the appropriate list.
Ensure that each static kernel object is grouped together with
the other static objects of the same type. Revise the initialization
function for each kernel type (or create it, if needed) so that
each static object is added to the object tracing list for its
associated type.
Note 1: Threads are handled a bit differently than other kernel
object types. A statically-defined thread is added to the thread
list when the thread is started, not when the kernel initializes.
Also, a thread is removed from the thread list when the thread
terminates or aborts, unlike other types of kernel objects which
are never removed from an object tracing list. (Such support would
require the creation of APIs to "uninitialize" the kernel object.)
Note 2: The list head variables for all kernel object types
are now explicitly defined. However, the list head variable for
the ring buffer type continues to be implicitly defined for the
time being, since it isn't considered to be an core kernel object
type.
Change-Id: Ie24d41023e05b3598dc6b344e6871a9692bba02d
Signed-off-by: Allan Stephens <allan.stephens@windriver.com>
Ability to use Zephyr shell by multiple modules simultaneously, each
module for its own usage.
Old shell implementation enabled the user to call only one module
commands, not all of the modules simultaneously.
Change-Id: I0ef8fa2fd190b7490c44fe91d1016363258302c9
Signed-off-by: Yael Avramovich <yael.avramovich@intel.com>
Signed-off-by: Anas Nashif <anas.nashif@intel.com>
Ring buffer section now resides under "other" topic, since the
ring buffer type is a general purpose type (like the singly and
doubly linked list types), rather than a kernel-specific type.
Enhances ring buffer section to improve content and improve
consistency with the form used elsewhere in the Kernel Primer.
Also corrects a minor error in the ring buffer API documentation.
Change-Id: Icaa8661524f80e31f173adee859844cadb38967f
Signed-off-by: Allan Stephens <allan.stephens@windriver.com>
__ASSERT() would trigger if the two buffers were on a common boundary.
Change-Id: Ie9af12abc407dd43615f543b43397493d981057e
Signed-off-by: Benjamin Walsh <benjamin.walsh@windriver.com>
Two functions are proposed:
- sys_memcpy_swap(): will memcpy and swap the 2 given buffers
- sys_mem_swap(): will swap the buffer in place.
The idea is to propose 2 different functions optimized for 2 different
usage.
Change-Id: I1c23907c1f287b72d9be077ccf3aadbb8d379e71
Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
Can speed up some kernel code paths that know a list is not empty.
Change-Id: Ic1261b2e9bf242b7fe49e8a36aeacf9e03f3026b
Signed-off-by: Benjamin Walsh <benjamin.walsh@windriver.com>