mirror of
https://github.com/apache/nuttx.git
synced 2026-06-06 00:14:22 +08:00
sched/sched/remove_readytorun.c: Fix CPU affinity issues in SMP
THOR-208 In "nxsched_remove_readytorun": the logical may choose the head of g_readytorun(the greatest priority) task as the next while ignoring the cpu affinity of it. Signed-off-by: chenhonglin <chenhonglin@xiaomi.com> Change-Id: I819dd6f3fc0feff4e378cfda2a6c581814065cb3
This commit is contained in:
@@ -209,20 +209,16 @@ bool nxsched_remove_readytorun(FAR struct tcb_s *rtcb)
|
||||
|
||||
if (rtrtcb != NULL && rtrtcb->sched_priority >= nxttcb->sched_priority)
|
||||
{
|
||||
FAR struct tcb_s *tmptcb;
|
||||
|
||||
/* The TCB at the head of the ready to run list has the higher
|
||||
* priority. Remove that task from the head of the g_readytorun
|
||||
* list and add to the head of the g_assignedtasks[cpu] list.
|
||||
*/
|
||||
|
||||
tmptcb = (FAR struct tcb_s *)
|
||||
dq_remfirst((FAR dq_queue_t *)&g_readytorun);
|
||||
dq_rem((FAR dq_entry_t *)rtrtcb, (FAR dq_queue_t *)&g_readytorun);
|
||||
dq_addfirst((FAR dq_entry_t *)rtrtcb, tasklist);
|
||||
|
||||
dq_addfirst((FAR dq_entry_t *)tmptcb, tasklist);
|
||||
|
||||
tmptcb->cpu = cpu;
|
||||
nxttcb = tmptcb;
|
||||
rtrtcb->cpu = cpu;
|
||||
nxttcb = rtrtcb;
|
||||
}
|
||||
|
||||
/* Will pre-emption be disabled after the switch? If the lockcount is
|
||||
|
||||
Reference in New Issue
Block a user