diff options
author | Alessio Igor Bogani <abogani@kernel.org> | 2011-05-18 16:35:59 -0400 |
---|---|---|
committer | Rusty Russell <rusty@rustcorp.com.au> | 2011-05-19 03:25:27 -0400 |
commit | 9d63487f86115b1d3ef69670043bcf2b83c4d227 (patch) | |
tree | 3833a5f467f0958eaeab9f86f207dca60868bb0d /kernel/module.c | |
parent | 403ed27846aa126ecf0b842b5b179c506b9d989c (diff) |
module: Use binary search in lookup_symbol()
The function is_exported() with its helper function lookup_symbol() are used to
verify if a provided symbol is effectively exported by the kernel or by the
modules. Now that both have their symbols sorted we can replace a linear search
with a binary search which provide a considerably speed-up.
This work was supported by a hardware donation from the CE Linux Forum.
Signed-off-by: Alessio Igor Bogani <abogani@kernel.org>
Acked-by: Greg Kroah-Hartman <gregkh@suse.de>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Diffstat (limited to 'kernel/module.c')
-rw-r--r-- | kernel/module.c | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/kernel/module.c b/kernel/module.c index d1db8eb56ad4..22879725678d 100644 --- a/kernel/module.c +++ b/kernel/module.c | |||
@@ -2055,11 +2055,8 @@ static const struct kernel_symbol *lookup_symbol(const char *name, | |||
2055 | const struct kernel_symbol *start, | 2055 | const struct kernel_symbol *start, |
2056 | const struct kernel_symbol *stop) | 2056 | const struct kernel_symbol *stop) |
2057 | { | 2057 | { |
2058 | const struct kernel_symbol *ks = start; | 2058 | return bsearch(name, start, stop - start, |
2059 | for (; ks < stop; ks++) | 2059 | sizeof(struct kernel_symbol), cmp_name); |
2060 | if (strcmp(ks->name, name) == 0) | ||
2061 | return ks; | ||
2062 | return NULL; | ||
2063 | } | 2060 | } |
2064 | 2061 | ||
2065 | static int is_exported(const char *name, unsigned long value, | 2062 | static int is_exported(const char *name, unsigned long value, |