diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-03-18 11:49:38 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-03-19 08:34:26 +0100 |
commit | ff25926701a7c4e8cf0858bc8f41133e7d7dd45a (patch) | |
tree | c3ca823580022af719f01fc554407cfbda9dd3f2 /cpukit/score/src/debugisthreaddispatchingallowed.c | |
parent | posix: Use interal mutex for once implementation (diff) | |
download | rtems-ff25926701a7c4e8cf0858bc8f41133e7d7dd45a.tar.bz2 |
score: Delete _Assert_Thread_dispatching_repressed
Add _Debug_Is_thread_dispatching_allowed(). This makes it possible to
assert the opposite.
Use _ISR_Disable_without_giant()/_ISR_Enable_without_giant() to avoid
misleading secondary assertion failures.
Diffstat (limited to 'cpukit/score/src/debugisthreaddispatchingallowed.c')
-rw-r--r-- | cpukit/score/src/debugisthreaddispatchingallowed.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/cpukit/score/src/debugisthreaddispatchingallowed.c b/cpukit/score/src/debugisthreaddispatchingallowed.c new file mode 100644 index 0000000000..fa5b502471 --- /dev/null +++ b/cpukit/score/src/debugisthreaddispatchingallowed.c @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2013-2014 embedded brains GmbH. All rights reserved. + * + * embedded brains GmbH + * Dornierstr. 4 + * 82178 Puchheim + * Germany + * <rtems@embedded-brains.de> + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + */ + +#if HAVE_CONFIG_H + #include "config.h" +#endif + +#include <rtems/score/assert.h> +#include <rtems/score/isr.h> +#include <rtems/score/threaddispatch.h> + +#if defined( RTEMS_DEBUG ) + bool _Debug_Is_thread_dispatching_allowed( void ) + { + bool dispatch_allowed; + ISR_Level level; + Per_CPU_Control *per_cpu; + + _ISR_Disable_without_giant( level ); + per_cpu = _Per_CPU_Get_by_index( _SMP_Get_current_processor() ); + dispatch_allowed = per_cpu->thread_dispatch_disable_level == 0; + _ISR_Enable_without_giant( level ); + + return dispatch_allowed && _ISR_Get_level() == 0; + } +#endif |