Commit fac54932 authored by Nam Cao's avatar Nam Cao Committed by Steven Rostedt (Google)
Browse files

rv: Allow to configure the number of per-task monitor

Now that there are 2 monitors for real-time applications, users may want to
enable both of them simultaneously. Make the number of per-task monitor
configurable. Default it to 2 for now.

Cc: John Ogness <john.ogness@linutronix.de>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Link: https://lore.kernel.org/93e83313fc4ba7f6e66f4abe80ca5f5494d658d0.1752088709.git.namcao@linutronix.de


Reviewed-by: default avatarGabriele Monaco <gmonaco@redhat.com>
Signed-off-by: default avatarNam Cao <namcao@linutronix.de>
Signed-off-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
parent 670ff946
Loading
Loading
Loading
Loading
+1 −8
Original line number Diff line number Diff line
@@ -75,14 +75,7 @@ struct ltl_monitor {};

#endif /* CONFIG_RV_LTL_MONITOR */

/*
 * Per-task RV monitors count. Nowadays fixed in RV_PER_TASK_MONITORS.
 * If we find justification for more monitors, we can think about
 * adding more or developing a dynamic method. So far, none of
 * these are justified.
 */
#define RV_PER_TASK_MONITORS		1
#define RV_PER_TASK_MONITOR_INIT	(RV_PER_TASK_MONITORS)
#define RV_PER_TASK_MONITOR_INIT	(CONFIG_RV_PER_TASK_MONITORS)

union rv_task_monitor {
	struct da_monitor	da_mon;
+3 −5
Original line number Diff line number Diff line
@@ -1642,12 +1642,10 @@ struct task_struct {

#ifdef CONFIG_RV
	/*
	 * Per-task RV monitor. Nowadays fixed in RV_PER_TASK_MONITORS.
	 * If we find justification for more monitors, we can think
	 * about adding more or developing a dynamic method. So far,
	 * none of these are justified.
	 * Per-task RV monitor, fixed in CONFIG_RV_PER_TASK_MONITORS.
	 * If memory becomes a concern, we can think about a dynamic method.
	 */
	union rv_task_monitor		rv[RV_PER_TASK_MONITORS];
	union rv_task_monitor		rv[CONFIG_RV_PER_TASK_MONITORS];
#endif

#ifdef CONFIG_USER_EVENTS
+9 −0
Original line number Diff line number Diff line
@@ -32,6 +32,15 @@ menuconfig RV
	  For further information, see:
	    Documentation/trace/rv/runtime-verification.rst

config RV_PER_TASK_MONITORS
	int "Maximum number of per-task monitor"
	depends on RV
	range 1 8
	default 2
	help
	  This option configures the maximum number of per-task RV monitors that can run
	  simultaneously.

source "kernel/trace/rv/monitors/wip/Kconfig"
source "kernel/trace/rv/monitors/wwnr/Kconfig"
source "kernel/trace/rv/monitors/sched/Kconfig"
+1 −0
Original line number Diff line number Diff line
config RV_MON_RTAPP
	depends on RV
	depends on RV_PER_TASK_MONITORS >= 2
	bool "rtapp monitor"
	help
	  Collection of monitors to check for common problems with real-time
+4 −4
Original line number Diff line number Diff line
@@ -165,7 +165,7 @@ struct dentry *get_monitors_root(void)
LIST_HEAD(rv_monitors_list);

static int task_monitor_count;
static bool task_monitor_slots[RV_PER_TASK_MONITORS];
static bool task_monitor_slots[CONFIG_RV_PER_TASK_MONITORS];

int rv_get_task_monitor_slot(void)
{
@@ -173,12 +173,12 @@ int rv_get_task_monitor_slot(void)

	lockdep_assert_held(&rv_interface_lock);

	if (task_monitor_count == RV_PER_TASK_MONITORS)
	if (task_monitor_count == CONFIG_RV_PER_TASK_MONITORS)
		return -EBUSY;

	task_monitor_count++;

	for (i = 0; i < RV_PER_TASK_MONITORS; i++) {
	for (i = 0; i < CONFIG_RV_PER_TASK_MONITORS; i++) {
		if (task_monitor_slots[i] == false) {
			task_monitor_slots[i] = true;
			return i;
@@ -194,7 +194,7 @@ void rv_put_task_monitor_slot(int slot)
{
	lockdep_assert_held(&rv_interface_lock);

	if (slot < 0 || slot >= RV_PER_TASK_MONITORS) {
	if (slot < 0 || slot >= CONFIG_RV_PER_TASK_MONITORS) {
		WARN_ONCE(1, "RV releasing an invalid slot!: %d\n", slot);
		return;
	}