summaryrefslogtreecommitdiffstats
path: root/rtemsbsd/rtems
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2019-01-15 15:35:11 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2019-01-22 13:14:33 +0100
commit0389b30dd928dbebb138f6b98b214380ddcb2289 (patch)
treedb528f895149bf006530661d73c91b9390676a9f /rtemsbsd/rtems
parentdpaa: Use if_transmit instead of legacy if_start (diff)
downloadrtems-libbsd-0389b30dd928dbebb138f6b98b214380ddcb2289.tar.bz2
Fix INVARIANTS support
Diffstat (limited to 'rtemsbsd/rtems')
-rw-r--r--rtemsbsd/rtems/rtems-kernel-epoch.c32
1 files changed, 32 insertions, 0 deletions
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