Messages in this thread Patch in this message | | | Date | Tue, 21 Mar 2023 22:03:06 -0700 | From | Josh Poimboeuf <> | Subject | [PATCH v2.1 02/11] static_call: Flip key type union bit |
| |
Flip the meaning of the key->type union field. This will make it easier to converge some of the DECLARE_STATIC_CALL() macros.
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org> --- include/linux/static_call.h | 3 --- include/linux/static_call_types.h | 4 ++-- kernel/static_call_inline.c | 8 ++++---- tools/include/linux/static_call_types.h | 4 ++-- 4 files changed, 8 insertions(+), 11 deletions(-)
diff --git a/include/linux/static_call.h b/include/linux/static_call.h index 141e6b176a1b..f984b8f6d974 100644 --- a/include/linux/static_call.h +++ b/include/linux/static_call.h @@ -186,7 +186,6 @@ extern long __static_call_return0(void); DECLARE_STATIC_CALL(name, _func); \ struct static_call_key STATIC_CALL_KEY(name) = { \ .func = _func, \ - .type = 1, \ }; \ ARCH_DEFINE_STATIC_CALL_TRAMP(name, _func) @@ -194,7 +193,6 @@ extern long __static_call_return0(void); DECLARE_STATIC_CALL(name, _func); \ struct static_call_key STATIC_CALL_KEY(name) = { \ .func = NULL, \ - .type = 1, \ }; \ ARCH_DEFINE_STATIC_CALL_NULL_TRAMP(name) @@ -202,7 +200,6 @@ extern long __static_call_return0(void); DECLARE_STATIC_CALL(name, _func); \ struct static_call_key STATIC_CALL_KEY(name) = { \ .func = __static_call_return0, \ - .type = 1, \ }; \ ARCH_DEFINE_STATIC_CALL_RET0_TRAMP(name) diff --git a/include/linux/static_call_types.h b/include/linux/static_call_types.h index 87c3598609e8..c4c4efb6f6fa 100644 --- a/include/linux/static_call_types.h +++ b/include/linux/static_call_types.h @@ -61,10 +61,10 @@ struct static_call_site { struct static_call_key { void *func; union { - /* bit 0: 0 = mods, 1 = sites */ + /* bit 0: 0 = sites, 1 = mods */ unsigned long type; - struct static_call_mod *_mods; struct static_call_site *_sites; + struct static_call_mod *_mods; }; }; diff --git a/kernel/static_call_inline.c b/kernel/static_call_inline.c index 1328370d3cf6..41f6bda6773a 100644 --- a/kernel/static_call_inline.c +++ b/kernel/static_call_inline.c @@ -112,7 +112,7 @@ static inline void static_call_sort_entries(struct static_call_site *start, static inline bool static_call_key_has_mods(struct static_call_key *key) { - return !(key->type & 1); + return !!(key->type & 1); } static inline struct static_call_mod *static_call_key_mods(struct static_call_key *key) @@ -120,12 +120,13 @@ static inline struct static_call_mod *static_call_key_mods(struct static_call_ke if (!static_call_key_has_mods(key)) return NULL; - return key->_mods; + return (struct static_call_mod *)(key->type & ~1); } static inline void static_call_key_set_mods(struct static_call_key *key, struct static_call_mod *mods) { key->_mods = mods; + key->type |= 1; } static inline struct static_call_site *static_call_key_sites(struct static_call_key *key) @@ -133,13 +134,12 @@ static inline struct static_call_site *static_call_key_sites(struct static_call_ if (static_call_key_has_mods(key)) return NULL; - return (struct static_call_site *)(key->type & ~1); + return key->_sites; } static inline void static_call_key_set_sites(struct static_call_key *key, struct static_call_site *sites) { key->_sites = sites; - key->type |= 1; } void __static_call_update(struct static_call_key *key, void *tramp, void *func) diff --git a/tools/include/linux/static_call_types.h b/tools/include/linux/static_call_types.h index 87c3598609e8..c4c4efb6f6fa 100644 --- a/tools/include/linux/static_call_types.h +++ b/tools/include/linux/static_call_types.h @@ -61,10 +61,10 @@ struct static_call_site { struct static_call_key { void *func; union { - /* bit 0: 0 = mods, 1 = sites */ + /* bit 0: 0 = sites, 1 = mods */ unsigned long type; - struct static_call_mod *_mods; struct static_call_site *_sites; + struct static_call_mod *_mods; }; }; -- 2.39.2
| |