svn commit: r203720 - in projects/ppc64/sys: cddl/contrib/opensolaris/common/atomic/powerpc64 modules/opensolaris modules/zfs

Nathan Whitehorn nwhitehorn at FreeBSD.org
Tue Feb 9 20:18:14 UTC 2010


Author: nwhitehorn
Date: Tue Feb  9 20:18:14 2010
New Revision: 203720
URL: http://svn.freebsd.org/changeset/base/203720

Log:
  Provide 64-bit atomics for ZFS and OpenSolaris compat on PPC64.

Added:
  projects/ppc64/sys/cddl/contrib/opensolaris/common/atomic/powerpc64/
  projects/ppc64/sys/cddl/contrib/opensolaris/common/atomic/powerpc64/opensolaris_atomic.S
Modified:
  projects/ppc64/sys/modules/opensolaris/Makefile
  projects/ppc64/sys/modules/zfs/Makefile

Added: projects/ppc64/sys/cddl/contrib/opensolaris/common/atomic/powerpc64/opensolaris_atomic.S
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/ppc64/sys/cddl/contrib/opensolaris/common/atomic/powerpc64/opensolaris_atomic.S	Tue Feb  9 20:18:14 2010	(r203720)
@@ -0,0 +1,69 @@
+/*-
+ * Copyright (C) 2010 Nathan Whitehorn
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <machine/asm.h>
+
+ENTRY(atomic_add_64_nv)
+   1:	ldarx	%r5,0,%r3
+	add	%r5,%r4,%r5
+	stdcx.	%r5,0,%r3
+	bne-	1b
+
+	mr	%r3,%r5
+	blr
+
+ENTRY(atomic_cas_64)
+   1:	ldarx	%r6,0,%r3
+	cmpld	%r6,%r4
+	bne	2f
+	stdcx.	%r5,0,%r3
+	bne-	1b
+	b	3f
+
+   2:	stdcx.	%r6,0,%r3	/* clear reservation */
+
+   3:	mr	%r3,%r6
+	blr
+
+ENTRY(atomic_or_8_nv)
+	rldicr	%r6,%r3,61,2		/* r6 = r3 & ~4 */ 
+	sub	%r7,%r3,%r6		/* offset in r7 */
+	sldi	%r7,%r7,3		/* bits to shift in r7 */
+
+	rlwinm	%r4,%r4,0,23,31		/* mask and rotate the argument */
+	slw	%r4,%r4,%r7
+
+   1:	lwarx	%r5,0,%r6
+	or	%r5,%r4,%r5
+	stwcx.	%r5,0,%r3
+	bne-	1b
+
+	srw	%r3,%r5,%r7
+	rlwinm	%r3,%r3,0,23,31
+	blr
+
+ENTRY(membar_producer)
+	eieio
+

Modified: projects/ppc64/sys/modules/opensolaris/Makefile
==============================================================================
--- projects/ppc64/sys/modules/opensolaris/Makefile	Tue Feb  9 19:37:12 2010	(r203719)
+++ projects/ppc64/sys/modules/opensolaris/Makefile	Tue Feb  9 20:18:14 2010	(r203720)
@@ -8,7 +8,7 @@ SRCS=		opensolaris.c		\
 		opensolaris_kmem.c	\
 		opensolaris_misc.c
 
-.if ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "amd64" || ${MACHINE_ARCH} == "ia64" || ${MACHINE_ARCH} == "sparc64"
+.if ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "amd64" || ${MACHINE_ARCH} == "ia64" || ${MACHINE_ARCH} == "sparc64" || ${MACHINE_ARCH} == "powerpc64"
 .PATH:	${.CURDIR}/../../cddl/contrib/opensolaris/common/atomic/${MACHINE_ARCH}
 SRCS+=		opensolaris_atomic.S
 .else

Modified: projects/ppc64/sys/modules/zfs/Makefile
==============================================================================
--- projects/ppc64/sys/modules/zfs/Makefile	Tue Feb  9 19:37:12 2010	(r203719)
+++ projects/ppc64/sys/modules/zfs/Makefile	Tue Feb  9 20:18:14 2010	(r203720)
@@ -27,7 +27,7 @@ SRCS+=	opensolaris_taskq.c
 SRCS+=	opensolaris_vfs.c
 SRCS+=	opensolaris_zone.c
 
-.if ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "amd64" || ${MACHINE_ARCH} == "ia64" || ${MACHINE_ARCH} == "sparc64"
+.if ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "amd64" || ${MACHINE_ARCH} == "ia64" || ${MACHINE_ARCH} == "sparc64" || ${MACHINE_ARCH} == "powerpc64"
 .PATH:	${SUNW}/common/atomic/${MACHINE_ARCH}
 SRCS+=	opensolaris_atomic.S
 .else


More information about the svn-src-projects mailing list