From 07e46eb2e25583f0f3e06342f0c854769b353b10 Mon Sep 17 00:00:00 2001 From: Justus Winter <4winter@informatik.uni-hamburg.de> Date: Sat, 15 Mar 2014 14:06:15 +0100 Subject: mach-defpager: replace the magic typecast with a hash table Previously, the mach-defpager used a "magic typecast" for object lookups. It renamed the port to the address of the associated object, and upon receiving a message it would cast the port name back to a pointer. While this might seem like an optimization, it actually makes the port handling in the kernel less efficient. Ports with small continuous names are stored in an array, while other ports get spilled in a splay tree. Replace the linked list of default_port_t objects with a hash table. Do not rename the ports, rather use the hash table to lookup objects associated with ports. * mach-defpager/default_pager.c (struct pager_port): Replace queue with hash table, remove count, move type declaration to priv.h. (pager_port_list_init): Adjust accordingly. (pager_port_list_insert): Likewise. (pager_port_list_delete): Likewise. (destroy_paging_partition): Replace queue_iterate with HURD_IHASH_ITERATE. (S_default_pager_objects): Likewise. (S_default_pager_object_pages): Likewise. (seqnos_memory_object_create): Do not rename the port but store it in the hash table. (S_default_pager_object_create): Likewise. * mach-defpager/priv.h (struct dstruct): Add fast-removal pointer. (pnameof): Remove obsolete macro definition. (dnameof): Likewise. * mach-defpager/mig-decls.h (begin_using_default_pager): Replace the magic typecast with a hash table lookup. * mach-defpager/Makefile (HURDLIBS): Add ihash. --- mach-defpager/Makefile | 1 + 1 file changed, 1 insertion(+) (limited to 'mach-defpager/Makefile') diff --git a/mach-defpager/Makefile b/mach-defpager/Makefile index c8e33c52..09debeda 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 -- cgit v1.2.3