mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-08-17 18:55:22 +00:00
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: Gabriele Monaco <gmonaco@redhat.com> Signed-off-by: Nam Cao <namcao@linutronix.de> Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
This commit is contained in:
parent
670ff946b9
commit
fac5493251
@ -75,14 +75,7 @@ struct ltl_monitor {};
|
|||||||
|
|
||||||
#endif /* CONFIG_RV_LTL_MONITOR */
|
#endif /* CONFIG_RV_LTL_MONITOR */
|
||||||
|
|
||||||
/*
|
#define RV_PER_TASK_MONITOR_INIT (CONFIG_RV_PER_TASK_MONITORS)
|
||||||
* 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)
|
|
||||||
|
|
||||||
union rv_task_monitor {
|
union rv_task_monitor {
|
||||||
struct da_monitor da_mon;
|
struct da_monitor da_mon;
|
||||||
|
@ -1642,12 +1642,10 @@ struct task_struct {
|
|||||||
|
|
||||||
#ifdef CONFIG_RV
|
#ifdef CONFIG_RV
|
||||||
/*
|
/*
|
||||||
* Per-task RV monitor. Nowadays fixed in RV_PER_TASK_MONITORS.
|
* Per-task RV monitor, fixed in CONFIG_RV_PER_TASK_MONITORS.
|
||||||
* If we find justification for more monitors, we can think
|
* If memory becomes a concern, we can think about a dynamic method.
|
||||||
* about adding more or developing a dynamic method. So far,
|
|
||||||
* none of these are justified.
|
|
||||||
*/
|
*/
|
||||||
union rv_task_monitor rv[RV_PER_TASK_MONITORS];
|
union rv_task_monitor rv[CONFIG_RV_PER_TASK_MONITORS];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_USER_EVENTS
|
#ifdef CONFIG_USER_EVENTS
|
||||||
|
@ -32,6 +32,15 @@ menuconfig RV
|
|||||||
For further information, see:
|
For further information, see:
|
||||||
Documentation/trace/rv/runtime-verification.rst
|
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/wip/Kconfig"
|
||||||
source "kernel/trace/rv/monitors/wwnr/Kconfig"
|
source "kernel/trace/rv/monitors/wwnr/Kconfig"
|
||||||
source "kernel/trace/rv/monitors/sched/Kconfig"
|
source "kernel/trace/rv/monitors/sched/Kconfig"
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
config RV_MON_RTAPP
|
config RV_MON_RTAPP
|
||||||
depends on RV
|
depends on RV
|
||||||
|
depends on RV_PER_TASK_MONITORS >= 2
|
||||||
bool "rtapp monitor"
|
bool "rtapp monitor"
|
||||||
help
|
help
|
||||||
Collection of monitors to check for common problems with real-time
|
Collection of monitors to check for common problems with real-time
|
||||||
|
@ -165,7 +165,7 @@ struct dentry *get_monitors_root(void)
|
|||||||
LIST_HEAD(rv_monitors_list);
|
LIST_HEAD(rv_monitors_list);
|
||||||
|
|
||||||
static int task_monitor_count;
|
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)
|
int rv_get_task_monitor_slot(void)
|
||||||
{
|
{
|
||||||
@ -173,12 +173,12 @@ int rv_get_task_monitor_slot(void)
|
|||||||
|
|
||||||
lockdep_assert_held(&rv_interface_lock);
|
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;
|
return -EBUSY;
|
||||||
|
|
||||||
task_monitor_count++;
|
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) {
|
if (task_monitor_slots[i] == false) {
|
||||||
task_monitor_slots[i] = true;
|
task_monitor_slots[i] = true;
|
||||||
return i;
|
return i;
|
||||||
@ -194,7 +194,7 @@ void rv_put_task_monitor_slot(int slot)
|
|||||||
{
|
{
|
||||||
lockdep_assert_held(&rv_interface_lock);
|
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);
|
WARN_ONCE(1, "RV releasing an invalid slot!: %d\n", slot);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user