diff options
author | Zhen Lei <thunder.leizhen@huawei.com> | 2022-12-07 06:23:04 +0300 |
---|---|---|
committer | Luis Chamberlain <mcgrof@kernel.org> | 2022-12-13 05:30:58 +0300 |
commit | 4f1354d5c6a3264c91238962d1597eef40c40419 (patch) | |
tree | e90a5d03d5af222a782b6c930fa1cac7e7af543c | |
parent | 169a58ad824d896b9e291a27193342616e651b82 (diff) | |
download | linux-4f1354d5c6a3264c91238962d1597eef40c40419.tar.xz |
livepatch: Call klp_match_callback() in klp_find_callback() to avoid code duplication
The implementation of function klp_match_callback() is identical to the
partial implementation of function klp_find_callback(). So call function
klp_match_callback() in function klp_find_callback() instead of the
duplicated code.
Signed-off-by: Zhen Lei <thunder.leizhen@huawei.com>
Acked-by: Song Liu <song@kernel.org>
Reviewed-by: Petr Mladek <pmladek@suse.com>
Suggested-by: Petr Mladek <pmladek@suse.com>
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
-rw-r--r-- | kernel/livepatch/core.c | 33 |
1 files changed, 11 insertions, 22 deletions
diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c index 50bfc3481a4e..201f0c0482fb 100644 --- a/kernel/livepatch/core.c +++ b/kernel/livepatch/core.c @@ -125,20 +125,10 @@ struct klp_find_arg { unsigned long pos; }; -static int klp_find_callback(void *data, const char *name, - struct module *mod, unsigned long addr) +static int klp_match_callback(void *data, unsigned long addr) { struct klp_find_arg *args = data; - if ((mod && !args->objname) || (!mod && args->objname)) - return 0; - - if (strcmp(args->name, name)) - return 0; - - if (args->objname && strcmp(args->objname, mod->name)) - return 0; - args->addr = addr; args->count++; @@ -153,22 +143,21 @@ static int klp_find_callback(void *data, const char *name, return 0; } -static int klp_match_callback(void *data, unsigned long addr) +static int klp_find_callback(void *data, const char *name, + struct module *mod, unsigned long addr) { struct klp_find_arg *args = data; - args->addr = addr; - args->count++; + if ((mod && !args->objname) || (!mod && args->objname)) + return 0; - /* - * Finish the search when the symbol is found for the desired position - * or the position is not defined for a non-unique symbol. - */ - if ((args->pos && (args->count == args->pos)) || - (!args->pos && (args->count > 1))) - return 1; + if (strcmp(args->name, name)) + return 0; - return 0; + if (args->objname && strcmp(args->objname, mod->name)) + return 0; + + return klp_match_callback(data, addr); } static int klp_find_object_symbol(const char *objname, const char *name, |