[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[hurd] 14/23: libtrivfs: optimize the object lookup code
From: |
Samuel Thibault |
Subject: |
[hurd] 14/23: libtrivfs: optimize the object lookup code |
Date: |
Tue, 13 Oct 2015 00:09:55 +0000 |
This is an automated email from the git hooks/post-receive script.
sthibault pushed a commit to branch upstream
in repository hurd.
commit 9fe7adc2907afdd2039a67d27328ba82a884561e
Author: Justus Winter <address@hidden>
Date: Sun Sep 27 18:55:39 2015 +0200
libtrivfs: optimize the object lookup code
* libtrivfs/mig-decls.h: Remove the specialized cases, they really
blow up these functions that are supposed to be inlined. Also, look
into the dynamically allocated vectors first, because this is the
preferred way of using libtrivfs since 1997.
---
libtrivfs/mig-decls.h | 136 +++++++++++++++++++-------------------------------
1 file changed, 52 insertions(+), 84 deletions(-)
diff --git a/libtrivfs/mig-decls.h b/libtrivfs/mig-decls.h
index 13a9eb7..1909199 100644
--- a/libtrivfs/mig-decls.h
+++ b/libtrivfs/mig-decls.h
@@ -37,57 +37,41 @@ extern size_t trivfs_num_dynamic_port_buckets;
static inline struct trivfs_protid * __attribute__ ((unused))
trivfs_begin_using_protid (mach_port_t port)
{
- if (trivfs_protid_nportclasses + trivfs_num_dynamic_protid_port_classes > 1)
+ struct port_info *pi = ports_lookup_port (0, port, 0);
+
+ if (pi)
{
- struct port_info *pi = ports_lookup_port (0, port, 0);
- int i;
-
- if (pi)
- {
- for (i = 0; i < trivfs_protid_nportclasses; i++)
- if (pi->class == trivfs_protid_portclasses[i])
- return (struct trivfs_protid *) pi;
- for (i = 0; i < trivfs_num_dynamic_protid_port_classes; i++)
- if (pi->class == trivfs_dynamic_protid_port_classes[i])
- return (struct trivfs_protid *) pi;
- ports_port_deref (pi);
- }
-
- return 0;
+ size_t i;
+ for (i = 0; i < trivfs_num_dynamic_protid_port_classes; i++)
+ if (pi->class == trivfs_dynamic_protid_port_classes[i])
+ return (struct trivfs_protid *) pi;
+ for (i = 0; i < trivfs_protid_nportclasses; i++)
+ if (pi->class == trivfs_protid_portclasses[i])
+ return (struct trivfs_protid *) pi;
+ ports_port_deref (pi);
}
- else if (trivfs_protid_nportclasses == 1)
- return ports_lookup_port (0, port, trivfs_protid_portclasses[0]);
- else
- return ports_lookup_port (0, port, trivfs_dynamic_protid_port_classes[0]);
+
+ return NULL;
}
static inline struct trivfs_protid * __attribute__ ((unused))
trivfs_begin_using_protid_payload (unsigned long payload)
{
- if (trivfs_protid_nportclasses + trivfs_num_dynamic_protid_port_classes > 1)
+ struct port_info *pi = ports_lookup_payload (NULL, payload, NULL);
+
+ if (pi)
{
- struct port_info *pi = ports_lookup_payload (NULL, payload, NULL);
- int i;
-
- if (pi)
- {
- for (i = 0; i < trivfs_protid_nportclasses; i++)
- if (pi->class == trivfs_protid_portclasses[i])
- return (struct trivfs_protid *) pi;
- for (i = 0; i < trivfs_num_dynamic_protid_port_classes; i++)
- if (pi->class == trivfs_dynamic_protid_port_classes[i])
- return (struct trivfs_protid *) pi;
- ports_port_deref (pi);
- }
-
- return NULL;
+ size_t i;
+ for (i = 0; i < trivfs_num_dynamic_protid_port_classes; i++)
+ if (pi->class == trivfs_dynamic_protid_port_classes[i])
+ return (struct trivfs_protid *) pi;
+ for (i = 0; i < trivfs_protid_nportclasses; i++)
+ if (pi->class == trivfs_protid_portclasses[i])
+ return (struct trivfs_protid *) pi;
+ ports_port_deref (pi);
}
- else if (trivfs_protid_nportclasses == 1)
- return ports_lookup_payload (NULL, payload,
- trivfs_protid_portclasses[0]);
- else
- return ports_lookup_payload (NULL, payload,
- trivfs_dynamic_protid_port_classes[0]);
+
+ return NULL;
}
static inline void __attribute__ ((unused))
@@ -100,57 +84,41 @@ trivfs_end_using_protid (struct trivfs_protid *cred)
static inline struct trivfs_control * __attribute__ ((unused))
trivfs_begin_using_control (mach_port_t port)
{
- if (trivfs_cntl_nportclasses + trivfs_num_dynamic_control_port_classes > 1)
+ struct port_info *pi = ports_lookup_port (0, port, 0);
+
+ if (pi)
{
- struct port_info *pi = ports_lookup_port (0, port, 0);
- int i;
-
- if (pi)
- {
- for (i = 0; i < trivfs_cntl_nportclasses; i++)
- if (pi->class == trivfs_cntl_portclasses[i])
- return (struct trivfs_control *) pi;
- for (i = 0; i < trivfs_num_dynamic_control_port_classes; i++)
- if (pi->class == trivfs_dynamic_control_port_classes[i])
- return (struct trivfs_control *) pi;
- ports_port_deref (pi);
- }
-
- return 0;
+ size_t i;
+ for (i = 0; i < trivfs_num_dynamic_control_port_classes; i++)
+ if (pi->class == trivfs_dynamic_control_port_classes[i])
+ return (struct trivfs_control *) pi;
+ for (i = 0; i < trivfs_cntl_nportclasses; i++)
+ if (pi->class == trivfs_cntl_portclasses[i])
+ return (struct trivfs_control *) pi;
+ ports_port_deref (pi);
}
- else if (trivfs_cntl_nportclasses == 1)
- return ports_lookup_port (0, port, trivfs_cntl_portclasses[0]);
- else
- return ports_lookup_port (0, port, trivfs_dynamic_control_port_classes[0]);
+
+ return NULL;
}
static inline struct trivfs_control * __attribute__ ((unused))
trivfs_begin_using_control_payload (unsigned long payload)
{
- if (trivfs_cntl_nportclasses + trivfs_num_dynamic_control_port_classes > 1)
+ struct port_info *pi = ports_lookup_payload (NULL, payload, NULL);
+
+ if (pi)
{
- struct port_info *pi = ports_lookup_payload (NULL, payload, NULL);
- int i;
-
- if (pi)
- {
- for (i = 0; i < trivfs_cntl_nportclasses; i++)
- if (pi->class == trivfs_cntl_portclasses[i])
- return (struct trivfs_control *) pi;
- for (i = 0; i < trivfs_num_dynamic_control_port_classes; i++)
- if (pi->class == trivfs_dynamic_control_port_classes[i])
- return (struct trivfs_control *) pi;
- ports_port_deref (pi);
- }
-
- return NULL;
+ size_t i;
+ for (i = 0; i < trivfs_num_dynamic_control_port_classes; i++)
+ if (pi->class == trivfs_dynamic_control_port_classes[i])
+ return (struct trivfs_control *) pi;
+ for (i = 0; i < trivfs_cntl_nportclasses; i++)
+ if (pi->class == trivfs_cntl_portclasses[i])
+ return (struct trivfs_control *) pi;
+ ports_port_deref (pi);
}
- else if (trivfs_cntl_nportclasses == 1)
- return ports_lookup_payload (NULL, payload,
- trivfs_cntl_portclasses[0]);
- else
- return ports_lookup_payload (NULL, payload,
- trivfs_dynamic_control_port_classes[0]);
+
+ return NULL;
}
static inline void __attribute__ ((unused))
--
Alioth's /usr/local/bin/git-commit-notice on
/srv/git.debian.org/git/pkg-hurd/hurd.git
- [hurd] branch upstream updated (3f883d3 -> b989189), Samuel Thibault, 2015/10/12
- [hurd] 18/23: Update NEWS file, Samuel Thibault, 2015/10/12
- [hurd] 15/23: libtrivfs: deprecate old api, Samuel Thibault, 2015/10/12
- [hurd] 19/23: Add missing null checks in libshouldbeinlibc, Samuel Thibault, 2015/10/12
- [hurd] 21/23: Make netfs_S_io_reauthenticate handle allocation errors, Samuel Thibault, 2015/10/12
- [hurd] 20/23: Drop duplicate port deallocation, Samuel Thibault, 2015/10/12
- [hurd] 14/23: libtrivfs: optimize the object lookup code,
Samuel Thibault <=
- [hurd] 23/23: Merge remote-tracking branch 'upstream/master' into upstream, Samuel Thibault, 2015/10/12
- [hurd] 10/23: trans/magic: convert to trivfs dynamic classes and buckets, Samuel Thibault, 2015/10/12
- [hurd] 04/23: libdiskfs: fflush stdout when pausing, Samuel Thibault, 2015/10/12
- [hurd] 11/23: trans/new-fifo: convert to trivfs dynamic classes and buckets, Samuel Thibault, 2015/10/12
- [hurd] 07/23: pflocal: convert to trivfs dynamic classes and buckets, Samuel Thibault, 2015/10/12
- [hurd] 09/23: trans/ifsock: convert to trivfs dynamic classes and buckets, Samuel Thibault, 2015/10/12
- [hurd] 12/23: trans/passwd: convert to trivfs dynamic classes and buckets, Samuel Thibault, 2015/10/12
- [hurd] 13/23: trans/proxy-defpager: convert to trivfs dynamic classes and buckets, Samuel Thibault, 2015/10/15
- [hurd] 17/23: libdiskfs: fflush stdout when pausing, Samuel Thibault, 2015/10/15
- [hurd] 22/23: Make dir_lookup create files with user permissions enabled, Samuel Thibault, 2015/10/15