summaryrefslogtreecommitdiff
path: root/nuttx/sched
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-05-14 01:03:19 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-05-14 01:03:19 +0000
commitdc5c9b3ae22bc039f889e3f3765c9ba080a6b3af (patch)
tree069a9a4cfbe5124946533f9a526dcfb227107b06 /nuttx/sched
parent3b8a6dddff146b60cd09d1f3dd3b95cd8042ccd5 (diff)
downloadpx4-nuttx-dc5c9b3ae22bc039f889e3f3765c9ba080a6b3af.tar.gz
px4-nuttx-dc5c9b3ae22bc039f889e3f3765c9ba080a6b3af.tar.bz2
px4-nuttx-dc5c9b3ae22bc039f889e3f3765c9ba080a6b3af.zip
Add task switching instrumentation for missing case. Contributed by Petri Tanskanen.
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4734 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/sched')
-rw-r--r--nuttx/sched/sched_mergepending.c30
1 files changed, 18 insertions, 12 deletions
diff --git a/nuttx/sched/sched_mergepending.c b/nuttx/sched/sched_mergepending.c
index 1448c0096..202228412 100644
--- a/nuttx/sched/sched_mergepending.c
+++ b/nuttx/sched/sched_mergepending.c
@@ -1,8 +1,8 @@
/************************************************************************
* sched/sched_mergepending.c
*
- * Copyright (C) 2007, 2009 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ * Copyright (C) 2007, 2009, 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -40,6 +40,7 @@
#include <nuttx/config.h>
#include <stdbool.h>
+#include <sched.h>
#include <queue.h>
#include <assert.h>
@@ -135,24 +136,29 @@ bool sched_mergepending(void)
rtrprev = rtrtcb->blink;
if (!rtrprev)
{
- /* Special case: Inserting pndtcb at the head of the list */
+ /* Special case: Inserting pndtcb at the head of the list */
+ /* Inform the instrumentation layer that we are switching tasks */
- pndtcb->flink = rtrtcb;
- pndtcb->blink = NULL;
- rtrtcb->blink = pndtcb;
- g_readytorun.head = (FAR dq_entry_t*)pndtcb;
+ sched_note_switch(rtrtcb, pndtcb);
+
+ /* Then insert at the head of the list */
+
+ pndtcb->flink = rtrtcb;
+ pndtcb->blink = NULL;
+ rtrtcb->blink = pndtcb;
+ g_readytorun.head = (FAR dq_entry_t*)pndtcb;
rtrtcb->task_state = TSTATE_TASK_READYTORUN;
pndtcb->task_state = TSTATE_TASK_RUNNING;
- ret = true;
+ ret = true;
}
else
{
/* Insert in the middle of the list */
- pndtcb->flink = rtrtcb;
- pndtcb->blink = rtrprev;
- rtrprev->flink = pndtcb;
- rtrtcb->blink = pndtcb;
+ pndtcb->flink = rtrtcb;
+ pndtcb->blink = rtrprev;
+ rtrprev->flink = pndtcb;
+ rtrtcb->blink = pndtcb;
pndtcb->task_state = TSTATE_TASK_READYTORUN;
}
}