summaryrefslogtreecommitdiffstats
path: root/cpukit/libmisc/capture/capture.h
diff options
context:
space:
mode:
authorJennifer Averett <jennifer.averett@oarcorp.com>2014-09-04 13:49:04 -0500
committerJennifer Averett <jennifer.averett@oarcorp.com>2014-10-27 14:01:13 -0500
commit05e4e599845a5f2a0dc175228a1f37d84299dd21 (patch)
tree57486d981aeb8f6882f77a560b08d059eca508d0 /cpukit/libmisc/capture/capture.h
parentcpuuse: Move is_executing_on_a_core to threadimpl.h (diff)
downloadrtems-05e4e599845a5f2a0dc175228a1f37d84299dd21.tar.bz2
capture: Removal of capture task tracking.
This patch removes functionality for stack checking from the capture engine and requiresi the use of existing rtems functions for this information. It modifies ctload to use functionality similar to rtems cpuusage. It removes the capture task and stores a new capture task record the first time the task is seen. The per task data that was still needed is scaled down and stored in the tcb.
Diffstat (limited to 'cpukit/libmisc/capture/capture.h')
-rw-r--r--cpukit/libmisc/capture/capture.h295
1 files changed, 57 insertions, 238 deletions
diff --git a/cpukit/libmisc/capture/capture.h b/cpukit/libmisc/capture/capture.h
index 8bc2fc3f3b..a4c3310338 100644
--- a/cpukit/libmisc/capture/capture.h
+++ b/cpukit/libmisc/capture/capture.h
@@ -46,6 +46,7 @@ extern "C" {
#endif
#include <rtems.h>
+#include <rtems/rtems/tasksimpl.h>
/**
* The number of tasks in a trigger group.
@@ -137,47 +138,10 @@ typedef struct rtems_capture_control_s
RTEMS_CAPTURE_EXITTED)
/**
- * @brief Catpure task control
- *
- * RTEMS capture control provdes the information about a task, along
- * with its trigger state. The control is referenced by each
- * capture record. This is information neeed by the decoder. The
- * capture record cannot assume the task will exist when the record is
- * dumped via the target interface so task info needed for tracing is
- * copied and held here. Once the references in the trace buffer
- * have been removed and the task is deleted this structure is
- * released back to the heap.
- *
- * The inline helper functions provide more details about the info
- * contained in this structure.
- *
- * Note, the tracer code exploits the fact an rtems_name is a
- * 32bit value.
- */
-typedef struct rtems_capture_task_s
-{
- rtems_name name;
- rtems_id id;
- uint32_t flags;
- uint32_t refcount;
- rtems_tcb* tcb;
- uint32_t in;
- uint32_t out;
- rtems_task_priority start_priority;
- uint32_t stack_size;
- uint32_t stack_clean;
- rtems_capture_time_t time;
- rtems_capture_time_t time_in;
- rtems_capture_time_t last_time;
- rtems_capture_control_t* control;
- struct rtems_capture_task_s* forw;
- struct rtems_capture_task_s* back;
-} rtems_capture_task_t;
-
-/**
* Task flags.
*/
-#define RTEMS_CAPTURE_TRACED (1U << 0)
+#define RTEMS_CAPTURE_TRACED (1U << 0)
+#define RTEMS_CAPTURE_RECORD_TASK (1U << 1)
/*
* @brief Capture record.
@@ -188,12 +152,27 @@ typedef struct rtems_capture_task_s
*/
typedef struct rtems_capture_record_s
{
- rtems_capture_task_t* task;
uint32_t events;
rtems_capture_time_t time;
size_t size;
+ rtems_id task_id;
} rtems_capture_record_t;
+/*
+ * @brief Capture task record.
+ *
+ * This is a record that is written into
+ * the buffer. The events includes the priority of the task
+ * at the time of the context switch.
+ */
+typedef struct rtems_capture_task_record_s
+{
+ rtems_capture_record_t rec;
+ rtems_name name;
+ rtems_task_priority start_priority;
+ uint32_t stack_size;
+} rtems_capture_task_record_t;
+
/**
* The capture record event flags.
*/
@@ -619,49 +598,24 @@ const char*
rtems_capture_event_text (int event);
/**
- * @brief Capture get task list.
- *
- * This function returns the head of the list of tasks that the
- * capture engine has detected.
- *
- * @retval This function returns the head of the list of tasks that
- * the capture engine has detected.
- */
-rtems_capture_task_t*
-rtems_capture_get_task_list (void);
-
-/**
- * @brief Capture get next task in list.
- *
- * This function returns the pointer to the next task in the list. The
- * pointer NULL terminates the list.
- *
- * @param[in] task The capture task to get the next entry from.
+ * @brief Capture record task.
*
- * @retval This function returns the pointer to the next task in the list. The
- * pointer NULL terminates the list.
+ * This function records a new capture task record.
+ *
+ * @param[in] tcb is the task control block for the task
*/
-static inline rtems_capture_task_t*
-rtems_capture_next_task (rtems_capture_task_t* task)
-{
- return task->forw;
-}
+void rtems_capture_record_task( rtems_tcb* tcb );
/**
- * @brief Capture is valid task control block
+ * @brief Capture task recorded
*
- * This function returns true if the task control block points to
- * a valid task.
+ * This function returns true if this task information has been
+ * recorded.
*
- * @param[in] task The capture task.
- *
- * @retval This function returns true if the task control block points to
- * a valid task. Otherwise, it returns false.
+ * @param[in] tcb is the task control block for the task
*/
-static inline bool
-rtems_capture_task_valid (rtems_capture_task_t* task)
-{
- return task->tcb != NULL;
+static inline bool rtems_capture_task_recorded( rtems_tcb* tcb ) {
+ return ( (tcb->Capture.flags & RTEMS_CAPTURE_RECORD_TASK) != 0 );
}
/**
@@ -674,9 +628,9 @@ rtems_capture_task_valid (rtems_capture_task_t* task)
* @retval This function returns the task id.
*/
static inline rtems_id
-rtems_capture_task_id (rtems_capture_task_t* task)
+rtems_capture_task_id (rtems_tcb* tcb)
{
- return task->id;
+ return tcb->Object.id;
}
/**
@@ -689,10 +643,10 @@ rtems_capture_task_id (rtems_capture_task_t* task)
* @retval This function returns the task state.
*/
static inline States_Control
-rtems_capture_task_state (rtems_capture_task_t* task)
+rtems_capture_task_state (rtems_tcb* tcb)
{
- if (rtems_capture_task_valid (task))
- return task->tcb->current_state;
+ if (tcb)
+ return tcb->current_state;
return 0;
}
@@ -706,9 +660,11 @@ rtems_capture_task_state (rtems_capture_task_t* task)
* @retval This function returns the task name.
*/
static inline rtems_name
-rtems_capture_task_name (rtems_capture_task_t* task)
+rtems_capture_task_name (rtems_tcb* tcb)
{
- return task->name;
+ rtems_name name;
+ rtems_object_get_classic_name( tcb->Object.id, &name );
+ return name;
}
/**
@@ -721,9 +677,9 @@ rtems_capture_task_name (rtems_capture_task_t* task)
* @retval This function returns the task flags.
*/
static inline uint32_t
-rtems_capture_task_flags (rtems_capture_task_t* task)
+rtems_capture_task_flags (rtems_tcb* tcb)
{
- return task->flags;
+ return tcb->Capture.flags;
}
/**
@@ -736,9 +692,9 @@ rtems_capture_task_flags (rtems_capture_task_t* task)
* @retval This function returns the task control if present.
*/
static inline rtems_capture_control_t*
-rtems_capture_task_control (rtems_capture_task_t* task)
+rtems_capture_task_control (rtems_tcb* tcb)
{
- return task->control;
+ return tcb->Capture.control;
}
/**
@@ -751,45 +707,12 @@ rtems_capture_task_control (rtems_capture_task_t* task)
* @retval This function returns the task control flags if a control is present.
*/
static inline uint32_t
-rtems_capture_task_control_flags (rtems_capture_task_t* task)
+rtems_capture_task_control_flags (rtems_tcb* tcb)
{
- if (!task->control)
+ rtems_capture_control_t* control = tcb->Capture.control;
+ if (!control)
return 0;
- return task->control->flags;
-}
-
-/**
- * @brief Capture get number of times task switched in.
- *
- * This function returns the number of times the task has
- * been switched into context.
- *
- * @param[in] task The capture task.
- *
- * @retval This function returns the number of times the task has
- * been switched into context.
- */
-static inline uint32_t
-rtems_capture_task_switched_in (rtems_capture_task_t* task)
-{
- return task->in;
-}
-
-/**
- * @brief Capture get number of times task switched out.
- *
- * This function returns the number of times the task has
- * been switched out of context.
- *
- * @param[in] task The capture task.
- *
- * @retval This function returns the number of times the task has
- * been switched out of context.
- */
-static inline uint32_t
-rtems_capture_task_switched_out (rtems_capture_task_t* task)
-{
- return task->out;
+ return control->flags;
}
/**
@@ -804,9 +727,11 @@ rtems_capture_task_switched_out (rtems_capture_task_t* task)
* to track where the task's priority goes.
*/
static inline rtems_task_priority
-rtems_capture_task_start_priority (rtems_capture_task_t* task)
+rtems_capture_task_start_priority (rtems_tcb* tcb)
{
- return task->start_priority;
+ return _RTEMS_tasks_Priority_from_Core(
+ tcb->Start.initial_priority
+ );
}
/**
@@ -819,11 +744,9 @@ rtems_capture_task_start_priority (rtems_capture_task_t* task)
* @retval This function returns the tasks real priority.
*/
static inline rtems_task_priority
-rtems_capture_task_real_priority (rtems_capture_task_t* task)
+rtems_capture_task_real_priority (rtems_tcb* tcb)
{
- if (rtems_capture_task_valid (task))
- return task->tcb->real_priority;
- return 0;
+ return tcb->real_priority;
}
/**
@@ -836,113 +759,9 @@ rtems_capture_task_real_priority (rtems_capture_task_t* task)
* @retval This function returns the tasks current priority.
*/
static inline rtems_task_priority
-rtems_capture_task_curr_priority (rtems_capture_task_t* task)
+rtems_capture_task_curr_priority (rtems_tcb* tcb)
{
- if (rtems_capture_task_valid (task))
- return task->tcb->current_priority;
- return 0;
-}
-
-/**
- * @brief Capture update stack usage.
- *
- * This function updates the stack usage. The task control block
- * is updated.
- *
- * @param[in] task The capture task.
- *
- * @retval This function updates the stack usage. The task control block
- * is updated.
- */
-uint32_t
-rtems_capture_task_stack_usage (rtems_capture_task_t* task);
-
-/**
- * @brief Capture get stack size.
- *
- * This function returns the task's stack size.
- *
- * @param[in] task The capture task.
- *
- * @retval This function returns the task's stack size.
- */
-static inline uint32_t
-rtems_capture_task_stack_size (rtems_capture_task_t* task)
-{
- return task->stack_size;
-}
-
-/**
- * @brief Capture get stack used.
- *
- * This function returns the amount of stack used.
- *
- * @param[in] task The capture task.
- *
- * @retval This function returns the amount of stack used.
- */
-static inline uint32_t
-rtems_capture_task_stack_used (rtems_capture_task_t* task)
-{
- return task->stack_size - task->stack_clean;
-}
-
-/**
- * @brief Capture get task execution time.
- *
- * This function returns the current execution time.
- *
- * @param[in] task The capture task.
- *
- * @retval This function returns the current execution time.
- */
-static inline uint64_t
-rtems_capture_task_time (rtems_capture_task_t* task)
-{
- return task->time;
-}
-
-/**
- * @brief Capture get delta in execution time.
- *
- * This function returns the execution time as a different between the
- * last time the detla time was and now.
- *
- * @param[in] task The capture task.
- *
- * @retval This function returns the execution time as a different between the
- * last time the detla time was and now.
- */
-static inline uint64_t
-rtems_capture_task_delta_time (rtems_capture_task_t* task)
-{
- uint64_t t = task->time - task->last_time;
- task->last_time = task->time;
- return t;
-}
-
-/**
- * @brief Capture get task count.
- *
- * This function returns the number of tasks the capture
- * engine knows about.
- *
- * @retval This function returns the number of tasks the capture
- * engine knows about.
- */
-static inline uint32_t
-rtems_capture_task_count (void)
-{
- rtems_capture_task_t* task = rtems_capture_get_task_list ();
- uint32_t count = 0;
-
- while (task)
- {
- count++;
- task = rtems_capture_next_task (task);
- }
-
- return count;
+ return tcb->current_priority;
}
/**
@@ -1070,7 +889,7 @@ rtems_capture_control_all_by_triggers (rtems_capture_control_t* control)
* This function returns the control valid BY flags.
*
* @param[in] control The capture control.
- * @param[in] slot The XXX.
+ * @param[in] slot The slot.
*
* @retval This function returns the control valid BY flags.
*/
@@ -1086,7 +905,7 @@ rtems_capture_control_by_valid (rtems_capture_control_t* control, int slot)
* This function returns the control @a by task name.
*
* @param[in] control The capture control.
- * @param[in] by The XXX.
+ * @param[in] by The by index.
*
* @retval This function returns the control @a by task name.
*/