[RFC PATCH v2 03/12] rv: Add da_handle_start_run_event_ to per-task monitors

Gabriele Monaco posted 12 patches 9 months ago
There is a newer version of this series
[RFC PATCH v2 03/12] rv: Add da_handle_start_run_event_ to per-task monitors
Posted by Gabriele Monaco 9 months ago
The RV da_monitor API allows to start monitors in two ways:
da_handle_start_event_NAME and da_handle_start_run_event_NAME.
The former is used when the event is followed by the initial state of
the module, so we ignore the event but we know the monitor is in the
initial state and can start monitoring, the latter can be used if the
event can only occur in the initial state, so we do handle the event as
if the monitor was in the initial state.
This latter API is defined for implicit monitors but not per-task ones.

Define da_handle_start_run_event_NAME macro also for per-task monitors.

Signed-off-by: Gabriele Monaco <gmonaco@redhat.com>
---
 include/rv/da_monitor.h | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/include/rv/da_monitor.h b/include/rv/da_monitor.h
index 510c88bfabd4..215c3eb770cc 100644
--- a/include/rv/da_monitor.h
+++ b/include/rv/da_monitor.h
@@ -512,6 +512,30 @@ da_handle_start_event_##name(struct task_struct *tsk, enum events_##name event)
 	__da_handle_event_##name(da_mon, tsk, event);						\
 												\
 	return 1;										\
+}												\
+												\
+/*												\
+ * da_handle_start_run_event_##name - start monitoring and handle event				\
+ *												\
+ * This function is used to notify the monitor that the system is in the			\
+ * initial state, so the monitor can start monitoring and handling event.			\
+ */												\
+static inline bool										\
+da_handle_start_run_event_##name(struct task_struct *tsk, enum events_##name event)		\
+{												\
+	struct da_monitor *da_mon;								\
+												\
+	if (!da_monitor_enabled_##name())							\
+		return 0;									\
+												\
+	da_mon = da_get_monitor_##name(tsk);							\
+												\
+	if (unlikely(!da_monitoring_##name(da_mon)))						\
+		da_monitor_start_##name(da_mon);						\
+												\
+	__da_handle_event_##name(da_mon, tsk, event);						\
+												\
+	return 1;										\
 }
 
 /*
-- 
2.49.0
Re: [RFC PATCH v2 03/12] rv: Add da_handle_start_run_event_ to per-task monitors
Posted by Nam Cao 8 months, 3 weeks ago
On Wed, May 14, 2025 at 10:43:05AM +0200, Gabriele Monaco wrote:
> The RV da_monitor API allows to start monitors in two ways:
> da_handle_start_event_NAME and da_handle_start_run_event_NAME.
> The former is used when the event is followed by the initial state of
> the module, so we ignore the event but we know the monitor is in the
> initial state and can start monitoring, the latter can be used if the
> event can only occur in the initial state, so we do handle the event as
> if the monitor was in the initial state.
> This latter API is defined for implicit monitors but not per-task ones.
> 
> Define da_handle_start_run_event_NAME macro also for per-task monitors.
> 
> Signed-off-by: Gabriele Monaco <gmonaco@redhat.com>

Reviewed-by: Nam Cao <namcao@linutronix.de>