[PATCH v7 07/10] kernel/jump_label: abstract jump_entry member accessors
From: Ard Biesheuvel <hidden>
Date: 2018-01-05 18:01:38
Also in:
linux-mips, linuxppc-dev, lkml, sparclinux
From: Ard Biesheuvel <hidden>
Date: 2018-01-05 18:01:38
Also in:
linux-mips, linuxppc-dev, lkml, sparclinux
On 5 January 2018 at 17:58, Catalin Marinas [off-list ref] wrote:
On Tue, Jan 02, 2018 at 08:05:46PM +0000, Ard Biesheuvel wrote:quoted
diff --git a/arch/arm/include/asm/jump_label.h b/arch/arm/include/asm/jump_label.h index e12d7d096fc0..7b05b404063a 100644 --- a/arch/arm/include/asm/jump_label.h +++ b/arch/arm/include/asm/jump_label.h@@ -45,5 +45,32 @@ struct jump_entry { jump_label_t key; }; +static inline jump_label_t jump_entry_code(const struct jump_entry *entry) +{ + return entry->code; +} + +static inline struct static_key *jump_entry_key(const struct jump_entry *entry) +{ + return (struct static_key *)((unsigned long)entry->key & ~1UL); +} + +static inline bool jump_entry_is_branch(const struct jump_entry *entry) +{ + return (unsigned long)entry->key & 1UL; +} + +static inline bool jump_entry_is_module_init(const struct jump_entry *entry) +{ + return entry->code == 0; +} + +static inline void jump_entry_set_module_init(struct jump_entry *entry) +{ + entry->code = 0; +} + +#define jump_label_swap NULLIs there any difference between these functions on any of the architectures touched? Even with the relative offset, arm64 and x86 looked the same to me (well, I may have missed some detail).
No, the latter two are identical everywhere, and the others are the same modulo absolute vs relative. The issue is that the struct definition is per-arch so the accessors should be as well. Perhaps I should introduce two variants two asm-generic, similar to how we have different flavors of unaligned accessors.