svn commit: r210193 - in head/sys: cddl/contrib/opensolaris/common/atomic/powerpc64 modules modules/opensolaris modules/zfs

Nathan Whitehorn nwhitehorn at FreeBSD.org
Sat Jul 17 13:34:01 UTC 2010


Author: nwhitehorn
Date: Sat Jul 17 13:34:01 2010
New Revision: 210193
URL: http://svn.freebsd.org/changeset/base/210193

Log:
  Add OpenSolaris atomics for powerpc64 and connect ZFS to the build on
  this platform.
  
  Reviewed by:	pjd

Added:
  head/sys/cddl/contrib/opensolaris/common/atomic/powerpc64/
  head/sys/cddl/contrib/opensolaris/common/atomic/powerpc64/opensolaris_atomic.S   (contents, props changed)
Modified:
  head/sys/modules/Makefile
  head/sys/modules/opensolaris/Makefile
  head/sys/modules/zfs/Makefile

Added: head/sys/cddl/contrib/opensolaris/common/atomic/powerpc64/opensolaris_atomic.S
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sys/cddl/contrib/opensolaris/common/atomic/powerpc64/opensolaris_atomic.S	Sat Jul 17 13:34:01 2010	(r210193)
@@ -0,0 +1,75 @@
+/*-
+ * 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.
+ *
+ * $FreeBSD$
+ */
+
+#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)
+	li	%r6,3
+	andc.	%r6,%r3,%r6		/* r6 = r3 & ~4 */ 
+	addi	%r7,%r6,3
+	sub	%r7,%r7,%r3		/* offset in r7 */
+	sldi	%r7,%r7,3		/* bits to shift in r7 */
+
+	rlwinm	%r4,%r4,0,24,31		/* mask and rotate the argument */
+	slw	%r4,%r4,%r7
+
+   1:	lwarx	%r5,0,%r6
+	or	%r5,%r4,%r5
+	stwcx.	%r5,0,%r6
+	bne-	1b
+
+	srw	%r3,%r5,%r7
+	rlwinm	%r3,%r3,0,24,31		/* mask return value */
+	
+	blr
+
+ENTRY(membar_producer)
+	eieio
+	blr
+

Modified: head/sys/modules/Makefile
==============================================================================
--- head/sys/modules/Makefile	Sat Jul 17 13:31:27 2010	(r210192)
+++ head/sys/modules/Makefile	Sat Jul 17 13:34:01 2010	(r210193)
@@ -624,6 +624,15 @@ _smbfs=		smbfs
 _sound=		sound
 .endif
 
+.if ${MACHINE_ARCH} == "powerpc64"
+.if ${MK_CDDL} != "no" || defined(ALL_MODULES)
+_opensolaris=	opensolaris
+.endif
+.if ${MK_ZFS} != "no" || defined(ALL_MODULES)
+_zfs=		zfs
+.endif
+.endif
+
 .if ${MACHINE_ARCH} == "sparc64"
 _auxio=		auxio
 _em=		em

Modified: head/sys/modules/opensolaris/Makefile
==============================================================================
--- head/sys/modules/opensolaris/Makefile	Sat Jul 17 13:31:27 2010	(r210192)
+++ head/sys/modules/opensolaris/Makefile	Sat Jul 17 13:34:01 2010	(r210193)
@@ -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: head/sys/modules/zfs/Makefile
==============================================================================
--- head/sys/modules/zfs/Makefile	Sat Jul 17 13:31:27 2010	(r210192)
+++ head/sys/modules/zfs/Makefile	Sat Jul 17 13:34:01 2010	(r210193)
@@ -27,7 +27,7 @@ SRCS+=	opensolaris_uio.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-head mailing list