Author: sthibault
Date: 2011-12-27 15:18:38 +0000 (Tue, 27 Dec 2011)
New Revision: 5113

Added:
   glibc-package/trunk/debian/patches/hurd-i386/submitted-mmap.diff
Modified:
   glibc-package/trunk/debian/changelog
   glibc-package/trunk/debian/patches/series
Log:
submitted-mmap.diff: new patch to fix iceweasel hang.

Modified: glibc-package/trunk/debian/changelog
===================================================================
--- glibc-package/trunk/debian/changelog        2011-12-26 10:52:38 UTC (rev 
5112)
+++ glibc-package/trunk/debian/changelog        2011-12-27 15:18:38 UTC (rev 
5113)
@@ -1,10 +1,14 @@
 eglibc (2.13-25) UNRELEASED; urgency=low
 
+  [ Aurelien Jarno ]
   * patches/s390/cvs-libm-ulps.diff: new patch to fix FTBFS on s390 with
     gcc-4.6.
 
- -- Aurelien Jarno <[email protected]>  Sun, 25 Dec 2011 18:10:46 +0100
+  [ Samuel Thibault ]
+  * patches/hurd-i386/submitted-mmap.diff: new patch to fix iceweasel hang.
 
+ -- Samuel Thibault <[email protected]>  Tue, 27 Dec 2011 02:02:41 +0100
+
 eglibc (2.13-24) unstable; urgency=low
 
   * patches/m68k/cvs-byteswap.diff: fix m68k optimized version of 

Added: glibc-package/trunk/debian/patches/hurd-i386/submitted-mmap.diff
===================================================================
--- glibc-package/trunk/debian/patches/hurd-i386/submitted-mmap.diff            
                (rev 0)
+++ glibc-package/trunk/debian/patches/hurd-i386/submitted-mmap.diff    
2011-12-27 15:18:38 UTC (rev 5113)
@@ -0,0 +1,83 @@
+Take addr parameter of mmap as suggestion even without MAP_FIXED.
+
+2011-12-26  Samuel Thibault  <[email protected]>
+
+        * sysdeps/mach/hurd/mmap.c (__mmap): When `mapaddr' is non zero, try
+        __vm_allocate and __vm_map with `anywhere' set to 0 first, and try with
+        `anywhere' set to 1 only on KERN_NO_SPACE error.
+
+---
+ mmap.c |   44 ++++++++++++++++++++++++++++++--------------
+ 1 file changed, 30 insertions(+), 14 deletions(-)
+diff --git a/sysdeps/mach/hurd/mmap.c b/sysdeps/mach/hurd/mmap.c
+index 1d1460c..96d7661 100644
+--- a/sysdeps/mach/hurd/mmap.c
++++ b/sysdeps/mach/hurd/mmap.c
+@@ -51,15 +51,20 @@ __mmap (__ptr_t addr, size_t len, int prot, int flags, int 
fd, off_t offset)
+     {
+       /* vm_allocate has (a little) less overhead in the kernel too.  */
+       err = __vm_allocate (__mach_task_self (), &mapaddr, len,
+-                         !(flags & MAP_FIXED));
++                         !mapaddr);
+ 
+-      if (err == KERN_NO_SPACE && (flags & MAP_FIXED))
++      if (err == KERN_NO_SPACE)
+       {
+-        /* XXX this is not atomic as it is in unix! */
+-        /* The region is already allocated; deallocate it first.  */
+-        err = __vm_deallocate (__mach_task_self (), mapaddr, len);
+-        if (!err)
+-          err = __vm_allocate (__mach_task_self (), &mapaddr, len, 0);
++        if (flags & MAP_FIXED)
++          {
++            /* XXX this is not atomic as it is in unix! */
++            /* The region is already allocated; deallocate it first.  */
++            err = __vm_deallocate (__mach_task_self (), mapaddr, len);
++            if (!err)
++              err = __vm_allocate (__mach_task_self (), &mapaddr, len, 0);
++          }
++        else if (mapaddr)
++          err = __vm_allocate (__mach_task_self (), &mapaddr, len, 1);
+       }
+ 
+       return err ? (__ptr_t) (long int) __hurd_fail (err) : (__ptr_t) mapaddr;
+@@ -135,21 +140,32 @@ __mmap (__ptr_t addr, size_t len, int prot, int flags, 
int fd, off_t offset)
+ 
+   err = __vm_map (__mach_task_self (),
+                 &mapaddr, (vm_size_t) len, (vm_address_t) 0,
+-                ! (flags & MAP_FIXED),
++                !mapaddr,
+                 memobj, (vm_offset_t) offset,
+                 ! (flags & MAP_SHARED),
+                 vmprot, VM_PROT_ALL,
+                 (flags & MAP_SHARED) ? VM_INHERIT_SHARE : VM_INHERIT_COPY);
+ 
+-  if (err == KERN_NO_SPACE && (flags & MAP_FIXED))
++  if (err == KERN_NO_SPACE)
+     {
+-      /* XXX this is not atomic as it is in unix! */
+-      /* The region is already allocated; deallocate it first.  */
+-      err = __vm_deallocate (__mach_task_self (), mapaddr, len);
+-      if (! err)
++      if (flags & MAP_FIXED)
++      {
++        /* XXX this is not atomic as it is in unix! */
++        /* The region is already allocated; deallocate it first.  */
++        err = __vm_deallocate (__mach_task_self (), mapaddr, len);
++        if (! err)
++          err = __vm_map (__mach_task_self (),
++                          &mapaddr, (vm_size_t) len, (vm_address_t) 0,
++                          0, memobj, (vm_offset_t) offset,
++                          ! (flags & MAP_SHARED),
++                          vmprot, VM_PROT_ALL,
++                          (flags & MAP_SHARED) ? VM_INHERIT_SHARE
++                          : VM_INHERIT_COPY);
++      }
++      else if (mapaddr)
+       err = __vm_map (__mach_task_self (),
+                       &mapaddr, (vm_size_t) len, (vm_address_t) 0,
+-                      0, memobj, (vm_offset_t) offset,
++                      1, memobj, (vm_offset_t) offset,
+                       ! (flags & MAP_SHARED),
+                       vmprot, VM_PROT_ALL,
+                       (flags & MAP_SHARED) ? VM_INHERIT_SHARE

Modified: glibc-package/trunk/debian/patches/series
===================================================================
--- glibc-package/trunk/debian/patches/series   2011-12-26 10:52:38 UTC (rev 
5112)
+++ glibc-package/trunk/debian/patches/series   2011-12-27 15:18:38 UTC (rev 
5113)
@@ -172,6 +172,7 @@
 hurd-i386/local-select.diff
 hurd-i386/submitted-posix2008.diff
 hurd-i386/submitted-mach-nanosleep.diff
+hurd-i386/submitted-mmap.diff
 
 kfreebsd/submitted-libc_once.diff
 


-- 
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]
Archive: http://lists.debian.org/[email protected]

Reply via email to