#ifndef _LINUX_TRACE_RECURSION_H
#define _LINUX_TRACE_RECURSION_H
#include <linux/interrupt.h>
#include <linux/sched.h>
#ifdef CONFIG_TRACING
enum { … };
#define trace_recursion_set(bit) …
#define trace_recursion_clear(bit) …
#define trace_recursion_test(bit) …
#define TRACE_CONTEXT_BITS …
#define TRACE_FTRACE_START …
#define TRACE_LIST_START …
#define TRACE_CONTEXT_MASK …
enum { … };
static __always_inline int trace_get_context_bit(void)
{ … }
#ifdef CONFIG_FTRACE_RECORD_RECURSION
extern void ftrace_record_recursion(unsigned long ip, unsigned long parent_ip);
#define do_ftrace_record_recursion(ip, pip) …
#else
#define do_ftrace_record_recursion …
#endif
#ifdef CONFIG_FTRACE_VALIDATE_RCU_IS_WATCHING
#define trace_warn_on_no_rcu(ip) …
#else
#define trace_warn_on_no_rcu …
#endif
static __always_inline int trace_test_and_set_recursion(unsigned long ip, unsigned long pip,
int start)
{ … }
static __always_inline void trace_clear_recursion(int bit)
{ … }
static __always_inline int ftrace_test_recursion_trylock(unsigned long ip,
unsigned long parent_ip)
{ … }
static __always_inline void ftrace_test_recursion_unlock(int bit)
{ … }
#endif
#endif