| /* SPDX-License-Identifier: GPL-2.0 */ | |
| #include <linux/mutex.h> | |
| struct rv_interface { | |
| struct dentry *root_dir; | |
| struct dentry *monitors_dir; | |
| }; | |
| #include "../trace.h" | |
| #include <linux/tracefs.h> | |
| #include <linux/rv.h> | |
| #define RV_MODE_WRITE TRACE_MODE_WRITE | |
| #define RV_MODE_READ TRACE_MODE_READ | |
| #define rv_create_dir tracefs_create_dir | |
| #define rv_create_file tracefs_create_file | |
| #define rv_remove tracefs_remove | |
| #define MAX_RV_MONITOR_NAME_SIZE 32 | |
| #define MAX_RV_REACTOR_NAME_SIZE 32 | |
| extern struct mutex rv_interface_lock; | |
| #ifdef CONFIG_RV_REACTORS | |
| struct rv_reactor_def { | |
| struct list_head list; | |
| struct rv_reactor *reactor; | |
| /* protected by the monitor interface lock */ | |
| int counter; | |
| }; | |
| #endif | |
| struct rv_monitor_def { | |
| struct list_head list; | |
| struct rv_monitor *monitor; | |
| struct dentry *root_d; | |
| #ifdef CONFIG_RV_REACTORS | |
| struct rv_reactor_def *rdef; | |
| bool reacting; | |
| #endif | |
| bool task_monitor; | |
| }; | |
| struct dentry *get_monitors_root(void); | |
| int rv_disable_monitor(struct rv_monitor_def *mdef); | |
| int rv_enable_monitor(struct rv_monitor_def *mdef); | |
| #ifdef CONFIG_RV_REACTORS | |
| int reactor_populate_monitor(struct rv_monitor_def *mdef); | |
| void reactor_cleanup_monitor(struct rv_monitor_def *mdef); | |
| int init_rv_reactors(struct dentry *root_dir); | |
| #else | |
| static inline int reactor_populate_monitor(struct rv_monitor_def *mdef) | |
| { | |
| return 0; | |
| } | |
| static inline void reactor_cleanup_monitor(struct rv_monitor_def *mdef) | |
| { | |
| return; | |
| } | |
| static inline int init_rv_reactors(struct dentry *root_dir) | |
| { | |
| return 0; | |
| } | |
| #endif |