summaryrefslogtreecommitdiff
path: root/cpukit/include/rtems/record.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/include/rtems/record.h')
-rw-r--r--cpukit/include/rtems/record.h65
1 files changed, 24 insertions, 41 deletions
diff --git a/cpukit/include/rtems/record.h b/cpukit/include/rtems/record.h
index 8535ce4d06..57b1eaeb8b 100644
--- a/cpukit/include/rtems/record.h
+++ b/cpukit/include/rtems/record.h
@@ -56,8 +56,6 @@ typedef struct Record_Configured_control Record_Configured_control;
typedef struct {
Record_Control *control;
unsigned int head;
- unsigned int increment;
- unsigned int final_head;
uint32_t now;
rtems_interrupt_level level;
} rtems_record_context;
@@ -106,13 +104,12 @@ static inline unsigned int _Record_Capacity(
return ( tail - head - 1U ) & control->mask;
}
-static inline unsigned int _Record_Increment(
+static inline unsigned int _Record_Index(
const Record_Control *control,
- unsigned int index,
- unsigned int increment
+ unsigned int index
)
{
- return ( index + increment ) & control->mask;
+ return index & control->mask;
}
static inline unsigned int _Record_Head( const Record_Control *control )
@@ -125,22 +122,25 @@ static inline unsigned int _Record_Tail( const Record_Control *control )
return _Atomic_Load_uint( &control->tail, ATOMIC_ORDER_RELAXED );
}
+static inline bool _Record_Is_overflow(
+ const Record_Control *control,
+ unsigned int tail
+)
+{
+ return _Record_Head( control ) - tail >= ( control->mask + 1U );
+}
+
static inline rtems_counter_ticks _Record_Now( void )
{
return rtems_counter_read();
}
-static inline void rtems_record_prepare_inline(
- rtems_record_context *context,
- unsigned int count
-)
+static inline void rtems_record_prepare_inline( rtems_record_context *context )
{
rtems_interrupt_level level;
const Per_CPU_Control *cpu_self;
Record_Control *control;
unsigned int head;
- unsigned int tail;
- unsigned int capacity;
rtems_interrupt_local_disable( level );
context->now = RTEMS_RECORD_TIME_EVENT( _Record_Now(), 0 );
@@ -149,18 +149,7 @@ static inline void rtems_record_prepare_inline(
control = cpu_self->record;
context->control = control;
head = _Record_Head( control );
- tail = _Record_Tail( control );
- capacity = _Record_Capacity( control, head, tail );
context->head = head;
-
- if ( RTEMS_PREDICT_TRUE( capacity > count ) ) {
- context->increment = 1;
- } else {
- context->increment = 0;
- count = capacity > 0 ? 1U : 0U;
- }
-
- context->final_head = _Record_Increment( control, head, count );
}
static inline void rtems_record_add_inline(
@@ -175,13 +164,10 @@ static inline void rtems_record_add_inline(
control = context->control;
head = context->head;
- item = &control->Items[ head ];
- context->head = _Record_Increment( control, head, context->increment );
+ item = &control->Items[ _Record_Index( control, head ) ];
+ context->head = head + 1;
- item->event = RTEMS_RECORD_TIME_EVENT(
- context->now,
- event & -( (uint32_t) context->increment )
- );
+ item->event = RTEMS_RECORD_TIME_EVENT( context->now, event );
item->data = data;
}
@@ -194,23 +180,13 @@ static inline void rtems_record_commit_inline(
rtems_record_add_inline( context, event, data );
_Atomic_Store_uint(
&context->control->head,
- context->final_head,
+ context->head,
ATOMIC_ORDER_RELEASE
);
rtems_interrupt_local_enable( context->level );
}
-static inline bool rtems_record_is_overflow(
- const rtems_record_context *context
-)
-{
- return context->increment == 0;
-}
-
-rtems_record_context *rtems_record_prepare(
- rtems_record_context *context,
- unsigned int count
-);
+rtems_record_context *rtems_record_prepare( rtems_record_context *context );
rtems_record_context *rtems_record_add(
rtems_record_context *context,
@@ -226,6 +202,13 @@ void rtems_record_commit(
void rtems_record_produce( rtems_record_event event, rtems_record_data data );
+void rtems_record_produce_2(
+ rtems_record_event event_0,
+ rtems_record_data data_0,
+ rtems_record_event event_1,
+ rtems_record_data data_1
+);
+
typedef void ( *rtems_record_visitor )(
const rtems_record_item *items,
size_t count,