kernel: reduce scope of z_new_thread_init()
The core kernel z_setup_new_thread() calls into arch_new_thread(), which calls back into the core kernel via z_new_thread_init(). Move everything that doesn't have to be in z_new_thread_init() to z_setup_new_thread() and convert to an inline function. Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
This commit is contained in:
parent
a54a2460d3
commit
c0df99cc77
11 changed files with 45 additions and 62 deletions
|
@ -137,7 +137,7 @@ void arch_new_thread(struct k_thread *thread, k_thread_stack_t *stack,
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
z_new_thread_init(thread, pStackMem, stackAdjSize, priority, options);
|
z_new_thread_init(thread, pStackMem, stackAdjSize);
|
||||||
|
|
||||||
/* carve the thread entry struct from the "base" of
|
/* carve the thread entry struct from the "base" of
|
||||||
the privileged stack */
|
the privileged stack */
|
||||||
|
@ -164,7 +164,7 @@ void arch_new_thread(struct k_thread *thread, k_thread_stack_t *stack,
|
||||||
pStackMem += ARCH_THREAD_STACK_RESERVED;
|
pStackMem += ARCH_THREAD_STACK_RESERVED;
|
||||||
stackEnd = pStackMem + stackSize;
|
stackEnd = pStackMem + stackSize;
|
||||||
|
|
||||||
z_new_thread_init(thread, pStackMem, stackSize, priority, options);
|
z_new_thread_init(thread, pStackMem, stackSize);
|
||||||
|
|
||||||
stackAdjEnd = stackEnd;
|
stackAdjEnd = stackEnd;
|
||||||
|
|
||||||
|
|
|
@ -94,8 +94,7 @@ void arch_new_thread(struct k_thread *thread, k_thread_stack_t *stack,
|
||||||
|
|
||||||
struct __esf *pInitCtx;
|
struct __esf *pInitCtx;
|
||||||
|
|
||||||
z_new_thread_init(thread, pStackMem, stackSize, priority,
|
z_new_thread_init(thread, pStackMem, stackSize);
|
||||||
options);
|
|
||||||
|
|
||||||
/* Carve the thread entry struct from the "base" of the stack
|
/* Carve the thread entry struct from the "base" of the stack
|
||||||
*
|
*
|
||||||
|
|
|
@ -71,7 +71,7 @@ void arch_new_thread(struct k_thread *thread, k_thread_stack_t *stack,
|
||||||
|
|
||||||
stackEnd = pStackMem + stackSize;
|
stackEnd = pStackMem + stackSize;
|
||||||
|
|
||||||
z_new_thread_init(thread, pStackMem, stackSize, priority, options);
|
z_new_thread_init(thread, pStackMem, stackSize);
|
||||||
|
|
||||||
pInitCtx = (struct init_stack_frame *)(STACK_ROUND_DOWN(stackEnd -
|
pInitCtx = (struct init_stack_frame *)(STACK_ROUND_DOWN(stackEnd -
|
||||||
sizeof(struct init_stack_frame)));
|
sizeof(struct init_stack_frame)));
|
||||||
|
|
|
@ -38,7 +38,7 @@ void arch_new_thread(struct k_thread *thread, k_thread_stack_t *stack,
|
||||||
|
|
||||||
struct init_stack_frame *iframe;
|
struct init_stack_frame *iframe;
|
||||||
|
|
||||||
z_new_thread_init(thread, stack_memory, stack_size, priority, options);
|
z_new_thread_init(thread, stack_memory, stack_size);
|
||||||
|
|
||||||
/* Initial stack frame data, stored at the base of the stack */
|
/* Initial stack frame data, stored at the base of the stack */
|
||||||
iframe = (struct init_stack_frame *)
|
iframe = (struct init_stack_frame *)
|
||||||
|
|
|
@ -36,7 +36,7 @@ void arch_new_thread(struct k_thread *thread, k_thread_stack_t *stack,
|
||||||
|
|
||||||
posix_thread_status_t *thread_status;
|
posix_thread_status_t *thread_status;
|
||||||
|
|
||||||
z_new_thread_init(thread, stack_memory, stack_size, priority, options);
|
z_new_thread_init(thread, stack_memory, stack_size);
|
||||||
|
|
||||||
/* We store it in the same place where normal archs store the
|
/* We store it in the same place where normal archs store the
|
||||||
* "initial stack frame"
|
* "initial stack frame"
|
||||||
|
|
|
@ -22,7 +22,7 @@ void arch_new_thread(struct k_thread *thread, k_thread_stack_t *stack,
|
||||||
|
|
||||||
struct __esf *stack_init;
|
struct __esf *stack_init;
|
||||||
|
|
||||||
z_new_thread_init(thread, stack_memory, stack_size, priority, options);
|
z_new_thread_init(thread, stack_memory, stack_size);
|
||||||
|
|
||||||
/* Initial stack frame for thread */
|
/* Initial stack frame for thread */
|
||||||
stack_init = (struct __esf *)
|
stack_init = (struct __esf *)
|
||||||
|
|
|
@ -71,7 +71,7 @@ void arch_new_thread(struct k_thread *thread, k_thread_stack_t *stack,
|
||||||
|
|
||||||
Z_ASSERT_VALID_PRIO(priority, entry);
|
Z_ASSERT_VALID_PRIO(priority, entry);
|
||||||
stack_buf = Z_THREAD_STACK_BUFFER(stack);
|
stack_buf = Z_THREAD_STACK_BUFFER(stack);
|
||||||
z_new_thread_init(thread, stack_buf, stack_size, priority, options);
|
z_new_thread_init(thread, stack_buf, stack_size);
|
||||||
|
|
||||||
#if CONFIG_X86_STACK_PROTECTION
|
#if CONFIG_X86_STACK_PROTECTION
|
||||||
struct z_x86_thread_stack_header *header =
|
struct z_x86_thread_stack_header *header =
|
||||||
|
|
|
@ -19,8 +19,7 @@ void arch_new_thread(struct k_thread *thread, k_thread_stack_t *stack,
|
||||||
void *switch_entry;
|
void *switch_entry;
|
||||||
|
|
||||||
Z_ASSERT_VALID_PRIO(priority, entry);
|
Z_ASSERT_VALID_PRIO(priority, entry);
|
||||||
z_new_thread_init(thread, Z_THREAD_STACK_BUFFER(stack),
|
z_new_thread_init(thread, Z_THREAD_STACK_BUFFER(stack), stack_size);
|
||||||
stack_size, priority, options);
|
|
||||||
|
|
||||||
#if CONFIG_X86_STACK_PROTECTION
|
#if CONFIG_X86_STACK_PROTECTION
|
||||||
struct z_x86_thread_stack_header *header =
|
struct z_x86_thread_stack_header *header =
|
||||||
|
|
|
@ -67,7 +67,7 @@ void arch_new_thread(struct k_thread *thread, k_thread_stack_t *stack,
|
||||||
/* Align downward. The API as specified requires a runtime check. */
|
/* Align downward. The API as specified requires a runtime check. */
|
||||||
top = (char *)(((unsigned int)top) & ~3);
|
top = (char *)(((unsigned int)top) & ~3);
|
||||||
|
|
||||||
z_new_thread_init(thread, base, sz, prio, opts);
|
z_new_thread_init(thread, base, sz);
|
||||||
|
|
||||||
thread->switch_handle = xtensa_init_stack((void *)top, entry,
|
thread->switch_handle = xtensa_init_stack((void *)top, entry,
|
||||||
p1, p2, p3);
|
p1, p2, p3);
|
||||||
|
|
|
@ -46,9 +46,22 @@ extern void z_setup_new_thread(struct k_thread *new_thread,
|
||||||
void *p1, void *p2, void *p3,
|
void *p1, void *p2, void *p3,
|
||||||
int prio, u32_t options, const char *name);
|
int prio, u32_t options, const char *name);
|
||||||
|
|
||||||
extern void z_new_thread_init(struct k_thread *thread,
|
static inline void z_new_thread_init(struct k_thread *thread,
|
||||||
char *pStack, size_t stackSize,
|
char *stack, size_t stack_size)
|
||||||
int prio, unsigned int options);
|
{
|
||||||
|
#if !defined(CONFIG_INIT_STACKS) && !defined(CONFIG_THREAD_STACK_INFO)
|
||||||
|
ARG_UNUSED(stack);
|
||||||
|
ARG_UNUSED(stack_size);
|
||||||
|
ARG_UNUSED(thread);
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_INIT_STACKS
|
||||||
|
memset(stack, 0xaa, stack_size);
|
||||||
|
#endif
|
||||||
|
#if defined(CONFIG_THREAD_STACK_INFO)
|
||||||
|
thread->stack_info.start = (uintptr_t)stack;
|
||||||
|
thread->stack_info.size = stack_size;
|
||||||
|
#endif /* CONFIG_THREAD_STACK_INFO */
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Allocate some memory from the current thread's resource pool
|
* @brief Allocate some memory from the current thread's resource pool
|
||||||
|
|
|
@ -462,51 +462,6 @@ static inline size_t adjust_stack_size(size_t stack_size)
|
||||||
|
|
||||||
#endif /* CONFIG_STACK_POINTER_RANDOM */
|
#endif /* CONFIG_STACK_POINTER_RANDOM */
|
||||||
|
|
||||||
void z_new_thread_init(struct k_thread *thread,
|
|
||||||
char *pStack, size_t stackSize,
|
|
||||||
int prio, unsigned int options)
|
|
||||||
{
|
|
||||||
#if !defined(CONFIG_INIT_STACKS) && !defined(CONFIG_THREAD_STACK_INFO)
|
|
||||||
ARG_UNUSED(pStack);
|
|
||||||
ARG_UNUSED(stackSize);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_INIT_STACKS
|
|
||||||
memset(pStack, 0xaa, stackSize);
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_STACK_SENTINEL
|
|
||||||
/* Put the stack sentinel at the lowest 4 bytes of the stack area.
|
|
||||||
* We periodically check that it's still present and kill the thread
|
|
||||||
* if it isn't.
|
|
||||||
*/
|
|
||||||
*((u32_t *)pStack) = STACK_SENTINEL;
|
|
||||||
#endif /* CONFIG_STACK_SENTINEL */
|
|
||||||
/* Initialize various struct k_thread members */
|
|
||||||
z_init_thread_base(&thread->base, prio, _THREAD_PRESTART, options);
|
|
||||||
|
|
||||||
/* static threads overwrite it afterwards with real value */
|
|
||||||
thread->init_data = NULL;
|
|
||||||
thread->fn_abort = NULL;
|
|
||||||
|
|
||||||
#ifdef CONFIG_THREAD_CUSTOM_DATA
|
|
||||||
/* Initialize custom data field (value is opaque to kernel) */
|
|
||||||
thread->custom_data = NULL;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_THREAD_NAME
|
|
||||||
thread->name[0] = '\0';
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(CONFIG_USERSPACE)
|
|
||||||
thread->mem_domain_info.mem_domain = NULL;
|
|
||||||
#endif /* CONFIG_USERSPACE */
|
|
||||||
|
|
||||||
#if defined(CONFIG_THREAD_STACK_INFO)
|
|
||||||
thread->stack_info.start = (uintptr_t)pStack;
|
|
||||||
thread->stack_info.size = (u32_t)stackSize;
|
|
||||||
#endif /* CONFIG_THREAD_STACK_INFO */
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Note:
|
* Note:
|
||||||
* The caller must guarantee that the stack_size passed here corresponds
|
* The caller must guarantee that the stack_size passed here corresponds
|
||||||
|
@ -522,6 +477,7 @@ void z_setup_new_thread(struct k_thread *new_thread,
|
||||||
z_object_init(new_thread);
|
z_object_init(new_thread);
|
||||||
z_object_init(stack);
|
z_object_init(stack);
|
||||||
new_thread->stack_obj = stack;
|
new_thread->stack_obj = stack;
|
||||||
|
new_thread->mem_domain_info.mem_domain = NULL;
|
||||||
|
|
||||||
/* Any given thread has access to itself */
|
/* Any given thread has access to itself */
|
||||||
k_object_access_grant(new_thread, new_thread);
|
k_object_access_grant(new_thread, new_thread);
|
||||||
|
@ -537,9 +493,14 @@ void z_setup_new_thread(struct k_thread *new_thread,
|
||||||
- sizeof(*new_thread->userspace_local_data));
|
- sizeof(*new_thread->userspace_local_data));
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
/* Initialize various struct k_thread members */
|
||||||
|
z_init_thread_base(&new_thread->base, prio, _THREAD_PRESTART, options);
|
||||||
|
|
||||||
arch_new_thread(new_thread, stack, stack_size, entry, p1, p2, p3,
|
arch_new_thread(new_thread, stack, stack_size, entry, p1, p2, p3,
|
||||||
prio, options);
|
prio, options);
|
||||||
|
/* static threads overwrite it afterwards with real value */
|
||||||
|
new_thread->init_data = NULL;
|
||||||
|
new_thread->fn_abort = NULL;
|
||||||
|
|
||||||
#ifdef CONFIG_USE_SWITCH
|
#ifdef CONFIG_USE_SWITCH
|
||||||
/* switch_handle must be non-null except when inside z_swap()
|
/* switch_handle must be non-null except when inside z_swap()
|
||||||
|
@ -549,7 +510,13 @@ void z_setup_new_thread(struct k_thread *new_thread,
|
||||||
__ASSERT(new_thread->switch_handle != NULL,
|
__ASSERT(new_thread->switch_handle != NULL,
|
||||||
"arch layer failed to initialize switch_handle");
|
"arch layer failed to initialize switch_handle");
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_STACK_SENTINEL
|
||||||
|
/* Put the stack sentinel at the lowest 4 bytes of the stack area.
|
||||||
|
* We periodically check that it's still present and kill the thread
|
||||||
|
* if it isn't.
|
||||||
|
*/
|
||||||
|
*((u32_t *)new_thread->stack_info.start) = STACK_SENTINEL;
|
||||||
|
#endif /* CONFIG_STACK_SENTINEL */
|
||||||
#ifdef CONFIG_THREAD_USERSPACE_LOCAL_DATA
|
#ifdef CONFIG_THREAD_USERSPACE_LOCAL_DATA
|
||||||
#ifndef CONFIG_THREAD_USERSPACE_LOCAL_DATA_ARCH_DEFER_SETUP
|
#ifndef CONFIG_THREAD_USERSPACE_LOCAL_DATA_ARCH_DEFER_SETUP
|
||||||
/* don't set again if the arch's own code in arch_new_thread() has
|
/* don't set again if the arch's own code in arch_new_thread() has
|
||||||
|
@ -560,7 +527,10 @@ void z_setup_new_thread(struct k_thread *new_thread,
|
||||||
(Z_THREAD_STACK_BUFFER(stack) + stack_size);
|
(Z_THREAD_STACK_BUFFER(stack) + stack_size);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_THREAD_CUSTOM_DATA
|
||||||
|
/* Initialize custom data field (value is opaque to kernel) */
|
||||||
|
new_thread->custom_data = NULL;
|
||||||
|
#endif
|
||||||
#ifdef CONFIG_THREAD_MONITOR
|
#ifdef CONFIG_THREAD_MONITOR
|
||||||
new_thread->entry.pEntry = entry;
|
new_thread->entry.pEntry = entry;
|
||||||
new_thread->entry.parameter1 = p1;
|
new_thread->entry.parameter1 = p1;
|
||||||
|
@ -579,6 +549,8 @@ void z_setup_new_thread(struct k_thread *new_thread,
|
||||||
CONFIG_THREAD_MAX_NAME_LEN - 1);
|
CONFIG_THREAD_MAX_NAME_LEN - 1);
|
||||||
/* Ensure NULL termination, truncate if longer */
|
/* Ensure NULL termination, truncate if longer */
|
||||||
new_thread->name[CONFIG_THREAD_MAX_NAME_LEN - 1] = '\0';
|
new_thread->name[CONFIG_THREAD_MAX_NAME_LEN - 1] = '\0';
|
||||||
|
} else {
|
||||||
|
new_thread->name[0] = '\0';
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_SCHED_CPU_MASK
|
#ifdef CONFIG_SCHED_CPU_MASK
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue