From: Gabriele Monaco <gmonaco@redhat.com>
To: Nam Cao <namcao@linutronix.de>
Cc: Steven Rostedt <rostedt@goodmis.org>,
Masami Hiramatsu <mhiramat@kernel.org>,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
linux-trace-kernel@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 5/5] rv: Add rts monitor
Date: Wed, 06 Aug 2025 11:03:36 +0200 [thread overview]
Message-ID: <d57a23823996439d5f07150be211f8bf27a0f70e.camel@redhat.com> (raw)
In-Reply-To: <20250806084652.3TFe1T1W@linutronix.de>
On Wed, 2025-08-06 at 10:46 +0200, Nam Cao wrote:
> On Wed, Aug 06, 2025 at 10:15:48AM +0200, Gabriele Monaco wrote:
> > I didn't make it on time before your V2, I assume you solved
> > already so
> > you might ignore this.
> >
> > You kinda have something like the da_monitor_enabled: the
> > rv_ltl_all_atoms_known
> >
> > I wonder if you could define LTL_RT_TASK_ENQUEUED only when you
> > actually know it (or are reasonably sure based on your internal
> > counter). Or at least not set all atoms until the monitor is fully
> > set
> > up.
>
> The rv_ltl_all_atoms_known() thingy is for situation where relevant
> tracepoints have not been hit yet.
>
> This case is slightly different, the tracepoint has been hit. And it
> is not clear how to implement the "reasonably sure based on your
> internal counter" part.
>
> > Anyway reordering the tracepoints registration is likely necessary
> > whatever you do, but I'm afraid a problem like this can occur
> > pretty
> > often with this type of monitors.
>
> What I have in v2 is a workaround only, by reordering the tracepoint
> registrations.
>
> The root problem is not specific to this monitor, but all LTL
> monitors. My idea for the real fix is the untested patch below. I
> will send it separately. It is not urgent, so I can wait for your DA
> macro removal patch to be merged first.
>
Alright, I get it, let's continue with the workaround for now, I'm
going to have a look at your V2.
Thanks,
Gabriele
> As I'm sending the patch to you, I realized that the patch
> effectively nullifies ltl_atoms_init(). So I will need to fix that
> up..
>
> Nam
>
> commit 7fbb9a99f1a95e5149d476fa3d83a60be1a9a579
> Author: Nam Cao <namcao@linutronix.de>
> Date: Tue Aug 5 22:47:49 2025 +0200
>
> rv: Share the da_monitor_enabled_##name() function with LTL
>
> The LTL monitors also need the functionality that
> da_monitor_enabled_##name() offers.
>
> This is useful to prevent the automaton from being executed
> before the
> monitor is completely enabled, preventing the situation where the
> monitors run before all tracepoints are registered. This
> situation can
> cause a false positive error, because the monitors do not see
> some
> events and do not validate properly.
>
> Pull da_monitor_enabled_##name() to be in the common header, and
> use
> it for both LTL and DA.
>
> Signed-off-by: Nam Cao <namcao@linutronix.de>
>
> diff --git a/include/linux/rv.h b/include/linux/rv.h
> index 1aa01d98e390..8a885b3665a8 100644
> --- a/include/linux/rv.h
> +++ b/include/linux/rv.h
> @@ -119,6 +119,14 @@ int rv_register_monitor(struct rv_monitor
> *monitor, struct rv_monitor *parent);
> int rv_get_task_monitor_slot(void);
> void rv_put_task_monitor_slot(int slot);
>
> +static inline bool rv_monitor_enabled(struct rv_monitor *monitor)
> +{
> + if (unlikely(!rv_monitoring_on()))
> + return 0;
> +
> + return likely(monitor->enabled);
> +}
> +
> #ifdef CONFIG_RV_REACTORS
> bool rv_reacting_on(void);
> int rv_unregister_reactor(struct rv_reactor *reactor);
> diff --git a/include/rv/da_monitor.h b/include/rv/da_monitor.h
> index 17fa4f6e5ea6..92b8a8c0b9b7 100644
> --- a/include/rv/da_monitor.h
> +++ b/include/rv/da_monitor.h
> @@ -74,29 +74,12 @@ static inline bool da_monitoring_##name(struct
> da_monitor *da_mon) \
> return da_mon-
> >monitoring; \
> }
> \
>
> \
> -
> /* \
> - * da_monitor_enabled_##name - checks if the monitor is
> enabled \
> -
> */ \
> -static inline bool
> da_monitor_enabled_##name(void) \
> -
> { \
> - /* global switch
> */ \
> - if
> (unlikely(!rv_monitoring_on())) \
> - return
> 0; \
> -
> \
> - /* monitor enabled
> */ \
> - if
> (unlikely(!rv_##name.enabled)) \
> - return
> 0; \
> -
> \
> - return
> 1; \
> -
> } \
> -
> \
> /*
> \
> * da_monitor_handling_event_##name - checks if the monitor is ready
> to handle events \
>
> */ \
> static inline bool da_monitor_handling_event_##name(struct
> da_monitor *da_mon) \
> {
> \
> -
> \
> - if
> (!da_monitor_enabled_##name()) \
> + if
> (!rv_monitor_enabled(&rv_##name)) \
> return
> 0; \
>
> \
> /* monitor is actually monitoring
> */ \
> @@ -390,7 +373,7 @@ static inline bool
> da_handle_start_event_##name(enum events_##name
> event) \
> {
> \
> struct da_monitor
> *da_mon; \
>
> \
> - if
> (!da_monitor_enabled_##name()) \
> + if
> (!rv_monitor_enabled(&rv_##name)) \
> return
> 0; \
>
> \
> da_mon =
> da_get_monitor_##name(); \
> @@ -415,7 +398,7 @@ static inline bool
> da_handle_start_run_event_##name(enum events_##name event)
> {
> \
> struct da_monitor
> *da_mon; \
>
> \
> - if
> (!da_monitor_enabled_##name()) \
> + if
> (!rv_monitor_enabled(&rv_##name)) \
> return
> 0; \
>
> \
> da_mon =
> da_get_monitor_##name(); \
> @@ -475,7 +458,7 @@ da_handle_start_event_##name(struct task_struct
> *tsk, enum events_##name event)
> {
> \
> struct da_monitor
> *da_mon; \
>
> \
> - if
> (!da_monitor_enabled_##name()) \
> + if
> (!rv_monitor_enabled(&rv_##name)) \
> return
> 0; \
>
> \
> da_mon =
> da_get_monitor_##name(tsk); \
> @@ -501,7 +484,7 @@ da_handle_start_run_event_##name(struct
> task_struct *tsk, enum events_##name eve
> {
> \
> struct da_monitor
> *da_mon; \
>
> \
> - if
> (!da_monitor_enabled_##name()) \
> + if
> (!rv_monitor_enabled(&rv_##name)) \
> return
> 0; \
>
> \
> da_mon =
> da_get_monitor_##name(tsk); \
> diff --git a/include/rv/ltl_monitor.h b/include/rv/ltl_monitor.h
> index 29bbf86d1a52..85a3d07a0303 100644
> --- a/include/rv/ltl_monitor.h
> +++ b/include/rv/ltl_monitor.h
> @@ -16,6 +16,8 @@
> #error "Please include $(MODEL_NAME).h generated by rvgen"
> #endif
>
> +#define RV_MONITOR_NAME CONCATENATE(rv_, MONITOR_NAME)
> +
> #if LTL_MONITOR_TYPE == LTL_TASK_MONITOR
>
> #define TARGET_PRINT_FORMAT "%s[%d]"
> @@ -33,7 +35,6 @@ typedef unsigned int monitor_target;
> #endif
>
> #ifdef CONFIG_RV_REACTORS
> -#define RV_MONITOR_NAME CONCATENATE(rv_, MONITOR_NAME)
> static struct rv_monitor RV_MONITOR_NAME;
>
> static struct ltl_monitor *ltl_get_monitor(monitor_target target);
> @@ -156,6 +157,9 @@ static void ltl_attempt_start(monitor_target
> target, struct ltl_monitor *mon)
>
> static inline void ltl_atom_set(struct ltl_monitor *mon, enum
> ltl_atom atom, bool value)
> {
> + if (!rv_monitor_enabled(&RV_MONITOR_NAME))
> + return;
> +
> __clear_bit(atom, mon->unknown_atoms);
> if (value)
> __set_bit(atom, mon->atoms);
prev parent reply other threads:[~2025-08-06 9:03 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-30 12:45 [PATCH 0/5] rv: LTL per-cpu monitor type and real-time scheduling monitor Nam Cao
2025-07-30 12:45 ` [PATCH 1/5] rv/ltl: Prepare for other monitor types Nam Cao
2025-07-31 9:04 ` Gabriele Monaco
2025-07-31 9:28 ` Nam Cao
2025-07-31 10:14 ` Gabriele Monaco
2025-07-30 12:45 ` [PATCH 2/5] rv/ltl: Support per-cpu monitors Nam Cao
2025-07-31 8:02 ` Gabriele Monaco
2025-08-01 6:26 ` Nam Cao
2025-07-30 12:45 ` [PATCH 3/5] verification/rvgen/ltl: Support per-cpu monitor generation Nam Cao
2025-07-30 12:45 ` [PATCH 4/5] sched: Add rt task enqueue/dequeue trace points Nam Cao
2025-07-30 13:53 ` Gabriele Monaco
2025-07-30 15:18 ` Nam Cao
2025-07-30 16:18 ` Gabriele Monaco
2025-07-31 7:35 ` Nam Cao
2025-07-31 8:39 ` Gabriele Monaco
2025-08-01 3:42 ` K Prateek Nayak
2025-08-01 7:29 ` Nam Cao
2025-08-01 9:56 ` K Prateek Nayak
2025-08-01 11:04 ` Gabriele Monaco
2025-08-04 3:07 ` K Prateek Nayak
2025-08-04 5:49 ` Nam Cao
2025-07-30 12:45 ` [PATCH 5/5] rv: Add rts monitor Nam Cao
2025-07-31 7:47 ` Gabriele Monaco
2025-08-01 7:58 ` Nam Cao
2025-08-01 9:14 ` Gabriele Monaco
2025-08-04 6:05 ` Nam Cao
2025-08-05 8:40 ` Gabriele Monaco
2025-08-05 12:22 ` Nam Cao
2025-08-05 15:45 ` Nam Cao
2025-08-06 8:15 ` Gabriele Monaco
2025-08-06 8:46 ` Nam Cao
2025-08-06 9:03 ` Gabriele Monaco [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=d57a23823996439d5f07150be211f8bf27a0f70e.camel@redhat.com \
--to=gmonaco@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mhiramat@kernel.org \
--cc=namcao@linutronix.de \
--cc=rostedt@goodmis.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).