[rtems-libbsd commit] ZONE(9): Enable per-processor cache for SMP

Sebastian Huber sebh at rtems.org
Fri Mar 6 14:07:20 UTC 2015


Module:    rtems-libbsd
Branch:    master
Commit:    e5db084cd8a9dbbb9b11582686012a294535bba9
Changeset: http://git.rtems.org/rtems-libbsd/commit/?id=e5db084cd8a9dbbb9b11582686012a294535bba9

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Fri Mar  6 13:58:45 2015 +0100

ZONE(9): Enable per-processor cache for SMP

This prevents a potential deadlock via the Giant lock and is a
performance benefit.

---

 freebsd/sys/sys/systm.h   |  4 ++--
 freebsd/sys/vm/uma_core.c | 12 ++++++++++++
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/freebsd/sys/sys/systm.h b/freebsd/sys/sys/systm.h
index 18ca646..5f894cf 100644
--- a/freebsd/sys/sys/systm.h
+++ b/freebsd/sys/sys/systm.h
@@ -209,13 +209,13 @@ void	critical_exit(void);
 static __inline void
 critical_enter(void)
 {
-	_Thread_Disable_dispatch();
+	_Thread_Dispatch_disable();
 }
 
 static __inline void
 critical_exit(void)
 {
-	_Thread_Enable_dispatch();
+	_Thread_Dispatch_enable(_Per_CPU_Get());
 }
 #endif /* __rtems__ */
 void	init_param1(void);
diff --git a/freebsd/sys/vm/uma_core.c b/freebsd/sys/vm/uma_core.c
index 8a88caa..f2045d3 100644
--- a/freebsd/sys/vm/uma_core.c
+++ b/freebsd/sys/vm/uma_core.c
@@ -89,6 +89,18 @@ __FBSDID("$FreeBSD$");
 #include <vm/uma_dbg.h>
 
 #include <ddb/ddb.h>
+#ifdef __rtems__
+  #ifdef RTEMS_SMP
+    /*
+     * It is essential that we have a per-processor cache, otherwise the
+     * critical_enter()/critical_exit() protection would be insufficient.
+     */
+    #undef curcpu
+    #define curcpu rtems_get_current_processor()
+    #undef mp_maxid
+    #define mp_maxid rtems_get_processor_count()
+  #endif
+#endif /* __rtems__ */
 
 /*
  * This is the zone and keg from which all zones are spawned.  The idea is that



More information about the vc mailing list