arch/sim: Initialize the idle thread stack info correctly
and change the default value of IDLETHREAD_STACKSIZE to 65536 Signed-off-by: Xiang Xiao <xiaoxiang@xiaomi.com> Change-Id: Ia54efbbca4b69706150bc4178844b316688a104e
This commit is contained in:
parent
a5ac4463c2
commit
cee43ce280
@ -78,10 +78,5 @@
|
|||||||
|
|
||||||
int up_cpu_idlestack(int cpu, FAR struct tcb_s *tcb, size_t stack_size)
|
int up_cpu_idlestack(int cpu, FAR struct tcb_s *tcb, size_t stack_size)
|
||||||
{
|
{
|
||||||
/* REVISIT: I don't think anything is needed here */
|
return up_create_stack(tcb, stack_size, TCB_FLAG_TTYPE_KERNEL);
|
||||||
|
|
||||||
tcb->adj_stack_size = 0;
|
|
||||||
tcb->stack_alloc_ptr = NULL;
|
|
||||||
tcb->stack_base_ptr = NULL;
|
|
||||||
return OK;
|
|
||||||
}
|
}
|
||||||
|
@ -165,16 +165,15 @@ void sim_sigdeliver(void);
|
|||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
void sim_cpu0_start(void);
|
void sim_cpu0_start(void);
|
||||||
|
int sim_cpu_start(int cpu, void *stack, size_t size);
|
||||||
|
void sim_send_ipi(int cpu);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* up_smpsignal.c ***********************************************************/
|
/* up_smpsignal.c ***********************************************************/
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
void up_cpu_started(void);
|
void up_cpu_started(void);
|
||||||
int up_cpu_paused(int cpu);
|
|
||||||
struct tcb_s *up_this_task(void);
|
|
||||||
int up_cpu_set_pause_handler(int irq);
|
int up_cpu_set_pause_handler(int irq);
|
||||||
void sim_send_ipi(int cpu);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* up_oneshot.c *************************************************************/
|
/* up_oneshot.c *************************************************************/
|
||||||
|
@ -260,17 +260,12 @@ int up_cpu_index(void)
|
|||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
int up_cpu_start(int cpu)
|
int sim_cpu_start(int cpu, void *stack, size_t size)
|
||||||
{
|
{
|
||||||
struct sim_cpuinfo_s cpuinfo;
|
struct sim_cpuinfo_s cpuinfo;
|
||||||
|
pthread_attr_t attr;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
#ifdef CONFIG_SCHED_INSTRUMENTATION
|
|
||||||
/* Notify of the start event */
|
|
||||||
|
|
||||||
sched_note_cpu_start(up_this_task(), cpu);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Initialize the CPU info */
|
/* Initialize the CPU info */
|
||||||
|
|
||||||
cpuinfo.cpu = cpu;
|
cpuinfo.cpu = cpu;
|
||||||
@ -283,11 +278,13 @@ int up_cpu_start(int cpu)
|
|||||||
* in a multi-CPU hardware model.
|
* in a multi-CPU hardware model.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
pthread_attr_init(&attr);
|
||||||
|
pthread_attr_setstack(&attr, stack, size);
|
||||||
ret = pthread_create(&g_cpu_thread[cpu],
|
ret = pthread_create(&g_cpu_thread[cpu],
|
||||||
NULL, sim_idle_trampoline, &cpuinfo);
|
&attr, sim_idle_trampoline, &cpuinfo);
|
||||||
|
pthread_attr_destroy(&attr);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
{
|
{
|
||||||
ret = -ret; /* REVISIT: That is a host errno value. */
|
|
||||||
goto errout_with_cond;
|
goto errout_with_cond;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -233,16 +233,43 @@ void up_cpu_started(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: up_this_task
|
* Name: up_cpu_start
|
||||||
*
|
*
|
||||||
* Description:
|
* Description:
|
||||||
* Return the currrent task tcb.
|
* In an SMP configution, only one CPU is initially active (CPU 0). System
|
||||||
|
* initialization occurs on that single thread. At the completion of the
|
||||||
|
* initialization of the OS, just before beginning normal multitasking,
|
||||||
|
* the additional CPUs would be started by calling this function.
|
||||||
|
*
|
||||||
|
* Each CPU is provided the entry point to is IDLE task when started. A
|
||||||
|
* TCB for each CPU's IDLE task has been initialized and placed in the
|
||||||
|
* CPU's g_assignedtasks[cpu] list. A stack has also been allocateded and
|
||||||
|
* initialized.
|
||||||
|
*
|
||||||
|
* The OS initialization logic calls this function repeatedly until each
|
||||||
|
* CPU has been started, 1 through (CONFIG_SMP_NCPUS-1).
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* cpu - The index of the CPU being started. This will be a numeric
|
||||||
|
* value in the range of from one to (CONFIG_SMP_NCPUS-1). (CPU
|
||||||
|
* 0 is already active)
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* Zero on success; a negated errno value on failure.
|
||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
struct tcb_s *up_this_task(void)
|
int up_cpu_start(int cpu)
|
||||||
{
|
{
|
||||||
return this_task();
|
FAR struct tcb_s *tcb = current_task(cpu);
|
||||||
|
|
||||||
|
#ifdef CONFIG_SCHED_INSTRUMENTATION
|
||||||
|
/* Notify of the start event */
|
||||||
|
|
||||||
|
sched_note_cpu_start(this_task(), cpu);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return sim_cpu_start(cpu, tcb->stack_base_ptr, tcb->adj_stack_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
|
@ -1800,6 +1800,7 @@ config DEFAULT_TASK_STACKSIZE
|
|||||||
|
|
||||||
config IDLETHREAD_STACKSIZE
|
config IDLETHREAD_STACKSIZE
|
||||||
int "Idle thread stack size"
|
int "Idle thread stack size"
|
||||||
|
default DEFAULT_TASK_STACKSIZE if ARCH_SIM
|
||||||
default 1024
|
default 1024
|
||||||
---help---
|
---help---
|
||||||
The size of the initial stack used by the IDLE thread. The IDLE thread
|
The size of the initial stack used by the IDLE thread. The IDLE thread
|
||||||
|
Loading…
Reference in New Issue
Block a user