|
@@ -105,9 +105,12 @@ static int __jump_label_text_reserved(struct jump_entry *iter_start,
|
|
|
}
|
|
|
|
|
|
static void __jump_label_update(struct jump_label_key *key,
|
|
|
- struct jump_entry *entry, int enable)
|
|
|
+ struct jump_entry *entry,
|
|
|
+ struct jump_entry *stop, int enable)
|
|
|
{
|
|
|
- for (; entry->key == (jump_label_t)(unsigned long)key; entry++) {
|
|
|
+ for (; (entry < stop) &&
|
|
|
+ (entry->key == (jump_label_t)(unsigned long)key);
|
|
|
+ entry++) {
|
|
|
/*
|
|
|
* entry->code set to 0 invalidates module init text sections
|
|
|
* kernel_text_address() verifies we are not in core kernel
|
|
@@ -181,7 +184,11 @@ static void __jump_label_mod_update(struct jump_label_key *key, int enable)
|
|
|
struct jump_label_mod *mod = key->next;
|
|
|
|
|
|
while (mod) {
|
|
|
- __jump_label_update(key, mod->entries, enable);
|
|
|
+ struct module *m = mod->mod;
|
|
|
+
|
|
|
+ __jump_label_update(key, mod->entries,
|
|
|
+ m->jump_entries + m->num_jump_entries,
|
|
|
+ enable);
|
|
|
mod = mod->next;
|
|
|
}
|
|
|
}
|
|
@@ -245,7 +252,8 @@ static int jump_label_add_module(struct module *mod)
|
|
|
key->next = jlm;
|
|
|
|
|
|
if (jump_label_enabled(key))
|
|
|
- __jump_label_update(key, iter, JUMP_LABEL_ENABLE);
|
|
|
+ __jump_label_update(key, iter, iter_stop,
|
|
|
+ JUMP_LABEL_ENABLE);
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
@@ -371,7 +379,7 @@ static void jump_label_update(struct jump_label_key *key, int enable)
|
|
|
|
|
|
/* if there are no users, entry can be NULL */
|
|
|
if (entry)
|
|
|
- __jump_label_update(key, entry, enable);
|
|
|
+ __jump_label_update(key, entry, __stop___jump_table, enable);
|
|
|
|
|
|
#ifdef CONFIG_MODULES
|
|
|
__jump_label_mod_update(key, enable);
|