Thread (19 messages) 19 messages, 3 authors, 2018-01-05

[PATCH v7 07/10] kernel/jump_label: abstract jump_entry member accessors

From: catalin.marinas@arm.com (Catalin Marinas)
Date: 2018-01-05 18:22:39
Also in: linux-mips, linuxppc-dev, lkml, sparclinux

On Fri, Jan 05, 2018 at 06:01:33PM +0000, Ard Biesheuvel wrote:
On 5 January 2018 at 17:58, Catalin Marinas [off-list ref] wrote:
quoted
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              NULL
Is 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.
Up to this patch, even the jump_entry structure is the same on all
architectures (the jump_label_t type differs).

With relative offset, can you not just define jump_label_t to s32? At a
quick grep in mainline, it doesn't seem to be used outside the structure
definition.
Perhaps I should introduce two variants two asm-generic, similar to
how we have different flavors of unaligned accessors.
You could as well define them directly in kernel/jump_label.h or, if
used outside this file, include/linux/jump_label.h.

-- 
Catalin
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help