Update.
authorUlrich Drepper <drepper@redhat.com>
Tue, 23 Mar 2004 10:01:06 +0000 (10:01 +0000)
committerUlrich Drepper <drepper@redhat.com>
Tue, 23 Mar 2004 10:01:06 +0000 (10:01 +0000)
2004-03-23  Ulrich Drepper  <drepper@redhat.com>

* sysdeps/ia64/pt-machine.h (BUSY_WAIT_NOP): Define.
* sysdeps/x86_64/pt-machine.h (BUSY_WAIT_NOP): Likewise.

linuxthreads/ChangeLog
linuxthreads/sysdeps/ia64/pt-machine.h
linuxthreads/sysdeps/x86_64/pt-machine.h
nptl/ChangeLog
nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h

index e6ed4e4..442dc0b 100644 (file)
@@ -1,3 +1,8 @@
+2004-03-23  Ulrich Drepper  <drepper@redhat.com>
+
+       * sysdeps/ia64/pt-machine.h (BUSY_WAIT_NOP): Define.
+       * sysdeps/x86_64/pt-machine.h (BUSY_WAIT_NOP): Likewise.
+
 2004-03-12  Ulrich Drepper  <drepper@redhat.com>
 
        * sysdeps/unix/sysv/linux/bits/local_lim.h: Add HOST_NAME_MAX.
index ee489a7..a04ae81 100644 (file)
@@ -1,6 +1,6 @@
 /* Machine-dependent pthreads configuration and inline functions.
    IA-64 version.
-   Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2000, 2002, 2003, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -127,4 +127,7 @@ testandset (int *spinlock)
   return ret;
 }
 
+/* Indicate that we are looping.  */
+#define BUSY_WAIT_NOP  __asm__ ("hint @pause")
+
 #endif /* pt-machine.h */
index bd53069..68baac7 100644 (file)
@@ -1,6 +1,6 @@
 /* Machine-dependent pthreads configuration and inline functions.
    x86-64 version.
-   Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -219,4 +219,7 @@ extern int __arch_prctl (int __code, unsigned long __addr);
 /* Maximum size of the stack if the rlimit is unlimited.  */
 #define ARCH_STACK_MAX_SIZE    32*1024*1024
 
+/* The ia32e really want some help to prevent overheating.  */
+#define BUSY_WAIT_NOP  __asm__ ("rep; nop")
+
 #endif /* pt-machine.h */
index e0439e1..5155b79 100644 (file)
@@ -1,6 +1,9 @@
 2004-03-23  Ulrich Drepper  <drepper@redhat.com>
 
        * sysdeps/unix/sysv/linux/i386/lowlevellock.h (lll_mutex_trylock):
+       No need to restrict type of ret.  Make it int.  Add comment.
+
+       * sysdeps/unix/sysv/linux/i386/lowlevellock.h (lll_mutex_trylock):
        Remove unnecessary setne instruction.
 
 2004-03-22  Jakub Jelinek  <jakub@redhat.com>
index 9f089f8..a9823d8 100644 (file)
@@ -102,8 +102,13 @@ extern int __lll_mutex_unlock_wake (int *__futex)
      __attribute ((regparm (1))) attribute_hidden;
 
 
+/* NB: in the lll_mutex_trylock macro we simply return the value in %eax
+   after the cmpxchg instruction.  In case the operation succeded this
+   value is zero.  In case the operation failed, the cmpxchg instruction
+   has loaded the current value of the memory work which is guaranteed
+   to be nonzero.  */
 #define lll_mutex_trylock(futex) \
-  ({ unsigned char ret;                                                              \
+  ({ int ret;                                                                \
      __asm __volatile (LOCK_INSTR "cmpxchgl %2, %1"                          \
                       : "=a" (ret), "=m" (futex)                             \
                       : "r" (LLL_MUTEX_LOCK_INITIALIZER_LOCKED), "m" (futex),\