diff options
Diffstat (limited to 'kernel/trace/rethook.c')
| -rw-r--r-- | kernel/trace/rethook.c | 9 | 
1 files changed, 9 insertions, 0 deletions
| diff --git a/kernel/trace/rethook.c b/kernel/trace/rethook.c index b56833700d23..c69d82273ce7 100644 --- a/kernel/trace/rethook.c +++ b/kernel/trace/rethook.c @@ -154,6 +154,15 @@ struct rethook_node *rethook_try_get(struct rethook *rh)  	if (unlikely(!handler))  		return NULL; +	/* +	 * This expects the caller will set up a rethook on a function entry. +	 * When the function returns, the rethook will eventually be reclaimed +	 * or released in the rethook_recycle() with call_rcu(). +	 * This means the caller must be run in the RCU-availabe context. +	 */ +	if (unlikely(!rcu_is_watching())) +		return NULL; +  	fn = freelist_try_get(&rh->pool);  	if (!fn)  		return NULL; | 
