forked from Minki/linux
static_call: Add function to query current function
Some users of paravirtualized functions need to query which function has been specified in a pv_ops vector element. In order to be able to switch such paravirtualized functions to static_calls instead, there needs to be a function to query the function which will be called via static_call(). Signed-off-by: Juergen Gross <jgross@suse.com> Signed-off-by: Borislav Petkov <bp@suse.de> Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> Link: https://lkml.kernel.org/r/20210311142319.4723-4-jgross@suse.com
This commit is contained in:
parent
b046664872
commit
6ea312d95e
@ -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);
|
||||
@ -191,6 +198,7 @@ static inline int static_call_init(void) { return 0; }
|
||||
}; \
|
||||
ARCH_DEFINE_STATIC_CALL_NULL_TRAMP(name)
|
||||
|
||||
|
||||
#define static_call_cond(name) (void)__static_call(name)
|
||||
|
||||
static inline
|
||||
|
Loading…
Reference in New Issue
Block a user