> -----Original Message----- > From: devel [mailto:devel-boun...@rtems.org] On Behalf Of Chris Johns > Sent: Thursday, July 10, 2014 8:44 PM > To: devel@rtems.org > Subject: Re: [PATCH 2/4] capture: Fix capture engine to handle new > extensions. > > > > On 10/07/2014 11:44 pm, Jennifer Averett wrote: > > --- > > cpukit/libmisc/capture/capture.c | 96 > ++++++++++++++++++++++++++++------------ > > cpukit/libmisc/capture/capture.h | 17 ++++--- > > 2 files changed, 78 insertions(+), 35 deletions(-) > > > > diff --git a/cpukit/libmisc/capture/capture.c > > b/cpukit/libmisc/capture/capture.c > > index 6f8e0a2..ec5e408 100644 > > --- a/cpukit/libmisc/capture/capture.c > > +++ b/cpukit/libmisc/capture/capture.c > > @@ -51,11 +51,41 @@ > > RTEMS_CAPTURE_DELETED_BY_EVENT | \ > > RTEMS_CAPTURE_DELETED_EVENT | \ > > RTEMS_CAPTURE_BEGIN_EVENT | \ > > - RTEMS_CAPTURE_EXITTED_EVENT) > > + RTEMS_CAPTURE_EXITTED_EVENT | \ > > + RTEMS_CAPTURE_TERMINATED_EVENT) > > #else > > #define RTEMS_CAPTURE_RECORD_EVENTS (0) > > #endif > > > > +static bool > > +rtems_capture_create_task (rtems_tcb* current_task, > > + rtems_tcb* new_task); > > + > > +static void > > +rtems_capture_start_task (rtems_tcb* current_task, > > + rtems_tcb* started_task); > > + > > +static void > > +rtems_capture_restart_task (rtems_tcb* current_task, > > + rtems_tcb* restarted_task); > > + > > +static void > > +rtems_capture_delete_task (rtems_tcb* current_task, > > + rtems_tcb* deleted_task); > > + > > +static void > > +rtems_capture_switch_task (rtems_tcb* current_task, > > + rtems_tcb* heir_task); > > + > > +static void > > +rtems_capture_begin_task (rtems_tcb* begin_task); > > + > > +static void > > +rtems_capture_exitted_task (rtems_tcb* exitted_task); > > + > > +static void > > +rtems_capture_terminated_task (rtems_tcb* terminated_task); > > + > > /* > > * Global capture flags. > > */ > > @@ -88,6 +118,18 @@ static rtems_id capture_reader; > > static rtems_interrupt_lock capture_lock = > > RTEMS_INTERRUPT_LOCK_INITIALIZER("capture"); > > > > +static rtems_extensions_table capture_extensions = { > > + .thread_create = rtems_capture_create_task, > > + .thread_start = rtems_capture_start_task, > > + .thread_restart = rtems_capture_restart_task, > > + .thread_delete = rtems_capture_delete_task, > > + .thread_switch = rtems_capture_switch_task, > > + .thread_begin = rtems_capture_begin_task, > > + .thread_exitted = rtems_capture_exitted_task, > > + .fatal = NULL, > > + .thread_terminate = rtems_capture_terminated_task }; > > + > > This should be const so it lives in the program text. A requirement has always > been to not use any RAM if not enabled and linked in and the requirement is > mostly met with just a few pointers plus the lock. > Fixed
> > /* > > * RTEMS Event text. > > */ > > @@ -101,6 +143,7 @@ static const char* capture_event_text[] = > > "RESTARTED", > > "DELETED_BY", > > "DELETED", > > + "TERMINATED", > > "BEGIN", > > "EXITTED", > > "SWITCHED_OUT", > > @@ -787,21 +830,28 @@ rtems_capture_exitted_task (rtems_tcb* > exitted_task) > > static void > > rtems_capture_terminated_task (rtems_tcb* terminated_task) > > { > > - rtems_capture_delete_task (terminated_task, terminated_task); -} > > + /* > > + * Get the capture task control block so we can trace this > > + * event. > > + */ > > + rtems_capture_task_t* tt; > > > > -/* > > - * This function is called when a fatal error occurs. > > - */ > > -static void > > -rtems_capture_fatal( > > - Internal_errors_Source source, > > - bool is_internal, > > - Internal_errors_t code > > -) > > -{ > > + tt = terminated_task->extensions[capture_extension_index]; > > + > > + /* > > + * The task pointers may not be known as the task may have > > + * been created before the capture engine was open. Add them. > > + */ > > + > > + if (tt == NULL) > > + tt = rtems_capture_create_capture_task (terminated_task); > > + > > + if (rtems_capture_trigger (NULL, tt, RTEMS_CAPTURE_TERMINATED)) > > + rtems_capture_record (tt, RTEMS_CAPTURE_TERMINATED_EVENT); > > + > > + rtems_capture_task_stack_usage (tt); > > } > > - > > + > > /* > > * This function is called when a context is switched. > > */ > > @@ -887,7 +937,6 @@ rtems_capture_switch_task (rtems_tcb* > current_task, > > rtems_status_code > > rtems_capture_open (uint32_t size, rtems_capture_timestamp > timestamp __attribute__((unused))) > > { > > - rtems_extensions_table capture_extensions; > > rtems_name name; > > rtems_status_code sc; > > > > @@ -913,19 +962,6 @@ rtems_capture_open (uint32_t size, > rtems_capture_timestamp timestamp __attribu > > capture_floor = 255; > > > > /* > > - * Create the extension table. This is copied so we > > - * can create it as a local. > > - */ > > - capture_extensions.thread_create = rtems_capture_create_task; > > - capture_extensions.thread_start = rtems_capture_start_task; > > - capture_extensions.thread_restart = rtems_capture_restart_task; > > - capture_extensions.thread_delete = rtems_capture_delete_task; > > - capture_extensions.thread_switch = rtems_capture_switch_task; > > - capture_extensions.thread_begin = rtems_capture_begin_task; > > - capture_extensions.thread_exitted = rtems_capture_exitted_task; > > - capture_extensions.fatal = NULL; > > - > > - /* > > * Register the user extension handlers for the CAPture Engine. > > */ > > name = rtems_build_name ('C', 'A', 'P', 'E'); @@ -1341,6 +1377,8 > > @@ rtems_capture_map_trigger (rtems_capture_trigger_t trigger) > > return RTEMS_CAPTURE_BEGIN; > > case rtems_capture_exitted: > > return RTEMS_CAPTURE_EXITTED; > > + case rtems_capture_terminated: > > + return RTEMS_CAPTURE_TERMINATED; > > default: > > break; > > } > > @@ -1542,6 +1580,8 @@ rtems_capture_read (uint32_t > > threshold, > > *read = 0; > > *recs = NULL; > > > > + /* XXX read or rec == NULL? */ > > + > > What does this mean ? > > If we support doxygen should be use something that can be parsed and > collected ? This was a comment that slipped in. It was a note to ask if we should check that the read and recs parameters were null. > > rtems_interrupt_lock_acquire (&capture_lock, &lock_context); > > > > /* > > diff --git a/cpukit/libmisc/capture/capture.h > > b/cpukit/libmisc/capture/capture.h > > index fa82f6d..737c73f 100644 > > --- a/cpukit/libmisc/capture/capture.h > > +++ b/cpukit/libmisc/capture/capture.h > > @@ -120,6 +120,7 @@ typedef struct rtems_capture_control_s > > #define RTEMS_CAPTURE_DELETE (1 << 4) > > #define RTEMS_CAPTURE_BEGIN (1 << 5) > > #define RTEMS_CAPTURE_EXITTED (1 << 6) > > +#define RTEMS_CAPTURE_TERMINATED (1 << 7) > > > > #define RTEMS_CAPTURE_FROM_TRIGS (RTEMS_CAPTURE_SWITCH | \ > > RTEMS_CAPTURE_CREATE | \ @@ > > -208,12 +209,13 @@ typedef struct rtems_capture_record_s > > #define RTEMS_CAPTURE_RESTARTED_EVENT UINT32_C (0x00200000) > > #define RTEMS_CAPTURE_DELETED_BY_EVENT UINT32_C (0x00400000) > > #define RTEMS_CAPTURE_DELETED_EVENT UINT32_C (0x00800000) > > -#define RTEMS_CAPTURE_BEGIN_EVENT UINT32_C (0x01000000) > > -#define RTEMS_CAPTURE_EXITTED_EVENT UINT32_C (0x02000000) > > -#define RTEMS_CAPTURE_SWITCHED_OUT_EVENT UINT32_C > (0x04000000) > > -#define RTEMS_CAPTURE_SWITCHED_IN_EVENT UINT32_C (0x08000000) > > -#define RTEMS_CAPTURE_TIMESTAMP UINT32_C (0x10000000) > > -#define RTEMS_CAPTURE_EVENT_END (28) > > +#define RTEMS_CAPTURE_TERMINATED_EVENT UINT32_C (0x01000000) > > +#define RTEMS_CAPTURE_BEGIN_EVENT UINT32_C (0x02000000) > > +#define RTEMS_CAPTURE_EXITTED_EVENT UINT32_C (0x04000000) > > +#define RTEMS_CAPTURE_SWITCHED_OUT_EVENT UINT32_C > (0x08000000) > > +#define RTEMS_CAPTURE_SWITCHED_IN_EVENT UINT32_C > (0x10000000) > > +#define RTEMS_CAPTURE_TIMESTAMP UINT32_C (0x20000000) > > +#define RTEMS_CAPTURE_EVENT_END (29) > > > > /** > > * @brief Capture trigger modes > > @@ -240,7 +242,8 @@ typedef enum rtems_capture_trigger_e > > rtems_capture_restart, > > rtems_capture_delete, > > rtems_capture_begin, > > - rtems_capture_exitted > > + rtems_capture_exitted, > > + rtems_capture_terminated > > } rtems_capture_trigger_t; > > > > /** > > > _______________________________________________ > devel mailing list > devel@rtems.org > http://lists.rtems.org/mailman/listinfo/devel _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel