From 4f1354d5c6a3264c91238962d1597eef40c40419 Mon Sep 17 00:00:00 2001 From: Zhen Lei Date: Wed, 7 Dec 2022 11:23:04 +0800 Subject: [PATCH] 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 Acked-by: Song Liu Reviewed-by: Petr Mladek Suggested-by: Petr Mladek Signed-off-by: Luis Chamberlain --- kernel/livepatch/core.c | 45 ++++++++++++++++------------------------- 1 file changed, 17 insertions(+), 28 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,34 +125,6 @@ struct klp_find_arg { unsigned long pos; }; -static int klp_find_callback(void *data, const char *name, - struct module *mod, 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++; - - /* - * 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; - - return 0; -} - static int klp_match_callback(void *data, unsigned long addr) { struct klp_find_arg *args = data; @@ -171,6 +143,23 @@ static int klp_match_callback(void *data, unsigned long addr) return 0; } +static int klp_find_callback(void *data, const char *name, + struct module *mod, 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; + + return klp_match_callback(data, addr); +} + static int klp_find_object_symbol(const char *objname, const char *name, unsigned long sympos, unsigned long *addr) {