static void __jump_label_update(struct static_key *key, struct jump_entry *entry, struct jump_entry *stop, int enable) { for (; (entry < stop) && (entry->key == (jump_label_t)(unsigned long)key); entry++) { if (entry->code && kernel_text_address(entry->code)) arch_jump_label_transform(entry, enable); } }
static void __jump_label_update(struct jump_label_key *key, struct jump_entry *entry, int enable) { for (; 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 * init code, see jump_label_invalidate_module_init(). */ if (entry->code && kernel_text_address(entry->code)) arch_jump_label_transform(entry, enable); } }
static void __jump_label_update(struct static_key *key, struct jump_entry *entry, struct jump_entry *stop) { for (; (entry < stop) && (jump_entry_key(entry) == key); entry++) { /* * entry->code set to 0 invalidates module init text sections * kernel_text_address() verifies we are not in core kernel * init code, see jump_label_invalidate_module_init(). */ if (entry->code && kernel_text_address(entry->code)) arch_jump_label_transform(entry, jump_label_type(entry)); } }
/* * Update code which is definitely not currently executing. * Architectures which need heavyweight synchronization to modify * running code can override this to make the non-live update case * cheaper. */ void __weak __init_or_module arch_jump_label_transform_static(struct jump_entry *entry, enum jump_label_type type) { arch_jump_label_transform(entry, type); }