04acadcb44
A runtime monitor can cause a reaction to the detection of an exception on the model's execution. By default, the monitors have tracing reactions, printing the monitor output via tracepoints. But other reactions can be added (on-demand) via this interface. The user interface resembles the kernel tracing interface and presents these files: "available_reactors" - Reading shows the available reactors, one per line. For example: # cat available_reactors nop panic printk "reacting_on" - It is an on/off general switch for reactors, disabling all reactions. "monitors/MONITOR/reactors" - List available reactors, with the select reaction for the given MONITOR inside []. The default one is the nop (no operation) reactor. - Writing the name of a reactor enables it to the given MONITOR. For example: # cat monitors/wip/reactors [nop] panic printk # echo panic > monitors/wip/reactors # cat monitors/wip/reactors nop [panic] printk Link: https://lkml.kernel.org/r/1794eb994637457bdeaa6bad0b8263d2f7eece0c.1659052063.git.bristot@kernel.org Cc: Wim Van Sebroeck <wim@linux-watchdog.org> Cc: Guenter Roeck <linux@roeck-us.net> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Ingo Molnar <mingo@redhat.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Will Deacon <will@kernel.org> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Marco Elver <elver@google.com> Cc: Dmitry Vyukov <dvyukov@google.com> Cc: "Paul E. McKenney" <paulmck@kernel.org> Cc: Shuah Khan <skhan@linuxfoundation.org> Cc: Gabriele Paoloni <gpaoloni@redhat.com> Cc: Juri Lelli <juri.lelli@redhat.com> Cc: Clark Williams <williams@redhat.com> Cc: Tao Zhou <tao.zhou@linux.dev> Cc: Randy Dunlap <rdunlap@infradead.org> Cc: linux-doc@vger.kernel.org Cc: linux-kernel@vger.kernel.org Cc: linux-trace-devel@vger.kernel.org Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org> Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
69 lines
1.5 KiB
C
69 lines
1.5 KiB
C
/* 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
|