diff options
Diffstat (limited to 'debian/patches/mach-defpager-fix-receiver-lookups.patch')
-rw-r--r-- | debian/patches/mach-defpager-fix-receiver-lookups.patch | 248 |
1 files changed, 0 insertions, 248 deletions
diff --git a/debian/patches/mach-defpager-fix-receiver-lookups.patch b/debian/patches/mach-defpager-fix-receiver-lookups.patch deleted file mode 100644 index f0a9af16..00000000 --- a/debian/patches/mach-defpager-fix-receiver-lookups.patch +++ /dev/null @@ -1,248 +0,0 @@ -diff --git a/mach-defpager/Makefile b/mach-defpager/Makefile -index c8e33c5..09debed 100644 ---- a/mach-defpager/Makefile -+++ b/mach-defpager/Makefile -@@ -29,6 +29,7 @@ OBJS := $(SRCS:.c=.o) \ - memory_object default_pager memory_object_default exc) \ - default_pager_replyUser.o - -+HURDLIBS:= ihash - OTHERLIBS:= -lpthread - LDFLAGS += -static - -diff --git a/mach-defpager/default_pager.c b/mach-defpager/default_pager.c -index eb444a6..f514ea6 100644 ---- a/mach-defpager/default_pager.c -+++ b/mach-defpager/default_pager.c -@@ -38,10 +38,13 @@ - #include <mach/default_pager_types.h> - - #include <pthread.h> -+#include <stddef.h> - - #include <device/device_types.h> - #include <device/device.h> - -+#include <hurd/ihash.h> -+ - #include "queue.h" - #include "wiring.h" - #include "kalloc.h" -@@ -1781,25 +1784,14 @@ default_has_page(ds, offset) - #define dstruct_unlock(ds) - #endif /* PARALLEL */ - --/* -- * List of all pagers. A specific pager is -- * found directly via its port, this list is -- * only used for monitoring purposes by the -- * default_pager_object* calls -- */ --struct pager_port { -- queue_head_t queue; -- pthread_mutex_t lock; -- int count; /* saves code */ -- queue_head_t leak_queue; --} all_pagers; -+struct pager_port all_pagers; - - #define pager_port_list_init() \ - { \ - pthread_mutex_init(&all_pagers.lock, NULL); \ -- queue_init(&all_pagers.queue); \ -+ hurd_ihash_init (&all_pagers.htable, \ -+ offsetof (struct dstruct, htable_locp)); \ - queue_init(&all_pagers.leak_queue); \ -- all_pagers.count = 0; \ - } - - void pager_port_list_insert(port, ds) -@@ -1807,8 +1799,9 @@ void pager_port_list_insert(port, ds) - default_pager_t ds; - { - pthread_mutex_lock(&all_pagers.lock); -- queue_enter(&all_pagers.queue, ds, default_pager_t, links); -- all_pagers.count++; -+ hurd_ihash_add (&all_pagers.htable, -+ (hurd_ihash_key_t) port, -+ (hurd_ihash_value_t) ds); - pthread_mutex_unlock(&all_pagers.lock); - } - -@@ -1816,8 +1809,8 @@ void pager_port_list_delete(ds) - default_pager_t ds; - { - pthread_mutex_lock(&all_pagers.lock); -- queue_remove(&all_pagers.queue, ds, default_pager_t, links); -- all_pagers.count--; -+ hurd_ihash_locp_remove (&all_pagers.htable, -+ ds->htable_locp); - pthread_mutex_unlock(&all_pagers.lock); - } - -@@ -1864,7 +1857,8 @@ dprintf("Partition x%x (id x%x) for %s, all_ok %d\n", part, id, name, all_ok); - pthread_mutex_lock(&part->p_lock); - - pthread_mutex_lock(&all_pagers.lock); -- queue_iterate(&all_pagers.queue, entry, default_pager_t, links) { -+ HURD_IHASH_ITERATE (&all_pagers.htable, val) { -+ entry = (default_pager_t) val; - - dstruct_lock(entry); - -@@ -2238,7 +2232,6 @@ seqnos_memory_object_create(old_pager, seqno, new_pager, new_size, - vm_size_t new_page_size; - { - default_pager_t ds; -- kern_return_t kr; - - assert(old_pager == default_pager_default_port); - assert(MACH_PORT_VALID(new_pager_request)); -@@ -2246,24 +2239,6 @@ seqnos_memory_object_create(old_pager, seqno, new_pager, new_size, - assert(new_page_size == vm_page_size); - - ds = pager_port_alloc(new_size); --rename_it: -- kr = mach_port_rename( default_pager_self, -- new_pager, (mach_port_t)pnameof(ds)); -- if (kr != KERN_SUCCESS) { -- default_pager_t ds1; -- -- if (kr != KERN_NAME_EXISTS) -- panic("%s m_o_create", my_name); -- ds1 = (default_pager_t) kalloc(sizeof *ds1); -- *ds1 = *ds; -- pthread_mutex_lock(&all_pagers.lock); -- queue_enter(&all_pagers.leak_queue, ds, default_pager_t, links); -- pthread_mutex_unlock(&all_pagers.lock); -- ds = ds1; -- goto rename_it; -- } -- -- new_pager = (mach_port_t) pnameof(ds); - - /* - * Set up associations between these ports -@@ -3195,23 +3170,14 @@ S_default_pager_object_create (mach_port_t pager, - return KERN_INVALID_ARGUMENT; - - ds = pager_port_alloc(size); --rename_it: -- port = (mach_port_t) pnameof(ds); -- result = mach_port_allocate_name(default_pager_self, -- MACH_PORT_RIGHT_RECEIVE, port); -- if (result != KERN_SUCCESS) { -- default_pager_t ds1; -- -- if (result != KERN_NAME_EXISTS) return (result); -- -- ds1 = (default_pager_t) kalloc(sizeof *ds1); -- *ds1 = *ds; -- pthread_mutex_lock(&all_pagers.lock); -- queue_enter(&all_pagers.leak_queue, ds, default_pager_t, links); -- pthread_mutex_unlock(&all_pagers.lock); -- ds = ds1; -- goto rename_it; -- } -+ result = mach_port_allocate (default_pager_self, -+ MACH_PORT_RIGHT_RECEIVE, -+ &port); -+ if (result != KERN_SUCCESS) -+ { -+ kfree ((char *) ds, sizeof *ds); -+ return result; -+ } - - /* - * Set up associations between these ports -@@ -3285,7 +3251,7 @@ S_default_pager_objects (mach_port_t pager, - /* - * We will send no more than this many - */ -- actual = all_pagers.count; -+ actual = all_pagers.htable.nr_items; - pthread_mutex_unlock(&all_pagers.lock); - - if (opotential < actual) { -@@ -3327,7 +3293,8 @@ S_default_pager_objects (mach_port_t pager, - pthread_mutex_lock(&all_pagers.lock); - - num_pagers = 0; -- queue_iterate(&all_pagers.queue, entry, default_pager_t, links) { -+ HURD_IHASH_ITERATE (&all_pagers.htable, val) { -+ entry = (default_pager_t) val; - - mach_port_t port; - vm_size_t size; -@@ -3505,7 +3472,8 @@ S_default_pager_object_pages (mach_port_t pager, - default_pager_t entry; - - pthread_mutex_lock(&all_pagers.lock); -- queue_iterate(&all_pagers.queue, entry, default_pager_t, links) { -+ HURD_IHASH_ITERATE (&all_pagers.htable, val) { -+ entry = (default_pager_t) val; - dstruct_lock(entry); - if (entry->pager_name == object) { - pthread_mutex_unlock(&all_pagers.lock); -diff --git a/mach-defpager/mig-decls.h b/mach-defpager/mig-decls.h -index f63fef2..8118d61 100644 ---- a/mach-defpager/mig-decls.h -+++ b/mach-defpager/mig-decls.h -@@ -27,11 +27,8 @@ - static inline struct dstruct * __attribute__ ((unused)) - begin_using_default_pager (mach_port_t port) - { -- if (! MACH_PORT_VALID(port) -- || ((default_pager_t) dnameof(port))->pager != (port)) -- return DEFAULT_PAGER_NULL; -- -- return (default_pager_t) dnameof(port); -+ return (default_pager_t) hurd_ihash_find (&all_pagers.htable, -+ (hurd_ihash_key_t) port); - } - - #endif /* __MACH_DEFPAGER_MIG_DECLS_H__ */ -diff --git a/mach-defpager/priv.h b/mach-defpager/priv.h -index 20711b2..3684565 100644 ---- a/mach-defpager/priv.h -+++ b/mach-defpager/priv.h -@@ -29,6 +29,7 @@ - - #include <mach.h> - #include <queue.h> -+#include <hurd/ihash.h> - - /* - * Bitmap allocation. -@@ -150,6 +151,7 @@ typedef struct dpager *dpager_t; - * Mapping between pager port and paging object. - */ - struct dstruct { -+ hurd_ihash_locp_t htable_locp; /* for the ihash table */ - queue_chain_t links; /* Link in pager-port list */ - - pthread_mutex_t lock; /* Lock for the structure */ -@@ -180,9 +182,19 @@ struct dstruct { - typedef struct dstruct * default_pager_t; - #define DEFAULT_PAGER_NULL ((default_pager_t)0) - --/* given a data structure return a good port-name to associate it to */ --#define pnameof(_x_) (((vm_offset_t) (_x_)) + 1) --/* reverse, assumes no-odd-pointers */ --#define dnameof(_x_) (((vm_offset_t) (_x_)) & ~1) -+/* -+ * List of all pagers. A specific pager is -+ * found directly via its port, this list is -+ * only used for monitoring purposes by the -+ * default_pager_object* calls -+ */ -+struct pager_port { -+ struct hurd_ihash htable; -+ pthread_mutex_t lock; -+ queue_head_t leak_queue; -+}; -+ -+/* The list of pagers. */ -+extern struct pager_port all_pagers; - - #endif /* __MACH_DEFPAGER_PRIV_H__ */ |