genirq: Ensure we locate the passed IRQ in irq_alloc_descs()
[pandora-kernel.git] / kernel / jump_label.c
index 74d1c09..fa27e75 100644 (file)
@@ -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);