diff options
Diffstat (limited to 'include/linux/static_call.h')
| -rw-r--r-- | include/linux/static_call.h | 26 | 
1 files changed, 8 insertions, 18 deletions
diff --git a/include/linux/static_call.h b/include/linux/static_call.h index 85ecc789f4ff..e01b61ab86b1 100644 --- a/include/linux/static_call.h +++ b/include/linux/static_call.h @@ -20,6 +20,7 @@   *   static_call(name)(args...);   *   static_call_cond(name)(args...);   *   static_call_update(name, func); + *   static_call_query(name);   *   * Usage example:   * @@ -91,6 +92,10 @@   *   *   which will include the required value tests to avoid NULL-pointer   *   dereferences. + * + *   To query which function is currently set to be called, use: + * + *   func = static_call_query(name);   */  #include <linux/types.h> @@ -118,6 +123,8 @@ extern void arch_static_call_transform(void *site, void *tramp, void *func, bool  			     STATIC_CALL_TRAMP_ADDR(name), func);	\  }) +#define static_call_query(name) (READ_ONCE(STATIC_CALL_KEY(name).func)) +  #ifdef CONFIG_HAVE_STATIC_CALL_INLINE  extern int __init static_call_init(void); @@ -128,16 +135,6 @@ struct static_call_mod {  	struct static_call_site *sites;  }; -struct static_call_key { -	void *func; -	union { -		/* bit 0: 0 = mods, 1 = sites */ -		unsigned long type; -		struct static_call_mod *mods; -		struct static_call_site *sites; -	}; -}; -  /* For finding the key associated with a trampoline */  struct static_call_tramp_key {  	s32 tramp; @@ -187,10 +184,6 @@ extern long __static_call_return0(void);  static inline int static_call_init(void) { return 0; } -struct static_call_key { -	void *func; -}; -  #define __DEFINE_STATIC_CALL(name, _func, _func_init)			\  	DECLARE_STATIC_CALL(name, _func);				\  	struct static_call_key STATIC_CALL_KEY(name) = {		\ @@ -205,6 +198,7 @@ struct static_call_key {  	};								\  	ARCH_DEFINE_STATIC_CALL_NULL_TRAMP(name) +  #define static_call_cond(name)	(void)__static_call(name)  static inline @@ -243,10 +237,6 @@ static inline long __static_call_return0(void)  static inline int static_call_init(void) { return 0; } -struct static_call_key { -	void *func; -}; -  static inline long __static_call_return0(void)  {  	return 0;  | 
