summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--debian/patches/libports-reduce-overhead.patch103
-rw-r--r--debian/patches/series1
2 files changed, 0 insertions, 104 deletions
diff --git a/debian/patches/libports-reduce-overhead.patch b/debian/patches/libports-reduce-overhead.patch
deleted file mode 100644
index 968673ba..00000000
--- a/debian/patches/libports-reduce-overhead.patch
+++ /dev/null
@@ -1,103 +0,0 @@
-commit 97737d1ee3ce95e45a1a4aa636cc2e11a106a9f5
-Author: Justus Winter <4winter@informatik.uni-hamburg.de>
-Date: Sat Apr 26 12:20:20 2014 +0200
-
- libports: reduce malloc overhead in _ports_bucket_class_iterate
-
- _ports_bucket_class_iterate creates a snapshot of the buckets hash
- table. This is done so that the lock protecting the hash table can be
- released while we iterate over the snapshot.
-
- Formerly, a linked list was used to store the snapshot. As the
- maximal number of items is known, using an array is much simpler.
-
- _ports_bucket_class_iterate implements both ports_bucket_iterate and
- ports_class_iterate. For this change might make ports_class_iterate
- less efficient memory-wise if the number of ports belonging to the
- class is low with respect to the number of ports in the bucket. If
- this happens, we allocate too much. Alleviate this by releasing
- unused memory.
-
- On the other hand, the array representation is more compact.
- Furthermore a survey of the Hurd code revealed that
- ports_class_iterate is rarely used, while ports_bucket_iterate is used
- more often, most prominently in paging code.
-
- * libports/bucket-iterate.c (_ports_bucket_class_iterate): Use an
- array instead of a linked list.
-
-diff --git a/libports/bucket-iterate.c b/libports/bucket-iterate.c
-index dc1c7b1..498cf13 100644
---- a/libports/bucket-iterate.c
-+++ b/libports/bucket-iterate.c
-@@ -31,40 +31,54 @@ _ports_bucket_class_iterate (struct port_bucket *bucket,
- {
- /* This is obscenely ineffecient. ihash and ports need to cooperate
- more closely to do it efficiently. */
-- struct item
-- {
-- struct item *next;
-- void *p;
-- } *list = 0;
-- struct item *i, *nxt;
-+ void **p;
-+ size_t i, n, nr_items;
- error_t err;
-
- pthread_mutex_lock (&_ports_lock);
-+
-+ if (bucket->htable.nr_items == 0)
-+ {
-+ pthread_mutex_unlock (&_ports_lock);
-+ return 0;
-+ }
-+
-+ nr_items = bucket->htable.nr_items;
-+ p = malloc (nr_items * sizeof *p);
-+ if (p == NULL)
-+ return ENOMEM;
-+
-+ n = 0;
- HURD_IHASH_ITERATE (&bucket->htable, arg)
- {
- struct port_info *const pi = arg;
-- struct item *j;
-
- if (class == 0 || pi->class == class)
- {
-- j = malloc (sizeof (struct item));
-- j->next = list;
-- j->p = pi;
-- list = j;
- pi->refcnt++;
-+ p[n] = pi;
-+ n++;
- }
- }
- pthread_mutex_unlock (&_ports_lock);
-
-+ if (n != nr_items)
-+ {
-+ /* We allocated too much. Release unused memory. */
-+ void **new = realloc (p, n * sizeof *p);
-+ if (new)
-+ p = new;
-+ }
-+
- err = 0;
-- for (i = list; i; i = nxt)
-+ for (i = 0; i < n; i++)
- {
- if (!err)
-- err = (*fun)(i->p);
-- ports_port_deref (i->p);
-- nxt = i->next;
-- free (i);
-+ err = (*fun)(p[i]);
-+ ports_port_deref (p[i]);
- }
-+
-+ free (p);
- return err;
- }
-
diff --git a/debian/patches/series b/debian/patches/series
index d239f2d2..0f4e8365 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -41,7 +41,6 @@ xkb-compat.patch
mach-defpager-protected-payload.patch
-libports-reduce-overhead.patch
ext2fs-two-pagers.patch
#ext2fs-cache-superblock.patch
libpager-singlethreaded.patch