Update.
authorUlrich Drepper <drepper@redhat.com>
Fri, 9 May 2003 07:53:33 +0000 (07:53 +0000)
committerUlrich Drepper <drepper@redhat.com>
Fri, 9 May 2003 07:53:33 +0000 (07:53 +0000)
2003-05-09  Ulrich Drepper  <drepper@redhat.com>

* sysdeps/unix/sysv/linux/x86_64/get_clockfreq.c: New file.

ChangeLog
nptl/ChangeLog
nptl/allocatestack.c
nptl/sysdeps/unix/sysv/linux/x86_64/Makefile
nptl/sysdeps/x86_64/pthreaddef.h
sysdeps/unix/sysv/linux/x86_64/get_clockfreq.c [new file with mode: 0644]

index b3f893b..06559ea 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2003-05-09  Ulrich Drepper  <drepper@redhat.com>
+
+       * sysdeps/unix/sysv/linux/x86_64/get_clockfreq.c: New file.
+
 2003-05-08  Ulrich Drepper  <drepper@redhat.com>
 
        * malloc/thread-m.h: Remove special handling of thread_atfork if
index 7bd8025..f46c221 100644 (file)
@@ -1,3 +1,12 @@
+2003-05-09  Ulrich Drepper  <drepper@redhat.com>
+
+       * allocatestack.c (allocate_stack): If ARCH_RETRY_MMAP is defined,
+       use it in case mmap to allocate the stack fails.
+       * sysdeps/unix/sysv/linux/x86_64/Makefile: Don't define
+       ARCH_MAP_FLAGS here.
+       * sysdeps/x86_64/pthreaddef.h: Define ARCH_MAP_FLAGS and
+       ARCH_RETRY_MMAP.
+
 2003-05-08  Ulrich Drepper  <drepper@redhat.com>
 
        * sysdeps/unix/sysv/linux/fork.c: Complete rewrite of the atfork
index 680f365..95ee992 100644 (file)
@@ -393,7 +393,13 @@ allocate_stack (const struct pthread_attr *attr, struct pthread **pdp,
                      MAP_PRIVATE | MAP_ANONYMOUS | ARCH_MAP_FLAGS, -1, 0);
 
          if (__builtin_expect (mem == MAP_FAILED, 0))
-           return errno;
+           {
+#ifdef ARCH_RETRY_MMAP
+             mem = ARCH_RETRY_MMAP (size);
+             if (__builtin_expect (mem == MAP_FAILED, 0))
+#endif
+               return errno;
+           }
 
          /* SIZE is guaranteed to be greater than zero.
             So we can never get a null pointer back from mmap.  */
index 9ecb7b0..d3e5eb5 100644 (file)
@@ -1,6 +1,3 @@
 ifeq ($(subdir),nptl)
 CFLAGS-pt-initfini.s = -g0 -fPIC -fno-inline-functions -fno-asynchronous-unwind-tables
-
-# We need to make sure that stack memory is allocated in the low 4GB.
-CFLAGS-pthread_create.c += -DARCH_MAP_FLAGS=MAP_32BIT
 endif
index 90a67f1..27896a4 100644 (file)
   ({ char *frame; asm ("movq %%rsp, %0" : "=r" (frame)); frame; })
 
 
+/* We prefer to have the stack allocated in the low 4GB since this
+   allows faster context switches.  */
+#define ARCH_MAP_FLAGS MAP_32BIT
+
+/* If it is not possible to allocate memory there retry without that
+   flag.  */
+#define ARCH_RETRY_MMAP(size) \
+  mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC,                              \
+       MAP_PRIVATE | MAP_ANONYMOUS, -1, 0)
+
+
 /* XXX Until we have a better place keep the definitions here.  */
 
 /* While there is no such syscall.  */
diff --git a/sysdeps/unix/sysv/linux/x86_64/get_clockfreq.c b/sysdeps/unix/sysv/linux/x86_64/get_clockfreq.c
new file mode 100644 (file)
index 0000000..a58d40a
--- /dev/null
@@ -0,0 +1 @@
+#include "../i386/get_clockfreq.c"