jump_label: fix jump_label update
PATCH 1/1 jump_label: fix jump_label update
The key of module is out of __stop___jump_table, it causes the events of modules does not work
This bug is introduced by commit: 7cbc5b8d4a775a43875a09e29c49a2a8195b5b2d
--- kernel/jump_label.c | 8 ++++++-- 1 files changed, 6 insertions(+), 2 deletions(-)
kernel/jump_label.c +6 -2
@@ -375,11 +375,15 @@ int jump_label_text_reserved(void *start, void *end)static void jump_label_update (struct jump_label_key *key,int enable) { -struct jump_entry *entry = key->entries; +struct jump_entry *entry = key->entries, *stop = __stop___jump_table; +struct module *mod =__module_address ((jump_label_t )key); + +if (mod) + stop = mod->jump_entries + mod->num_jump_entries;/* if there are no users, entry can be NULL */ if (entry) -__jump_label_update (key, entry, __stop___jump_table, enable); +__jump_label_update (key, entry, stop, enable);#ifdef CONFIG_MODULES __jump_label_mod_update (key, enable);
Signature · 1 line
1.7.5.4
Quoted 2 lines · Xiao Guangrong
The key of module is out of
__stop___jump_table, it causes the events of modules does not work
right, I missed the case when the key is defined in the module itself
Quoted 13 lines
This bug is introduced by commit:
7cbc5b8d4a775a43875a09e29c49a2a8195b5b2dSigned-off-by Xiao Guangrong <[email protected]>--- kernel/jump_label.c | 8 ++++++-- 1 files changed, 6 insertions(+), 2 deletions(-)kernel/jump_label.c +0
-0
kernel/jump_label.c int jump_label_text_reserved(void *start, void *end) · line 382
Quoted 9 lines
kernel/jump_label.c +5
-1@@ -375,11 +375,15 @@ int jump_label_text_reserved(void *start, void *end)static void jump_label_update (struct jump_label_key *key,int enable) { -struct jump_entry *entry = key->entries; +struct jump_entry *entry = key->entries, *stop = __stop___jump_table; +struct module *mod =__module_address ((jump_label_t )key); + +if (mod) + stop = mod->jump_entries + mod->num_jump_entries;
this breaks !CONFIG_MODULES compilation
thanks,
jirka
Quoted 10 lines
kernel/jump_label.c +1
-1/* if there are no users, entry can be NULL */ if (entry) -__jump_label_update (key, entry, __stop___jump_table, enable); +__jump_label_update (key, entry, stop, enable);#ifdef CONFIG_MODULES __jump_label_mod_update (key, enable);Signature · 1 line
1.7.5.4
Quoted 10 lines · Jiri Olsa
kernel/jump_label.c int jump_label_text_reserved(void *start, void *end) · line 382
Quoted 8 lines
static void
jump_label_update(struct jump_label_key *key, int enable){kernel/jump_label.c +5
-1-struct jump_entry *entry = key->entries; +struct jump_entry *entry = key->entries, *stop = __stop___jump_table; +struct module *mod =__module_address ((jump_label_t )key); + +if (mod) + stop = mod->jump_entries + mod->num_jump_entries;this breaks !CONFIG_MODULES compilation
I will fix it, thanks Jiri!
Steven Rostedt
reviewerQuoted 4 lines · Xiao Guangrong
The key of module is out of
__stop___jump_table, it causes the events of modules does not workThis bug is introduced by commit:
7cbc5b8d4a775a43875a09e29c49a2a8195b5b2d
What exactly breaks? I just tried events in modules, and they still work for me.
Quoted 18 lines
Signed-off-by Xiao Guangrong <[email protected]>--- kernel/jump_label.c | 8 ++++++-- 1 files changed, 6 insertions(+), 2 deletions(-)kernel/jump_label.c +3
-1@@ -375,11 +375,15 @@ int jump_label_text_reserved(void *start, void *end)static void jump_label_update (struct jump_label_key *key,int enable) { -struct jump_entry *entry = key->entries; +struct jump_entry *entry = key->entries, *stop = __stop___jump_table; +struct module *mod =__module_address ((jump_label_t )key); +
kernel/jump_label.c int jump_label_text_reserved(void *start, void *end) · line 389
Quoted 10 lines
kernel/jump_label.c +3
-1+if (mod) + stop = mod->jump_entries + mod->num_jump_entries;/* if there are no users, entry can be NULL */ if (entry) -__jump_label_update (key, entry, __stop___jump_table, enable); +__jump_label_update (key, entry, stop, enable);#ifdef CONFIG_MODULES __jump_label_mod_update (key, enable);
Doesn't the __jump_label_mod_update() do the job?
-- Steve
Steven Rostedt
reviewerQuoted 8 lines · Steven Rostedt
Quoted 4 lines · Xiao Guangrong
The key of module is out of
__stop___jump_table, it causes the events of modules does not workThis bug is introduced by commit:
7cbc5b8d4a775a43875a09e29c49a2a8195b5b2dWhat exactly breaks? I just tried events in modules, and they still work for me.
OK, it does break for me. I tested with CONFIG_JUMP_LABEL not set :-p
Please Cc me on further patches.
Thanks,
-- Steve