PERFORCE change 119718 for review

Roman Divacky rdivacky at FreeBSD.org
Sat May 12 08:49:40 UTC 2007


http://perforce.freebsd.org/chv.cgi?CH=119718

Change 119718 by rdivacky at rdivacky_witten on 2007/05/12 08:49:14

	Linux32_support.s WIP.

Affected files ...

.. //depot/projects/soc2007/rdivacky/linux_futex/sys/amd64/linux32/linux32_support.s#3 edit

Differences ...

==== //depot/projects/soc2007/rdivacky/linux_futex/sys/amd64/linux32/linux32_support.s#3 (text+ko) ====

@@ -1,5 +1,5 @@
 /*-
- * Copyright (c) 1993 The Regents of the University of California.
+ * Copyright (c) 2007 The FreeBSD Project
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -29,8 +29,8 @@
  * $FreeBSD$
  */
 
-#include "linux32_assym.h"                        /* system definitions */
-#include <machine/asmacros.h>                   /* miscellaneous asm macros */
+#include "linux32_assym.h"		/* system definitions */
+#include <machine/asmacros.h>		/* miscellaneous asm macros */
 
 #include "assym.s"
 
@@ -39,96 +39,87 @@
 /*****************************************************************************/
 
 futex_fault:
-	movq	$0,PCB_ONFAULT(%rcx)
-	movq	$-EFAULT,%rax
+	movq	$0,PCB_ONFAULT(%r8)
+	movl	$-EFAULT,%eax
 	ret
 
 ENTRY(futex_xchgl)
-	movq	PCPU(CURPCB),%rcx
-	movq	$futex_fault,PCB_ONFAULT(%rcx)
-
+	movq	PCPU(CURPCB),%r8
+	movq	$futex_fault,PCB_ONFAULT(%r8)
 	movq	$VM_MAXUSER_ADDRESS-4,%rax
 	cmpq	%rax,%rsi
 	ja	futex_fault
-
-	movl	(%rsi),%eax
-	movl	%eax,(%rdx)
-#ifdef SMP
-	lock
-#endif
 	xchgl	%edi,(%rsi)
+	movl	%edi,(%rdx)
 	xorl	%eax,%eax
-	movq	%rax,PCB_ONFAULT(%rcx)
+	movq	%rax,PCB_ONFAULT(%r8)
 	ret
 
 ENTRY(futex_addl)
-	movq	PCPU(CURPCB),%rcx
-	movq	$futex_fault,PCB_ONFAULT(%rcx)
-
+	movq	PCPU(CURPCB),%r8
+	movq	$futex_fault,PCB_ONFAULT(%r8)
 	movq	$VM_MAXUSER_ADDRESS-4,%rax
 	cmpq	%rax,%rsi
 	ja	futex_fault
-
-	movl	(%rsi),%eax
-	movl	%eax,(%rdx)
 #ifdef SMP
 	lock
 #endif
 	xaddl	%edi,(%rsi)
+	movl	%edi,(%rdx)
 	xorl	%eax,%eax
-	movq	%rax,PCB_ONFAULT(%rcx)
+	movq	%rax,PCB_ONFAULT(%r8)
 	ret
 
 ENTRY(futex_orl)
-	movq	PCPU(CURPCB),%rcx
-	movq	$futex_fault,PCB_ONFAULT(%rcx)
-
+	movq	PCPU(CURPCB),%r8
+	movq	$futex_fault,PCB_ONFAULT(%r8)
 	movq	$VM_MAXUSER_ADDRESS-4,%rax
 	cmpq	%rax,%rsi
 	ja	futex_fault
-
 	movl	(%rsi),%eax
-	movl	%eax,(%rdx)
+1:	movl	%eax,%ecx
+	orl	%edi,%ecx
 #ifdef SMP
 	lock
 #endif
-	orl	%edi,(%rsi)
+	cmpxchgl %ecx,(%rsi)
+	jnz	1b
 	xorl	%eax,%eax
-	movq	%rax,PCB_ONFAULT(%rcx)
+	movq	%rax,PCB_ONFAULT(%r8)
 	ret
 
 ENTRY(futex_andl)
-	movq	PCPU(CURPCB),%rcx
-	movq	$futex_fault,PCB_ONFAULT(%rcx)
-
+	movq	PCPU(CURPCB),%r8
+	movq	$futex_fault,PCB_ONFAULT(%r8)
 	movq	$VM_MAXUSER_ADDRESS-4,%rax
 	cmpq	%rax,%rsi
 	ja	futex_fault
-
 	movl	(%rsi),%eax
-	movl	%eax,(%rdx)
+1:	movl	%eax,%ecx
+	andl	%edi,%ecx
 #ifdef SMP
 	lock
 #endif
-	andl	%edi,(%rsi)
+	cmpxchgl %ecx,(%rsi)
+	jnz	1b
 	xorl	%eax,%eax
-	movq	%rax,PCB_ONFAULT(%rcx)
+	movq	%rax,PCB_ONFAULT(%r8)
 	ret
 
 ENTRY(futex_xorl)
-	movq	PCPU(CURPCB),%rcx
-	movq	$futex_fault,PCB_ONFAULT(%rcx)
-
+	movq	PCPU(CURPCB),%r8
+	movq	$futex_fault,PCB_ONFAULT(%r8)
 	movq	$VM_MAXUSER_ADDRESS-4,%rax
 	cmpq	%rax,%rsi
 	ja	futex_fault
-
 	movl	(%rsi),%eax
-	movl	%eax,(%rdx)
+1:	movl	%eax,%ecx
+	xorl	%edi,%ecx
 #ifdef SMP
 	lock
 #endif
-	xorl	%edi,(%rsi)
+	cmpxchgl %ecx,(%rsi)
+	jnz	1b
 	xorl	%eax,%eax
-	movq	%rax,PCB_ONFAULT(%rcx)
+	movq	%rax,PCB_ONFAULT(%r8)
 	ret


More information about the p4-projects mailing list