[rtems-libbsd commit] EPOCH(9): Avoid inline functions

Sebastian Huber sebh at rtems.org
Tue Jul 9 12:52:35 UTC 2019


Module:    rtems-libbsd
Branch:    5-freebsd-12
Commit:    ed1a63384b3c74d98d5f40385fde768785a24b5e
Changeset: http://git.rtems.org/rtems-libbsd/commit/?id=ed1a63384b3c74d98d5f40385fde768785a24b5e

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Tue Jul  9 13:24:38 2019 +0200

EPOCH(9): Avoid inline functions

FreeBSD changed the epoch_enter() and epoch_exit() inline functions into
proper functions after a performance analysis to avoid code bloat.

---

 rtemsbsd/include/sys/epoch.h        | 29 +++--------------------------
 rtemsbsd/rtems/rtems-kernel-epoch.c | 33 ++++++++++++++++++++++++++++++++-
 2 files changed, 35 insertions(+), 27 deletions(-)

diff --git a/rtemsbsd/include/sys/epoch.h b/rtemsbsd/include/sys/epoch.h
index af36c90..4babb4b 100644
--- a/rtemsbsd/include/sys/epoch.h
+++ b/rtemsbsd/include/sys/epoch.h
@@ -36,7 +36,6 @@
 #include <sys/lock.h>
 #include <sys/pcpu.h>
 #include <rtems/score/percpudata.h>
-#include <rtems/score/threaddispatch.h>
 #endif
 #include <rtems/thread.h>
 #include <ck_epoch.h>
@@ -100,7 +99,10 @@ SYSINIT(epoch_##name, SI_SUB_TUNABLES, SI_ORDER_THIRD,			\
 void	_bsd_epoch_init(epoch_t epoch, uintptr_t pcpu_record_offset,
 	    int flags);
 
+void	epoch_enter(epoch_t epoch);
 void	epoch_enter_preempt(epoch_t epoch, epoch_tracker_t et);
+
+void	epoch_exit(epoch_t epoch);
 void	epoch_exit_preempt(epoch_t epoch, epoch_tracker_t et);
 
 void	epoch_wait(epoch_t epoch);
@@ -113,30 +115,5 @@ 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)
-
-static __inline void
-epoch_enter(epoch_t epoch)
-{
-	Per_CPU_Control *cpu_self;
-	struct epoch_record *er;
-
-	cpu_self = _Thread_Dispatch_disable();
-	er = EPOCH_GET_RECORD(cpu_self, epoch);
-	ck_epoch_begin(&er->er_record, NULL);
-}
-
-static __inline void
-epoch_exit(epoch_t epoch)
-{
-	Per_CPU_Control *cpu_self;
-	struct epoch_record *er;
-
-	cpu_self = _Per_CPU_Get();
-	er = EPOCH_GET_RECORD(cpu_self, epoch);
-	ck_epoch_end(&er->er_record, NULL);
-	_Thread_Dispatch_enable(cpu_self);
-}
 #endif /* _KERNEL */
 #endif /* _SYS_EPOCH_H_ */
diff --git a/rtemsbsd/rtems/rtems-kernel-epoch.c b/rtemsbsd/rtems/rtems-kernel-epoch.c
index 48c0cf6..c7682a6 100644
--- a/rtemsbsd/rtems/rtems-kernel-epoch.c
+++ b/rtemsbsd/rtems/rtems-kernel-epoch.c
@@ -42,9 +42,13 @@
 #include <rtems.h>
 #include <rtems/irq-extension.h>
 #include <rtems/score/smpimpl.h>
+#include <rtems/score/threaddispatch.h>
 #include <rtems/score/threadimpl.h>
 #include <rtems/score/watchdogimpl.h>
 
+#define	EPOCH_GET_RECORD(cpu_self, epoch) PER_CPU_DATA_GET_BY_OFFSET( \
+    cpu_self, struct epoch_record, epoch->e_pcpu_record_offset)
+
 EPOCH_DEFINE(_bsd_global_epoch_preempt, EPOCH_PREEMPT);
 
 EPOCH_DEFINE(_bsd_global_epoch, 0);
@@ -176,6 +180,29 @@ epoch_sysinit(void)
 SYSINIT(epoch, SI_SUB_TUNABLES, SI_ORDER_SECOND, epoch_sysinit, NULL);
 
 void
+epoch_enter(epoch_t epoch)
+{
+	Per_CPU_Control *cpu_self;
+	struct epoch_record *er;
+
+	cpu_self = _Thread_Dispatch_disable();
+	er = EPOCH_GET_RECORD(cpu_self, epoch);
+	ck_epoch_begin(&er->er_record, NULL);
+}
+
+void
+epoch_exit(epoch_t epoch)
+{
+	Per_CPU_Control *cpu_self;
+	struct epoch_record *er;
+
+	cpu_self = _Per_CPU_Get();
+	er = EPOCH_GET_RECORD(cpu_self, epoch);
+	ck_epoch_end(&er->er_record, NULL);
+	_Thread_Dispatch_enable(cpu_self);
+}
+
+void
 epoch_enter_preempt(epoch_t epoch, epoch_tracker_t et)
 {
 	Per_CPU_Control *cpu_self;
@@ -266,12 +293,16 @@ epoch_block_handler_preempt(struct ck_epoch *g __unused,
 {
 	struct epoch_record *er;
 	Per_CPU_Control *cpu_self;
-	uint32_t cpu_self_index;
 	struct epoch_tracker_mutex etm;
+#ifdef RTEMS_SMP
+	uint32_t cpu_self_index;
+#endif
 
 	er = __containerof(cr, struct epoch_record, er_record);
 	cpu_self = _Per_CPU_Get();
+#ifdef RTEMS_SMP
 	cpu_self_index = _Per_CPU_Get_index(cpu_self);
+#endif
 
 	rtems_mutex_init(&etm.etm_mtx, "epoch");
 	etm.etm_record = er;




More information about the vc mailing list