From: Alessio Igor Bogani <abogani@kernel.org>
To: Rusty Russell <rusty@rustcorp.com.au>
Cc: LKML <linux-kernel@vger.kernel.org>,
Ian Lance Taylor <ian@airs.com>, Tim Bird <tim.bird@am.sony.com>,
Alessio Igor Bogani <abogani@kernel.org>
Subject: [PATCH 2/2] Replace the linear search with a binary search for locate the symbols
Date: Wed, 23 Mar 2011 22:00:43 +0100 [thread overview]
Message-ID: <1300914043-2297-3-git-send-email-abogani@kernel.org> (raw)
In-Reply-To: <1300914043-2297-1-git-send-email-abogani@kernel.org>
This work was supported by a hardware donation from the CE Linux Forum.
Signed-off-by: Alessio Igor Bogani <abogani@kernel.org>
---
kernel/module.c | 49 ++++++++++++++++++++++++++++++-------------------
1 files changed, 30 insertions(+), 19 deletions(-)
diff --git a/kernel/module.c b/kernel/module.c
index 1f9f7bc..932726d 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -235,6 +235,18 @@ extern const unsigned long __start___kcrctab_unused_gpl[];
#define symversion(base, idx) ((base != NULL) ? ((base) + (idx)) : NULL)
#endif
+struct find_symbol_arg {
+ /* Input */
+ const char *name;
+ bool gplok;
+ bool warn;
+
+ /* Output */
+ struct module *owner;
+ const unsigned long *crc;
+ const struct kernel_symbol *sym;
+};
+
static bool each_symbol_in_section(const struct symsearch *arr,
unsigned int arrsize,
struct module *owner,
@@ -243,12 +255,26 @@ static bool each_symbol_in_section(const struct symsearch *arr,
unsigned int symnum, void *data),
void *data)
{
- unsigned int i, j;
+ unsigned int j, i;
+ struct find_symbol_arg *fsa = data;
+ size_t num;
+ int start, end, mid, result;
for (j = 0; j < arrsize; j++) {
- for (i = 0; i < arr[j].stop - arr[j].start; i++)
- if (fn(&arr[j], owner, i, data))
- return true;
+ num = arr[j].stop - arr[j].start;
+ start = 0, end = num - 1, mid, result, i = 0;
+ while (start <= end) {
+ i++;
+ mid = (start + end) / 2;
+ result = strcmp(fsa->name, arr[j].start[mid].name);
+ if (result < 0)
+ end = mid - 1;
+ else if (result > 0)
+ start = mid + 1;
+ else
+ if (fn(&arr[j], owner, mid, data))
+ return true;
+ }
}
return false;
@@ -311,27 +337,12 @@ bool each_symbol(bool (*fn)(const struct symsearch *arr, struct module *owner,
}
EXPORT_SYMBOL_GPL(each_symbol);
-struct find_symbol_arg {
- /* Input */
- const char *name;
- bool gplok;
- bool warn;
-
- /* Output */
- struct module *owner;
- const unsigned long *crc;
- const struct kernel_symbol *sym;
-};
-
static bool find_symbol_in_section(const struct symsearch *syms,
struct module *owner,
unsigned int symnum, void *data)
{
struct find_symbol_arg *fsa = data;
- if (strcmp(syms->start[symnum].name, fsa->name) != 0)
- return false;
-
if (!fsa->gplok) {
if (syms->licence == GPL_ONLY)
return false;
--
1.7.4.1
next prev parent reply other threads:[~2011-03-23 21:02 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-23 21:00 [PATCH 0/2] Speed up the symbols' resolution process Alessio Igor Bogani
2011-03-23 21:00 ` [PATCH 1/2] Let Linker sort the symbols Alessio Igor Bogani
2011-03-23 21:00 ` Alessio Igor Bogani [this message]
2011-03-24 15:54 ` [PATCH 2/2] Replace the linear search with a binary search for locate " Andi Kleen
2011-03-25 5:14 ` Rusty Russell
2011-03-25 15:41 ` Andi Kleen
2011-03-25 16:30 ` Alessio Igor Bogani
2011-03-25 19:49 ` Andi Kleen
2011-03-25 21:31 ` Alessio Igor Bogani
2011-03-26 20:04 ` Andi Kleen
2011-03-28 8:22 ` Alessio Igor Bogani
2011-03-28 15:59 ` Andi Kleen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1300914043-2297-3-git-send-email-abogani@kernel.org \
--to=abogani@kernel.org \
--cc=ian@airs.com \
--cc=linux-kernel@vger.kernel.org \
--cc=rusty@rustcorp.com.au \
--cc=tim.bird@am.sony.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox