This is the mail archive of the libc-alpha@sources.redhat.com mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Enable lll_futex_requeue for s390*.


Hi Jakub,
the glibc part of the FUTEX_CMP_REQUEUE change. The 6th argument of the
sys_futex call is stored in %r7. All new system calls with 6 arguments
can use this new mechanism.

blue skies,
  Martin.

---

2004-06-07  Martin Schwidefsky  <schwidefsky@de.ibm.com>

	* sysdeps/unix/sysv/linux/s390/lowlevellock.h (lll_futex_requeue):
	Pass val argument as 6th system call argument in %r7.

diff -urN libc/nptl/sysdeps/unix/sysv/linux/s390/lowlevellock.h libc-s390/nptl/sysdeps/unix/sysv/linux/s390/lowlevellock.h
--- libc/nptl/sysdeps/unix/sysv/linux/s390/lowlevellock.h	2004-06-04 11:37:10.000000000 +0200
+++ libc-s390/nptl/sysdeps/unix/sysv/linux/s390/lowlevellock.h	2004-06-04 14:27:41.000000000 +0200
@@ -84,9 +84,6 @@
 
 
 /* Returns non-zero if error happened, zero if success.  */
-#if 0
-/* FIXME: s390 only supports up to 5 argument syscalls.  Once FUTEX_CMP_REQUEUE
-   kernel interface for s390 is finalized, adjust this.  */
 #define lll_futex_requeue(futex, nr_wake, nr_move, mutex, val) \
   ({									      \
     register unsigned long int __r2 asm ("2") = (unsigned long int) (futex);  \
@@ -94,18 +91,16 @@
     register unsigned long int __r4 asm ("4") = (long int) (nr_wake);	      \
     register unsigned long int __r5 asm ("5") = (long int) (nr_move);	      \
     register unsigned long int __r6 asm ("6") = (unsigned long int) (mutex);  \
+    register unsigned long int __r7 asm ("7") = (int) (mutex);		      \
     register unsigned long __result asm ("2");				      \
 									      \
     __asm __volatile ("svc %b1"						      \
 		      : "=d" (__result)					      \
 		      : "i" (SYS_futex), "0" (__r2), "d" (__r3),	      \
-			"d" (__r4), "d" (__r5), "d" (__r6)		      \
+			"d" (__r4), "d" (__r5), "d" (__r6), "d" (__r7)	      \
 		      : "cc", "memory" );				      \
     __result > -4096UL;							      \
   })
-#else
-#define lll_futex_requeue(futex, nr_wake, nr_move, mutex, val) 1
-#endif
 
 
 #define lll_compare_and_swap(futex, oldval, newval, operation) \


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]