Commit d74beb9f authored by Eric Dumazet's avatar Eric Dumazet Committed by Linus Torvalds

[PATCH] Use unsigned int types for a faster bsearch

This patch avoids arithmetic on 'signed' types that are slower than
'unsigned'.  This saves space and cpu cycles.

size of kernel/sys.o before the patch (gcc-3.4.5)

    text    data     bss     dec     hex filename
   10924     252       4   11180    2bac kernel/sys.o

size of kernel/sys.o after the patch
    text    data     bss     dec     hex filename
   10903     252       4   11159    2b97 kernel/sys.o

I noticed that gcc-4.1.0 (from Fedora Core 5) even uses idiv instruction for
(a+b)/2 if a and b are signed.
Signed-off-by: default avatarEric Dumazet <dada1@cosmosbay.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 34f361ad
...@@ -1363,7 +1363,7 @@ static void groups_sort(struct group_info *group_info) ...@@ -1363,7 +1363,7 @@ static void groups_sort(struct group_info *group_info)
/* a simple bsearch */ /* a simple bsearch */
int groups_search(struct group_info *group_info, gid_t grp) int groups_search(struct group_info *group_info, gid_t grp)
{ {
int left, right; unsigned int left, right;
if (!group_info) if (!group_info)
return 0; return 0;
...@@ -1371,7 +1371,7 @@ int groups_search(struct group_info *group_info, gid_t grp) ...@@ -1371,7 +1371,7 @@ int groups_search(struct group_info *group_info, gid_t grp)
left = 0; left = 0;
right = group_info->ngroups; right = group_info->ngroups;
while (left < right) { while (left < right) {
int mid = (left+right)/2; unsigned int mid = (left+right)/2;
int cmp = grp - GROUP_AT(group_info, mid); int cmp = grp - GROUP_AT(group_info, mid);
if (cmp > 0) if (cmp > 0)
left = mid + 1; left = mid + 1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment