Eliminate nanokernel/task sub-directory

Relocates start_task() so that it appears in the main microkernel
directory, alongside its complementary routine abort_task();
this corrects a long-standing anomaly in which this microkernel-
specific routine appeared in the nanokernel portion of the tree.

With this move, the start_task.c file and its parent nanokernel/task
sub-directory no longer serve any purpose and are removed. (Note that
no changes are required for ARC architecture support, which does not
support microkernel capabilities and doesn't use this sub-directory.)

Change-Id: I973e1c32c9a8ddcacdc08159069ae7cdfea0f107
Signed-off-by: Allan Stephens <allan.stephens@windriver.com>
This commit is contained in:
Allan Stephens 2015-05-04 12:10:53 -04:00 committed by Anas Nashif
commit 3c8fb4ac7a
4 changed files with 49 additions and 98 deletions

View file

@ -50,13 +50,8 @@ nkernel_SRC_NANOKERNEL_y = $(strip \
${vBASE}/misc/printk.c \ ${vBASE}/misc/printk.c \
) )
nkernel_SRC_MICROKERNEL_y = $(strip \
${vBASE}/kernel/nanokernel/task/start_task.c \
)
nkernel_SRC += $(strip \ nkernel_SRC += $(strip \
${nkernel_SRC_NANOKERNEL_${CONFIG_NANOKERNEL}} \ ${nkernel_SRC_NANOKERNEL_${CONFIG_NANOKERNEL}} \
${nkernel_SRC_MICROKERNEL_${CONFIG_MICROKERNEL}} \
) )
ifeq ($(CONFIG_ENHANCED_SECURITY),y) ifeq ($(CONFIG_ENHANCED_SECURITY),y)

View file

@ -45,7 +45,6 @@ nkernel_PATH = $(strip \
nkernel_PATH_y = $(strip \ nkernel_PATH_y = $(strip \
${vBASE}/arch/${vARCH}/task \ ${vBASE}/arch/${vARCH}/task \
${vBASE}/kernel/nanokernel/task \
) )
nkernel_PATH += ${nkernel_PATH_${CONFIG_MICROKERNEL}} nkernel_PATH += ${nkernel_PATH_${CONFIG_MICROKERNEL}}

View file

@ -40,7 +40,7 @@
#include <minik.h> #include <minik.h>
#include <nanok.h> #include <nanok.h>
#include <ktask.h> #include <ktask.h>
#include <start_task_arch.h>
/******************************************************************************* /*******************************************************************************
@ -181,6 +181,54 @@ void set_state_bit(
#endif #endif
} }
/*******************************************************************************
*
* start_task - initialize and start a task
*
* RETURNS: N/A
*/
void start_task(struct k_proc *X, /* ptr to task control block */
void (*func)(void) /* entry point for task */
)
{
unsigned int contextOptions;
void *pNewContext;
/* Note: the field X->worksize now represents the task size in bytes */
#ifdef CONFIG_INIT_STACKS
k_memset(X->workspace, 0xaa, X->worksize);
#endif
contextOptions = 0;
_START_TASK_ARCH(X, &contextOptions);
/*
* The 'func' argument to _NewContext() represents the entry point of
* the
* kernel task. The 'parameter1', 'parameter2', & 'parameter3'
* arguments
* are not applicable to such tasks. A 'priority' of -1 indicates that
* the context is a task, rather than a fiber.
*/
pNewContext = (tCCS *)_NewContext((char *)X->workspace, /* pStackMem */
X->worksize, /* stackSize */
(_ContextEntry)func, /* pEntry */
(void *)0, /* parameter1 */
(void *)0, /* parameter2 */
(void *)0, /* parameter3 */
-1, /* priority */
contextOptions /* options */
);
X->workspace = (char *)pNewContext;
X->fabort = NULL;
reset_state_bit(X, TF_STOP | TF_TERM);
}
/******************************************************************************* /*******************************************************************************
* *
* abort_task - abort a task * abort_task - abort a task

View file

@ -1,91 +0,0 @@
/* start_task.c - arch-agnostic nanokernel APIs to start a task */
/*
* Copyright (c) 2010-2014 Wind River Systems, Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1) Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2) Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3) Neither the name of Wind River Systems nor the names of its contributors
* may be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/*
DESCRIPTION
This module contains the single primitive 'start_task' which is utilized
by the microkernel to "start a task".
*/
#ifdef CONFIG_MICROKERNEL
#include <start_task_arch.h>
/*******************************************************************************
*
* start_task - initialize and start a task
*
* RETURNS: N/A
*/
void start_task(struct k_proc *X, /* ptr to task control block */
void (*func)(void) /* entry point for task */
)
{
unsigned int contextOptions;
void *pNewContext;
/* Note: the field X->worksize now represents the task size in bytes */
#ifdef CONFIG_INIT_STACKS
k_memset(X->workspace, 0xaa, X->worksize);
#endif
contextOptions = 0;
_START_TASK_ARCH(X, &contextOptions);
/*
* The 'func' argument to _NewContext() represents the entry point of
* the
* kernel task. The 'parameter1', 'parameter2', & 'parameter3'
* arguments
* are not applicable to such tasks. A 'priority' of -1 indicates that
* the context is a task, rather than a fiber.
*/
pNewContext = (tCCS *)_NewContext((char *)X->workspace, /* pStackMem */
X->worksize, /* stackSize */
(_ContextEntry)func, /* pEntry */
(void *)0, /* parameter1 */
(void *)0, /* parameter2 */
(void *)0, /* parameter3 */
-1, /* priority */
contextOptions /* options */
);
X->workspace = (char *)pNewContext;
X->fabort = NULL;
reset_state_bit(X, TF_STOP | TF_TERM);
}
#endif /* CONFIG_MICROKERNEL */