Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 22 Apr 2012 20:23:35 +0000 (UTC)
From:      Nathan Whitehorn <nwhitehorn@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r234583 - head/sys/powerpc/include
Message-ID:  <201204222023.q3MKNZ0X055281@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: nwhitehorn
Date: Sun Apr 22 20:23:34 2012
New Revision: 234583
URL: http://svn.freebsd.org/changeset/base/234583

Log:
  On non-64-bit systems (which generally don't have lwsync), use eieio and
  isync to implement read and write barriers, following Appendix B.2 of
  Book II of the architecture manual. This provides a 25% speed increase
  to fork() on the PowerPC G4.

Modified:
  head/sys/powerpc/include/atomic.h

Modified: head/sys/powerpc/include/atomic.h
==============================================================================
--- head/sys/powerpc/include/atomic.h	Sun Apr 22 20:14:33 2012	(r234582)
+++ head/sys/powerpc/include/atomic.h	Sun Apr 22 20:23:34 2012	(r234583)
@@ -38,8 +38,13 @@
 
 /* NOTE: lwsync is equivalent to sync on systems without lwsync */
 #define mb()	__asm __volatile("lwsync" : : : "memory")
+#ifdef __powerpc64__
 #define wmb()	__asm __volatile("lwsync" : : : "memory")
 #define rmb()	__asm __volatile("lwsync" : : : "memory")
+#else
+#define wmb()	__asm __volatile("eieio" : : : "memory")
+#define rmb()	__asm __volatile("isync" : : : "memory")
+#endif
 
 /*
  * atomic_add(p, v)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201204222023.q3MKNZ0X055281>