Modify the parameters of all the lookup and the bookkeeping functions which should be const to const. For example, jump_label_text_reserved() doesn't modify the memory it works on, it just checks whether there are any jump labels there. Signed-off-by: Sasha Levin <sasha.levin@xxxxxxxxxx> --- arch/arm/include/asm/jump_label.h | 2 +- arch/arm/kernel/jump_label.c | 6 ++--- arch/arm64/include/asm/jump_label.h | 2 +- arch/arm64/kernel/jump_label.c | 6 ++--- arch/mips/include/asm/jump_label.h | 2 +- arch/mips/kernel/jump_label.c | 2 +- arch/powerpc/include/asm/jump_label.h | 2 +- arch/powerpc/kernel/jump_label.c | 2 +- arch/s390/include/asm/jump_label.h | 2 +- arch/s390/kernel/jump_label.c | 12 ++++----- arch/sparc/include/asm/jump_label.h | 2 +- arch/sparc/kernel/jump_label.c | 2 +- arch/x86/include/asm/jump_label.h | 2 +- arch/x86/include/asm/spinlock.h | 2 +- arch/x86/kernel/jump_label.c | 6 ++--- include/linux/jump_label.h | 27 ++++++++++---------- kernel/jump_label.c | 46 ++++++++++++++++++----------------- 17 files changed, 64 insertions(+), 61 deletions(-) diff --git a/arch/arm/include/asm/jump_label.h b/arch/arm/include/asm/jump_label.h index 863c892..c8a5e9f 100644 --- a/arch/arm/include/asm/jump_label.h +++ b/arch/arm/include/asm/jump_label.h @@ -14,7 +14,7 @@ #define JUMP_LABEL_NOP "nop" #endif -static __always_inline bool arch_static_branch(struct static_key *key) +static __always_inline bool arch_static_branch(const struct static_key *key) { asm_volatile_goto("1:\n\t" JUMP_LABEL_NOP "\n\t" diff --git a/arch/arm/kernel/jump_label.c b/arch/arm/kernel/jump_label.c index 4ce4f78..9686fce 100644 --- a/arch/arm/kernel/jump_label.c +++ b/arch/arm/kernel/jump_label.c @@ -6,7 +6,7 @@ #ifdef HAVE_JUMP_LABEL -static void __arch_jump_label_transform(struct jump_entry *entry, +static void __arch_jump_label_transform(const struct jump_entry *entry, enum jump_label_type type, bool is_static) { @@ -24,13 +24,13 @@ static void __arch_jump_label_transform(struct jump_entry *entry, patch_text(addr, insn); } -void arch_jump_label_transform(struct jump_entry *entry, +void arch_jump_label_transform(const struct jump_entry *entry, enum jump_label_type type) { __arch_jump_label_transform(entry, type, false); } -void arch_jump_label_transform_static(struct jump_entry *entry, +void arch_jump_label_transform_static(const struct jump_entry *entry, enum jump_label_type type) { __arch_jump_label_transform(entry, type, true); diff --git a/arch/arm64/include/asm/jump_label.h b/arch/arm64/include/asm/jump_label.h index 076a1c7..93ca8b3 100644 --- a/arch/arm64/include/asm/jump_label.h +++ b/arch/arm64/include/asm/jump_label.h @@ -25,7 +25,7 @@ #define JUMP_LABEL_NOP_SIZE AARCH64_INSN_SIZE -static __always_inline bool arch_static_branch(struct static_key *key) +static __always_inline bool arch_static_branch(const struct static_key *key) { asm goto("1: nop\n\t" ".pushsection __jump_table, \"aw\"\n\t" diff --git a/arch/arm64/kernel/jump_label.c b/arch/arm64/kernel/jump_label.c index 263a166..c30e4ba 100644 --- a/arch/arm64/kernel/jump_label.c +++ b/arch/arm64/kernel/jump_label.c @@ -22,7 +22,7 @@ #ifdef HAVE_JUMP_LABEL -static void __arch_jump_label_transform(struct jump_entry *entry, +static void __arch_jump_label_transform(const struct jump_entry *entry, enum jump_label_type type, bool is_static) { @@ -43,13 +43,13 @@ static void __arch_jump_label_transform(struct jump_entry *entry, aarch64_insn_patch_text(&addr, &insn, 1); } -void arch_jump_label_transform(struct jump_entry *entry, +void arch_jump_label_transform(const struct jump_entry *entry, enum jump_label_type type) { __arch_jump_label_transform(entry, type, false); } -void arch_jump_label_transform_static(struct jump_entry *entry, +void arch_jump_label_transform_static(const struct jump_entry *entry, enum jump_label_type type) { __arch_jump_label_transform(entry, type, true); diff --git a/arch/mips/include/asm/jump_label.h b/arch/mips/include/asm/jump_label.h index e194f95..0ac7892 100644 --- a/arch/mips/include/asm/jump_label.h +++ b/arch/mips/include/asm/jump_label.h @@ -20,7 +20,7 @@ #define WORD_INSN ".word" #endif -static __always_inline bool arch_static_branch(struct static_key *key) +static __always_inline bool arch_static_branch(const struct static_key *key) { asm_volatile_goto("1:\tnop\n\t" "nop\n\t" diff --git a/arch/mips/kernel/jump_label.c b/arch/mips/kernel/jump_label.c index 6001610..bfba488 100644 --- a/arch/mips/kernel/jump_label.c +++ b/arch/mips/kernel/jump_label.c @@ -20,7 +20,7 @@ #define J_RANGE_MASK ((1ul << 28) - 1) -void arch_jump_label_transform(struct jump_entry *e, +void arch_jump_label_transform(const struct jump_entry *e, enum jump_label_type type) { union mips_instruction insn; diff --git a/arch/powerpc/include/asm/jump_label.h b/arch/powerpc/include/asm/jump_label.h index f016bb6..93eb7c5 100644 --- a/arch/powerpc/include/asm/jump_label.h +++ b/arch/powerpc/include/asm/jump_label.h @@ -17,7 +17,7 @@ #define JUMP_ENTRY_TYPE stringify_in_c(FTR_ENTRY_LONG) #define JUMP_LABEL_NOP_SIZE 4 -static __always_inline bool arch_static_branch(struct static_key *key) +static __always_inline bool arch_static_branch(const struct static_key *key) { asm_volatile_goto("1:\n\t" "nop\n\t" diff --git a/arch/powerpc/kernel/jump_label.c b/arch/powerpc/kernel/jump_label.c index a1ed8a8..f9626ec 100644 --- a/arch/powerpc/kernel/jump_label.c +++ b/arch/powerpc/kernel/jump_label.c @@ -12,7 +12,7 @@ #include <asm/code-patching.h> #ifdef HAVE_JUMP_LABEL -void arch_jump_label_transform(struct jump_entry *entry, +void arch_jump_label_transform(const struct jump_entry *entry, enum jump_label_type type) { u32 *addr = (u32 *)(unsigned long)entry->code; diff --git a/arch/s390/include/asm/jump_label.h b/arch/s390/include/asm/jump_label.h index 346b1c8..9ee8e1b 100644 --- a/arch/s390/include/asm/jump_label.h +++ b/arch/s390/include/asm/jump_label.h @@ -13,7 +13,7 @@ #define ASM_ALIGN ".balign 4" #endif -static __always_inline bool arch_static_branch(struct static_key *key) +static __always_inline bool arch_static_branch(const struct static_key *key) { asm_volatile_goto("0: brcl 0,0\n" ".pushsection __jump_table, \"aw\"\n" diff --git a/arch/s390/kernel/jump_label.c b/arch/s390/kernel/jump_label.c index b987ab2..15a7c60 100644 --- a/arch/s390/kernel/jump_label.c +++ b/arch/s390/kernel/jump_label.c @@ -18,11 +18,11 @@ struct insn { } __packed; struct insn_args { - struct jump_entry *entry; + const const struct jump_entry *entry; enum jump_label_type type; }; -static void __jump_label_transform(struct jump_entry *entry, +static void __jump_label_transform(const struct jump_entry *entry, enum jump_label_type type) { struct insn insn; @@ -42,15 +42,15 @@ static void __jump_label_transform(struct jump_entry *entry, WARN_ON_ONCE(rc < 0); } -static int __sm_arch_jump_label_transform(void *data) +static int __sm_arch_jump_label_transform(const void *data) { - struct insn_args *args = data; + const struct insn_args *args = data; __jump_label_transform(args->entry, args->type); return 0; } -void arch_jump_label_transform(struct jump_entry *entry, +void arch_jump_label_transform(const struct jump_entry *entry, enum jump_label_type type) { struct insn_args args; @@ -61,7 +61,7 @@ void arch_jump_label_transform(struct jump_entry *entry, stop_machine(__sm_arch_jump_label_transform, &args, NULL); } -void arch_jump_label_transform_static(struct jump_entry *entry, +void arch_jump_label_transform_static(const struct jump_entry *entry, enum jump_label_type type) { __jump_label_transform(entry, type); diff --git a/arch/sparc/include/asm/jump_label.h b/arch/sparc/include/asm/jump_label.h index ec2e2e2..4f1f223 100644 --- a/arch/sparc/include/asm/jump_label.h +++ b/arch/sparc/include/asm/jump_label.h @@ -7,7 +7,7 @@ #define JUMP_LABEL_NOP_SIZE 4 -static __always_inline bool arch_static_branch(struct static_key *key) +static __always_inline bool arch_static_branch(const struct static_key *key) { asm_volatile_goto("1:\n\t" "nop\n\t" diff --git a/arch/sparc/kernel/jump_label.c b/arch/sparc/kernel/jump_label.c index 48565c1..231c10e 100644 --- a/arch/sparc/kernel/jump_label.c +++ b/arch/sparc/kernel/jump_label.c @@ -10,7 +10,7 @@ #ifdef HAVE_JUMP_LABEL -void arch_jump_label_transform(struct jump_entry *entry, +void arch_jump_label_transform(const struct jump_entry *entry, enum jump_label_type type) { u32 val; diff --git a/arch/x86/include/asm/jump_label.h b/arch/x86/include/asm/jump_label.h index 6a2cefb..329ab91 100644 --- a/arch/x86/include/asm/jump_label.h +++ b/arch/x86/include/asm/jump_label.h @@ -16,7 +16,7 @@ # define STATIC_KEY_INIT_NOP GENERIC_NOP5_ATOMIC #endif -static __always_inline bool arch_static_branch(struct static_key *key) +static __always_inline bool arch_static_branch(const struct static_key *key) { asm_volatile_goto("1:" ".byte " __stringify(STATIC_KEY_INIT_NOP) "\n\t" diff --git a/arch/x86/include/asm/spinlock.h b/arch/x86/include/asm/spinlock.h index bf156de..5af9269 100644 --- a/arch/x86/include/asm/spinlock.h +++ b/arch/x86/include/asm/spinlock.h @@ -41,7 +41,7 @@ #define SPIN_THRESHOLD (1 << 15) extern struct static_key paravirt_ticketlocks_enabled; -static __always_inline bool static_key_false(struct static_key *key); +static __always_inline bool static_key_false(const struct static_key *key); #ifdef CONFIG_PARAVIRT_SPINLOCKS diff --git a/arch/x86/kernel/jump_label.c b/arch/x86/kernel/jump_label.c index 26d5a55..fe1cc9d 100644 --- a/arch/x86/kernel/jump_label.c +++ b/arch/x86/kernel/jump_label.c @@ -36,7 +36,7 @@ static void bug_at(unsigned char *ip, int line) BUG(); } -static void __jump_label_transform(struct jump_entry *entry, +static void __jump_label_transform(const struct jump_entry *entry, enum jump_label_type type, void *(*poker)(void *, const void *, size_t), int init) @@ -102,7 +102,7 @@ static void __jump_label_transform(struct jump_entry *entry, (void *)entry->code + JUMP_LABEL_NOP_SIZE); } -void arch_jump_label_transform(struct jump_entry *entry, +void arch_jump_label_transform(const struct jump_entry *entry, enum jump_label_type type) { get_online_cpus(); @@ -118,7 +118,7 @@ static enum { JL_STATE_UPDATE, } jlstate __initdata_or_module = JL_STATE_START; -__init_or_module void arch_jump_label_transform_static(struct jump_entry *entry, +__init_or_module void arch_jump_label_transform_static(const struct jump_entry *entry, enum jump_label_type type) { /* diff --git a/include/linux/jump_label.h b/include/linux/jump_label.h index 5c1dfb2..2b2e358 100644 --- a/include/linux/jump_label.h +++ b/include/linux/jump_label.h @@ -86,13 +86,14 @@ struct module; #define JUMP_LABEL_TYPE_MASK 1UL static -inline struct jump_entry *jump_label_get_entries(struct static_key *key) +inline const struct jump_entry *jump_label_get_entries( + const struct static_key *key) { return (struct jump_entry *)((unsigned long)key->entries & ~JUMP_LABEL_TYPE_MASK); } -static inline bool jump_label_get_branch_default(struct static_key *key) +static inline bool jump_label_get_branch_default(const struct static_key *key) { if (((unsigned long)key->entries & JUMP_LABEL_TYPE_MASK) == JUMP_LABEL_TYPE_TRUE_BRANCH) @@ -100,12 +101,12 @@ static inline bool jump_label_get_branch_default(struct static_key *key) return false; } -static __always_inline bool static_key_false(struct static_key *key) +static __always_inline bool static_key_false(const struct static_key *key) { return arch_static_branch(key); } -static __always_inline bool static_key_true(struct static_key *key) +static __always_inline bool static_key_true(const struct static_key *key) { return !static_key_false(key); } @@ -116,14 +117,14 @@ extern struct jump_entry __stop___jump_table[]; extern void jump_label_init(void); extern void jump_label_lock(void); extern void jump_label_unlock(void); -extern void arch_jump_label_transform(struct jump_entry *entry, +extern void arch_jump_label_transform(const struct jump_entry *entry, enum jump_label_type type); -extern void arch_jump_label_transform_static(struct jump_entry *entry, +extern void arch_jump_label_transform_static(const struct jump_entry *entry, enum jump_label_type type); -extern int jump_label_text_reserved(void *start, void *end); +extern int jump_label_text_reserved(const void *start, const void *end); extern void static_key_slow_inc(struct static_key *key); extern void static_key_slow_dec(struct static_key *key); -extern void jump_label_apply_nops(struct module *mod); +extern void jump_label_apply_nops(const struct module *mod); #define STATIC_KEY_INIT_TRUE ((struct static_key) \ { .enabled = ATOMIC_INIT(1), \ @@ -143,14 +144,14 @@ static __always_inline void jump_label_init(void) static_key_initialized = true; } -static __always_inline bool static_key_false(struct static_key *key) +static __always_inline bool static_key_false(const struct static_key *key) { if (unlikely(atomic_read(&key->enabled) > 0)) return true; return false; } -static __always_inline bool static_key_true(struct static_key *key) +static __always_inline bool static_key_true(const struct static_key *key) { if (likely(atomic_read(&key->enabled) > 0)) return true; @@ -169,7 +170,7 @@ static inline void static_key_slow_dec(struct static_key *key) atomic_dec(&key->enabled); } -static inline int jump_label_text_reserved(void *start, void *end) +static inline int jump_label_text_reserved(const void *start, const void *end) { return 0; } @@ -177,7 +178,7 @@ static inline int jump_label_text_reserved(void *start, void *end) static inline void jump_label_lock(void) {} static inline void jump_label_unlock(void) {} -static inline int jump_label_apply_nops(struct module *mod) +static inline int jump_label_apply_nops(const struct module *mod) { return 0; } @@ -192,7 +193,7 @@ static inline int jump_label_apply_nops(struct module *mod) #define STATIC_KEY_INIT STATIC_KEY_INIT_FALSE #define jump_label_enabled static_key_enabled -static inline bool static_key_enabled(struct static_key *key) +static inline bool static_key_enabled(const struct static_key *key) { return (atomic_read(&key->enabled) > 0); } diff --git a/kernel/jump_label.c b/kernel/jump_label.c index 9019f15..6879f48 100644 --- a/kernel/jump_label.c +++ b/kernel/jump_label.c @@ -54,7 +54,7 @@ jump_label_sort_entries(struct jump_entry *start, struct jump_entry *stop) sort(start, size, sizeof(struct jump_entry), jump_label_cmp, NULL); } -static void jump_label_update(struct static_key *key, int enable); +static void jump_label_update(const struct static_key *key, int enable); void static_key_slow_inc(struct static_key *key) { @@ -125,7 +125,8 @@ void jump_label_rate_limit(struct static_key_deferred *key, } EXPORT_SYMBOL_GPL(jump_label_rate_limit); -static int addr_conflict(struct jump_entry *entry, void *start, void *end) +static int addr_conflict(const struct jump_entry *entry, const void *start, + const void *end) { if (entry->code <= (unsigned long)end && entry->code + JUMP_LABEL_NOP_SIZE > (unsigned long)start) @@ -134,10 +135,11 @@ static int addr_conflict(struct jump_entry *entry, void *start, void *end) return 0; } -static int __jump_label_text_reserved(struct jump_entry *iter_start, - struct jump_entry *iter_stop, void *start, void *end) +static int __jump_label_text_reserved(const struct jump_entry *iter_start, + const struct jump_entry *iter_stop, const void *start, + const void *end) { - struct jump_entry *iter; + const struct jump_entry *iter; iter = iter_start; while (iter < iter_stop) { @@ -155,15 +157,15 @@ static int __jump_label_text_reserved(struct jump_entry *iter_start, * 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) +void __weak __init_or_module arch_jump_label_transform_static( + const struct jump_entry *entry, enum jump_label_type type) { arch_jump_label_transform(entry, type); } -static void __jump_label_update(struct static_key *key, - struct jump_entry *entry, - struct jump_entry *stop, int enable) +static void __jump_label_update(const struct static_key *key, + const struct jump_entry *entry, + const struct jump_entry *stop, int enable) { for (; (entry < stop) && (entry->key == (jump_label_t)(unsigned long)key); @@ -178,7 +180,7 @@ static void __jump_label_update(struct static_key *key, } } -static enum jump_label_type jump_label_type(struct static_key *key) +static enum jump_label_type jump_label_type(const struct static_key *key) { bool true_branch = jump_label_get_branch_default(key); bool state = static_key_enabled(key); @@ -228,9 +230,9 @@ struct static_key_mod { struct module *mod; }; -static int __jump_label_mod_text_reserved(void *start, void *end) +static int __jump_label_mod_text_reserved(const void *start, const void *end) { - struct module *mod; + const struct module *mod; mod = __module_text_address((unsigned long)start); if (!mod) @@ -243,12 +245,12 @@ static int __jump_label_mod_text_reserved(void *start, void *end) start, end); } -static void __jump_label_mod_update(struct static_key *key, int enable) +static void __jump_label_mod_update(const struct static_key *key, int enable) { - struct static_key_mod *mod = key->next; + const struct static_key_mod *mod = key->next; while (mod) { - struct module *m = mod->mod; + const struct module *m = mod->mod; __jump_label_update(key, mod->entries, m->jump_entries + m->num_jump_entries, @@ -265,7 +267,7 @@ static void __jump_label_mod_update(struct static_key *key, int enable) * loads patch these with arch_get_jump_label_nop(), which is specified by * the arch specific jump label code. */ -void jump_label_apply_nops(struct module *mod) +void jump_label_apply_nops(const struct module *mod) { struct jump_entry *iter_start = mod->jump_entries; struct jump_entry *iter_stop = iter_start + mod->num_jump_entries; @@ -425,7 +427,7 @@ early_initcall(jump_label_init_module); * * returns 1 if there is an overlap, 0 otherwise */ -int jump_label_text_reserved(void *start, void *end) +int jump_label_text_reserved(const void *start, const void *end) { int ret = __jump_label_text_reserved(__start___jump_table, __stop___jump_table, start, end); @@ -439,13 +441,13 @@ int jump_label_text_reserved(void *start, void *end) return ret; } -static void jump_label_update(struct static_key *key, int enable) +static void jump_label_update(const struct static_key *key, int enable) { - struct jump_entry *stop = __stop___jump_table; - struct jump_entry *entry = jump_label_get_entries(key); + const struct jump_entry *stop = __stop___jump_table; + const struct jump_entry *entry = jump_label_get_entries(key); #ifdef CONFIG_MODULES - struct module *mod = __module_address((unsigned long)key); + const struct module *mod = __module_address((unsigned long)key); __jump_label_mod_update(key, enable); -- 1.8.3.2 -- To unsubscribe from this list: send the line "unsubscribe linux-arch" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html