r6598 - in glibc-package/branches/glibc-2.21/debian: . patches patches/hurd-i386
Author: sthibault
Date: 2015-09-20 11:23:16 +0000 (Sun, 20 Sep 2015)
New Revision: 6598
Added:
glibc-package/branches/glibc-2.21/debian/patches/hurd-i386/cvs-cache-mach_host_self.diff
Modified:
glibc-package/branches/glibc-2.21/debian/changelog
glibc-package/branches/glibc-2.21/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.21/debian/changelog
===================================================================
--- glibc-package/branches/glibc-2.21/debian/changelog 2015-09-20 11:22:11 UTC (rev 6597)
+++ glibc-package/branches/glibc-2.21/debian/changelog 2015-09-20 11:23:16 UTC (rev 6598)
@@ -313,6 +313,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.21/debian/patches/hurd-i386/cvs-cache-mach_host_self.diff
===================================================================
--- glibc-package/branches/glibc-2.21/debian/patches/hurd-i386/cvs-cache-mach_host_self.diff (rev 0)
+++ glibc-package/branches/glibc-2.21/debian/patches/hurd-i386/cvs-cache-mach_host_self.diff 2015-09-20 11:23:16 UTC (rev 6598)
@@ -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.21/debian/patches/series
===================================================================
--- glibc-package/branches/glibc-2.21/debian/patches/series 2015-09-20 11:22:11 UTC (rev 6597)
+++ glibc-package/branches/glibc-2.21/debian/patches/series 2015-09-20 11:23:16 UTC (rev 6598)
@@ -155,6 +155,7 @@
hurd-i386/tg-sysheaders.diff
hurd-i386/cvs-bootstrap.diff
hurd-i386/local-bootstrap.diff
+hurd-i386/cvs-cache-mach_host_self.diff
i386/local-biarch.diff
i386/local-cmov.diff
Reply to: