diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2019-01-15 15:35:11 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2019-01-22 13:14:33 +0100 |
commit | 0389b30dd928dbebb138f6b98b214380ddcb2289 (patch) | |
tree | db528f895149bf006530661d73c91b9390676a9f /rtemsbsd | |
parent | dpaa: Use if_transmit instead of legacy if_start (diff) | |
download | rtems-libbsd-0389b30dd928dbebb138f6b98b214380ddcb2289.tar.bz2 |
Fix INVARIANTS support
Diffstat (limited to 'rtemsbsd')
-rw-r--r-- | rtemsbsd/include/sys/epoch.h | 5 | ||||
-rw-r--r-- | rtemsbsd/rtems/rtems-kernel-epoch.c | 32 |
2 files changed, 35 insertions, 2 deletions
diff --git a/rtemsbsd/include/sys/epoch.h b/rtemsbsd/include/sys/epoch.h index d268efff..af36c90e 100644 --- a/rtemsbsd/include/sys/epoch.h +++ b/rtemsbsd/include/sys/epoch.h @@ -109,8 +109,9 @@ void epoch_wait_preempt(epoch_t epoch); void epoch_call(epoch_t epoch, epoch_context_t ctx, void (*callback) (epoch_context_t)); -int in_epoch(epoch_t epoch); -int in_epoch_verbose(epoch_t epoch, int dump_onfail); +int _bsd_in_epoch(epoch_t epoch); +#define in_epoch(epoch) _bsd_in_epoch(epoch) +#define in_epoch_verbose(epoch, dump_onfail) _bsd_in_epoch(epoch) #define EPOCH_GET_RECORD(cpu_self, epoch) PER_CPU_DATA_GET_BY_OFFSET( \ cpu_self, struct epoch_record, epoch->e_pcpu_record_offset) diff --git a/rtemsbsd/rtems/rtems-kernel-epoch.c b/rtemsbsd/rtems/rtems-kernel-epoch.c index f88c9853..e8e24060 100644 --- a/rtemsbsd/rtems/rtems-kernel-epoch.c +++ b/rtemsbsd/rtems/rtems-kernel-epoch.c @@ -33,6 +33,9 @@ #include <sys/types.h> #include <sys/kernel.h> #include <sys/epoch.h> +#ifdef INVARIANTS +#include <sys/systm.h> +#endif #include <machine/cpu.h> @@ -322,3 +325,32 @@ epoch_call(epoch_t epoch, epoch_context_t ctx, ck_epoch_call(&er->er_record, ctx, callback); _Thread_Dispatch_enable(cpu_self); } + +#ifdef INVARIANTS +int +_bsd_in_epoch(epoch_t epoch) +{ + Per_CPU_Control *cpu_self; + Thread_Control *executing; + struct epoch_record *er; + struct epoch_pcpu *epcpu; + struct epoch_tracker *tdwait; + int in; + + in = 0; + cpu_self = _Thread_Dispatch_disable(); + executing = _Per_CPU_Get_executing(cpu_self); + epcpu = PER_CPU_DATA_GET(cpu_self, struct epoch_pcpu, epoch); + er = EPOCH_GET_RECORD(cpu_self, epoch); + + TAILQ_FOREACH(tdwait, &er->er_tdlist, et_link) { + if (tdwait->et_td == executing) { + in = 1; + break; + } + } + + _Thread_Dispatch_enable(cpu_self); + return (in); +} +#endif |