summaryrefslogtreecommitdiffstats
path: root/cpukit/rtems/src/ratemonresetstatistics.c
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/rtems/src/ratemonresetstatistics.c')
-rw-r--r--cpukit/rtems/src/ratemonresetstatistics.c47
1 files changed, 11 insertions, 36 deletions
diff --git a/cpukit/rtems/src/ratemonresetstatistics.c b/cpukit/rtems/src/ratemonresetstatistics.c
index 1256409a21..b146e6acb2 100644
--- a/cpukit/rtems/src/ratemonresetstatistics.c
+++ b/cpukit/rtems/src/ratemonresetstatistics.c
@@ -18,49 +18,24 @@
#include "config.h"
#endif
-#include <rtems/system.h>
-#include <rtems/rtems/status.h>
-#include <rtems/rtems/support.h>
-#include <rtems/score/isr.h>
#include <rtems/rtems/ratemonimpl.h>
-#include <rtems/score/thread.h>
-
-/*
- * rtems_rate_monotonic_reset_statistics
- *
- * This directive allows a thread to reset the statistics information
- * on a specific period instance.
- *
- * Input parameters:
- * id - rate monotonic id
- *
- * Output parameters:
- * RTEMS_SUCCESSFUL - if successful
- * error code - if unsuccessful
- *
- */
rtems_status_code rtems_rate_monotonic_reset_statistics(
rtems_id id
)
{
- Objects_Locations location;
- Rate_monotonic_Control *the_period;
-
- the_period = _Rate_monotonic_Get( id, &location );
- switch ( location ) {
+ Rate_monotonic_Control *the_period;
+ ISR_lock_Context lock_context;
+ Thread_Control *owner;
- case OBJECTS_LOCAL:
- _Rate_monotonic_Reset_statistics( the_period );
- _Objects_Put( &the_period->Object );
- return RTEMS_SUCCESSFUL;
-
-#if defined(RTEMS_MULTIPROCESSING)
- case OBJECTS_REMOTE: /* should never return this */
-#endif
- case OBJECTS_ERROR:
- break;
+ the_period = _Rate_monotonic_Get( id, &lock_context );
+ if ( the_period == NULL ) {
+ return RTEMS_INVALID_ID;
}
- return RTEMS_INVALID_ID;
+ owner = the_period->owner;
+ _Rate_monotonic_Acquire_critical( owner, &lock_context );
+ _Rate_monotonic_Reset_statistics( the_period );
+ _Rate_monotonic_Release( owner, &lock_context );
+ return RTEMS_SUCCESSFUL;
}