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

r6599 - in glibc-package/branches/glibc-2.22/debian: . patches patches/hurd-i386



Author: sthibault
Date: 2015-09-20 11:23:54 +0000 (Sun, 20 Sep 2015)
New Revision: 6599

Added:
   glibc-package/branches/glibc-2.22/debian/patches/hurd-i386/cvs-cache-mach_host_self.diff
Modified:
   glibc-package/branches/glibc-2.22/debian/changelog
   glibc-package/branches/glibc-2.22/debian/patches/series
Log:
port r6597 from trunk: hurd-i386/cvs-cache-mach_host_self.diff: avoid port count issue on the host port.

Modified: glibc-package/branches/glibc-2.22/debian/changelog
===================================================================
--- glibc-package/branches/glibc-2.22/debian/changelog	2015-09-20 11:23:16 UTC (rev 6598)
+++ glibc-package/branches/glibc-2.22/debian/changelog	2015-09-20 11:23:54 UTC (rev 6599)
@@ -380,6 +380,8 @@
   * patches/hurd-i386/cvs-bootstrap.diff: Fix typo.
   * libc0.3.symbols.hurd-i386: Remove internal _server_routine symbols, fixes
     build with newer mig.
+  * patches/hurd-i386/cvs-cache-mach_host_self.diff: New patch to avoid port
+    count issue on the host port.
 
  -- Samuel Thibault <sthibault@debian.org>  Sun, 13 Sep 2015 19:50:50 +0200
 

Added: glibc-package/branches/glibc-2.22/debian/patches/hurd-i386/cvs-cache-mach_host_self.diff
===================================================================
--- glibc-package/branches/glibc-2.22/debian/patches/hurd-i386/cvs-cache-mach_host_self.diff	                        (rev 0)
+++ glibc-package/branches/glibc-2.22/debian/patches/hurd-i386/cvs-cache-mach_host_self.diff	2015-09-20 11:23:54 UTC (rev 6599)
@@ -0,0 +1,89 @@
+From: Justus Winter <4winter@informatik.uni-hamburg.de>
+Subject: [PATCH glibc 1/2] mach: cache the host port
+
+Cache the host port like we cache the task port.  This way we do not
+need to call the kernel just to get the port.  Furthermore, we no
+longer increase the reference count on every invocation of
+`mach_host_self'.
+
+* mach/mach/mach_traps.h (__mach_host_self, mach_host_self):
+Protect declarations against the macro expansion.
+* mach/mach_init.c (__mach_host_self_): New variable.
+(mach_init): Initialize `__mach_host_self_'.
+* mach/mach_init.h (__mach_host_self_): New declaration.
+(__mach_host_self, mach_host_self): New macros.
+* sysdeps/mach/hurd/dl-sysdep.c (_dl_sysdep_start_cleanup):
+Release reference.
+---
+ mach/mach/mach_traps.h        | 7 ++++---
+ mach/mach_init.c              | 2 ++
+ mach/mach_init.h              | 5 +++++
+ sysdeps/mach/hurd/dl-sysdep.c | 1 +
+ 4 files changed, 12 insertions(+), 3 deletions(-)
+
+Index: glibc-2.19/mach/mach/mach_traps.h
+===================================================================
+--- glibc-2.19.orig/mach/mach/mach_traps.h
++++ glibc-2.19/mach/mach/mach_traps.h
+@@ -41,9 +41,10 @@ extern mach_port_t __mach_thread_self (v
+ extern mach_port_t (mach_task_self) (void);
+ extern mach_port_t (__mach_task_self) (void);
+ 
+-/* Return the host information port for the host of the calling task.  */
+-extern mach_port_t mach_host_self (void);
+-extern mach_port_t __mach_host_self (void);
++/* Return the host information port for the host of the calling task.
++   The parens are needed to protect against the macro in <mach_init.h>.  */
++extern mach_port_t (mach_host_self) (void);
++extern mach_port_t (__mach_host_self) (void);
+ 
+ /* Attempt to context switch the current thread off the processor.  Returns
+    true if there are other threads that can be run and false if not.  */
+Index: glibc-2.19/mach/mach_init.c
+===================================================================
+--- glibc-2.19.orig/mach/mach_init.c
++++ glibc-2.19/mach/mach_init.c
+@@ -20,6 +20,7 @@
+ #include <unistd.h>
+ 
+ mach_port_t __mach_task_self_;
++mach_port_t __mach_host_self_;
+ vm_size_t __vm_page_size = 0;	/* Must be data not bss for weak alias.  */
+ weak_alias (__vm_page_size, vm_page_size)
+ 
+@@ -34,6 +35,7 @@ __mach_init (void)
+   kern_return_t err;
+ 
+   __mach_task_self_ = (__mach_task_self) ();
++  __mach_host_self_ = (__mach_host_self) ();
+   __mig_init (0);
+ 
+ #if HAVE_HOST_PAGE_SIZE
+Index: glibc-2.19/mach/mach_init.h
+===================================================================
+--- glibc-2.19.orig/mach/mach_init.h
++++ glibc-2.19/mach/mach_init.h
+@@ -31,6 +31,11 @@ extern mach_port_t __mach_task_self_;
+ #define __mach_task_self()	(__mach_task_self_ + 0)	/* Not an lvalue.  */
+ #define mach_task_self()	(__mach_task_self ())
+ 
++/* This cache is initialized at startup.  */
++extern mach_port_t __mach_host_self_;
++#define __mach_host_self()	(__mach_host_self_ + 0)	/* Not an lvalue.  */
++#define mach_host_self()	(__mach_host_self ())
++
+ /* Kernel page size.  */
+ extern vm_size_t __vm_page_size;
+ extern vm_size_t vm_page_size;
+Index: glibc-2.19/sysdeps/mach/hurd/dl-sysdep.c
+===================================================================
+--- glibc-2.19.orig/sysdeps/mach/hurd/dl-sysdep.c
++++ glibc-2.19/sysdeps/mach/hurd/dl-sysdep.c
+@@ -278,6 +278,7 @@ _dl_sysdep_start_cleanup (void)
+      __mach_init.  We are done with them now, and the user will
+      reacquire them for himself when he wants them.  */
+   __mig_dealloc_reply_port (MACH_PORT_NULL);
++  __mach_port_deallocate (__mach_task_self (), __mach_host_self_);
+   __mach_port_deallocate (__mach_task_self (), __mach_task_self_);
+ }
+ 

Modified: glibc-package/branches/glibc-2.22/debian/patches/series
===================================================================
--- glibc-package/branches/glibc-2.22/debian/patches/series	2015-09-20 11:23:16 UTC (rev 6598)
+++ glibc-package/branches/glibc-2.22/debian/patches/series	2015-09-20 11:23:54 UTC (rev 6599)
@@ -134,6 +134,7 @@
 hurd-i386/tg-sysheaders.diff
 hurd-i386/cvs-bootstrap.diff
 hurd-i386/local-bootstrap.diff
+hurd-i386/cvs-cache-mach_host_self.diff
 hurd-i386/cvs-csu_crt0.diff
 hurd-i386/cvs-s_scalbn.diff
 


Reply to: