lkml.org 
[lkml]   [2009]   [Sep]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 2/2] module: use bsearch in find_symbol_in_kernel_section.
    Date
    Signed-off-by: Tim Abbott <tabbott@ksplice.com>
    ---
    kernel/module.c | 34 +++++++++++++++-------------------
    1 files changed, 15 insertions(+), 19 deletions(-)

    diff --git a/kernel/module.c b/kernel/module.c
    index 9b19f23..25ff16b 100644
    --- a/kernel/module.c
    +++ b/kernel/module.c
    @@ -55,6 +55,7 @@
    #include <linux/async.h>
    #include <linux/percpu.h>
    #include <linux/kmemleak.h>
    +#include <linux/bsearch.h>

    #define CREATE_TRACE_POINTS
    #include <trace/events/module.h>
    @@ -209,31 +210,26 @@ struct symsearch {
    #define symversion(base, idx) ((base != NULL) ? ((base) + (idx)) : NULL)
    #endif

    -/* binary search on sorted symbols */
    +static int symbol_compare(const void *key, const void *elt)
    +{
    + const char *str = key;
    + const struct kernel_symbol *sym = elt;
    + return strcmp(sym->name, str);
    +}
    +
    static bool find_symbol_in_kernel_section(const struct symsearch *syms,
    const char *name,
    unsigned int *symnum)
    {
    - int lo = 0, hi = syms->stop - syms->start - 1;
    - int mid, cmp;
    -
    - while (lo <= hi) {
    - mid = (lo + hi) / 2;
    - cmp = strcmp(syms->start[mid].name, name);
    - if (cmp == 0) {
    - *symnum = mid;
    - return true;
    - }
    - else if (cmp < 0)
    - hi = mid - 1;
    - else
    - lo = mid + 1;
    - }
    -
    - return false;
    + const struct kernel_symbol *sym =
    + bsearch(name, syms->start, syms->stop - syms->start,
    + sizeof(*syms->start), symbol_compare);
    + if (sym == NULL)
    + return false;
    + *symnum = sym - syms->start;
    + return true;
    }

    -
    static bool find_symbol_in_kernel(const char *name,
    struct symsearch *sym,
    unsigned int *symnum)
    --
    1.6.3.3


    \
     
     \ /
      Last update: 2009-09-23 19:37    [W:0.023 / U:153.536 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site