[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

r5113 - in glibc-package/trunk/debian: . patches patches/hurd-i386



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 <aurel32@debian.org>  Sun, 25 Dec 2011 18:10:46 +0100
+  [ Samuel Thibault ]
+  * patches/hurd-i386/submitted-mmap.diff: new patch to fix iceweasel hang.
 
+ -- Samuel Thibault <sthibault@debian.org>  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  <samuel.thibault@ens-lyon.org>
+
+        * 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
 


Reply to: