summaryrefslogtreecommitdiffstats
path: root/sys/powerpc/include
diff options
context:
space:
mode:
authornwhitehorn <nwhitehorn@FreeBSD.org>2012-04-22 20:23:34 +0000
committernwhitehorn <nwhitehorn@FreeBSD.org>2012-04-22 20:23:34 +0000
commit9735a829855418c1921d6e55aef20eae4cb177be (patch)
treea2ae4302a317e779962b2fd88bbdc09f8e6c195b /sys/powerpc/include
parent086dac3dc0518572e2b498bf25768f4457eba105 (diff)
downloadFreeBSD-src-9735a829855418c1921d6e55aef20eae4cb177be.zip
FreeBSD-src-9735a829855418c1921d6e55aef20eae4cb177be.tar.gz
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.
Diffstat (limited to 'sys/powerpc/include')
-rw-r--r--sys/powerpc/include/atomic.h5
1 files changed, 5 insertions, 0 deletions
diff --git a/sys/powerpc/include/atomic.h b/sys/powerpc/include/atomic.h
index 9a77dc2..5ff64fb 100644
--- a/sys/powerpc/include/atomic.h
+++ b/sys/powerpc/include/atomic.h
@@ -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)
OpenPOWER on IntegriCloud