kernel: introduce supervisor-only stacks
These stacks are appropriate for threads that run purely in supervisor mode, and also as stacks for interrupt and exception handling. Two new arch defines are introduced: - ARCH_KERNEL_STACK_GUARD_SIZE - ARCH_KERNEL_STACK_OBJ_ALIGN New public declaration macros: - K_KERNEL_STACK_RESERVED - K_KERNEL_STACK_EXTERN - K_KERNEL_STACK_DEFINE - K_KERNEL_STACK_ARRAY_DEFINE - K_KERNEL_STACK_MEMBER - K_KERNEL_STACK_SIZEOF If user mode is not enabled, K_KERNEL_STACK_* and K_THREAD_STACK_* are equivalent. Separately generated privilege elevation stacks are now declared like kernel stacks, removing the need for K_PRIVILEGE_STACK_ALIGN. Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
This commit is contained in:
parent
c7f33a7759
commit
8ce260d8df
21 changed files with 414 additions and 143 deletions
|
@ -781,9 +781,25 @@ extern void k_thread_foreach_unlocked(
|
|||
* K_FP_REGS, and K_SSE_REGS. Multiple options may be specified by separating
|
||||
* them using "|" (the logical OR operator).
|
||||
*
|
||||
* The stack_size parameter must be the same size value used when the stack
|
||||
* object was defined, or the return value of K_THREAD_STACK_SIZEOF() on the
|
||||
* stack object.
|
||||
* Stack objects passed to this function must be originally defined with
|
||||
* either of these macros in order to be portable:
|
||||
*
|
||||
* - K_THREAD_STACK_DEFINE() - For stacks that may support either user or
|
||||
* supervisor threads.
|
||||
* - K_KERNEL_STACK_DEFINE() - For stacks that may support supervisor
|
||||
* threads only. These stacks use less memory if CONFIG_USERSPACE is
|
||||
* enabled.
|
||||
*
|
||||
* The stack_size parameter has constraints. It must either be:
|
||||
*
|
||||
* - The original size value passed to K_THREAD_STACK_DEFINE() or
|
||||
* K_KERNEL_STACK_DEFINE()
|
||||
* - The return value of K_THREAD_STACK_SIZEOF(stack) if the stack was
|
||||
* defined with K_THREAD_STACK_DEFINE()
|
||||
* - The return value of K_KERNEL_STACK_SIZEOF(stack) if the stack was
|
||||
* defined with K_KERNEL_STACK_DEFINE().
|
||||
*
|
||||
* Using other values, or sizeof(stack) may produce undefined behavior.
|
||||
*
|
||||
* @param new_thread Pointer to uninitialized struct k_thread
|
||||
* @param stack Pointer to the stack space.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue