SMP: Used wrong point to wrong TCB
This commit is contained in:
parent
fc842d740a
commit
cfcd98ca89
2
arch
2
arch
@ -1 +1 @@
|
|||||||
Subproject commit 839a04f989000895820af4691d9596fc4385f48b
|
Subproject commit 414b1da6b18e57ec4119c0a70f84e7c635243717
|
@ -171,7 +171,6 @@ bool sched_addreadytorun(FAR struct tcb_s *btcb)
|
|||||||
bool sched_addreadytorun(FAR struct tcb_s *btcb)
|
bool sched_addreadytorun(FAR struct tcb_s *btcb)
|
||||||
{
|
{
|
||||||
FAR struct tcb_s *rtcb;
|
FAR struct tcb_s *rtcb;
|
||||||
FAR struct tcb_s *next;
|
|
||||||
FAR dq_queue_t *tasklist;
|
FAR dq_queue_t *tasklist;
|
||||||
int task_state;
|
int task_state;
|
||||||
int cpu;
|
int cpu;
|
||||||
@ -305,7 +304,7 @@ bool sched_addreadytorun(FAR struct tcb_s *btcb)
|
|||||||
* and check if a context switch will occur
|
* and check if a context switch will occur
|
||||||
*/
|
*/
|
||||||
|
|
||||||
tasklist = (FAR dq_queue_t *)g_assignedtasks[cpu].head;
|
tasklist = (FAR dq_queue_t *)&g_assignedtasks[cpu];
|
||||||
switched = sched_addprioritized(btcb, tasklist);
|
switched = sched_addprioritized(btcb, tasklist);
|
||||||
|
|
||||||
/* If the selected task was the g_assignedtasks[] list, then a context
|
/* If the selected task was the g_assignedtasks[] list, then a context
|
||||||
@ -314,6 +313,8 @@ bool sched_addreadytorun(FAR struct tcb_s *btcb)
|
|||||||
|
|
||||||
if (switched)
|
if (switched)
|
||||||
{
|
{
|
||||||
|
FAR struct tcb_s *next;
|
||||||
|
|
||||||
/* The new btcb was added at the head of the ready-to-run list. It
|
/* The new btcb was added at the head of the ready-to-run list. It
|
||||||
* is now the new active task!
|
* is now the new active task!
|
||||||
*
|
*
|
||||||
@ -375,7 +376,7 @@ bool sched_addreadytorun(FAR struct tcb_s *btcb)
|
|||||||
next = (FAR struct tcb_s *)btcb->flink;
|
next = (FAR struct tcb_s *)btcb->flink;
|
||||||
ASSERT(!rtcb->lockcount && next != NULL);
|
ASSERT(!rtcb->lockcount && next != NULL);
|
||||||
|
|
||||||
if ((btcb->flags & TCB_FLAG_CPU_ASSIGNED) != 0)
|
if ((next->flags & TCB_FLAG_CPU_ASSIGNED) != 0)
|
||||||
{
|
{
|
||||||
next->task_state = TSTATE_TASK_ASSIGNED;
|
next->task_state = TSTATE_TASK_ASSIGNED;
|
||||||
}
|
}
|
||||||
@ -390,7 +391,7 @@ bool sched_addreadytorun(FAR struct tcb_s *btcb)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
next->task_state = TSTATE_TASK_READYTORUN;
|
next->task_state = TSTATE_TASK_READYTORUN;
|
||||||
(void)sched_addprioritized(btcb,
|
(void)sched_addprioritized(next,
|
||||||
(FAR dq_queue_t *)&g_readytorun);
|
(FAR dq_queue_t *)&g_readytorun);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user