From nobody Mon Dec 1 22:41:52 2025 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 694E731A7F0 for ; Wed, 26 Nov 2025 10:43:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764153784; cv=none; b=fI9UUNZAnhlzT7cVGbyONgGu1xr1AvSvuYzB6ucf++jVMUDSrUcvrN+WmCvBSwnHNZOkkglTJ/aZ4LoSMIzMbYRNTvxZ1xbqbsXQ+XRC39O9ltvbsCoyTrJ8FbVn2KG49gzEEGVRAM2SN9iF7N/6XYzxZQ/oVxirkM6BUuAQYkQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764153784; c=relaxed/simple; bh=gtiAr2oqn3u0rZGm4CXs8z/Aoh/Z2DgOpmxpuASm2xo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nDbFAJLBDXatlbZd02tWJaerOUY8rdUDH+UR6/oTcaWuvjR55LwnUOgafu/7B5cywvRCOzV5CRJxTvJip4SQAN/kjjPfPuF9nLD2Mkp+3aFxgLFaD+EFJGe9Z+KGGwll3cSoh6tL+SxssMm7B4dTyfPmuMSaUnG+6EdVb+I/3cc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=EgBocTid; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="EgBocTid" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1764153779; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=jtKClvHVA9AZxZw2XkJFywXBv4bPAQcj4uzfXk03yq4=; b=EgBocTidHOkSoVOa6H8zdVj85XciFgkdWQkBid8jdTaeit4r3PHtjXRjAkQJYLOJPKvECn CvFumntVEA3iuJ1R1vAvcoK93jdK55SFmCwRbXhRFW/R3DgeX1obEOPUJ7bCTmC68k4AKS kg2ICYRIgdpgsMpKtmv9CxLIZEZglEw= Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-64-B8HtYXT0OIi1WeqfeHcPpg-1; Wed, 26 Nov 2025 05:42:55 -0500 X-MC-Unique: B8HtYXT0OIi1WeqfeHcPpg-1 X-Mimecast-MFC-AGG-ID: B8HtYXT0OIi1WeqfeHcPpg_1764153774 Received: from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.93]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 2CFEA1954B17; Wed, 26 Nov 2025 10:42:54 +0000 (UTC) Received: from gmonaco-thinkpadt14gen3.rmtit.csb (unknown [10.45.226.131]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id CFADA18004D8; Wed, 26 Nov 2025 10:42:50 +0000 (UTC) From: Gabriele Monaco To: linux-kernel@vger.kernel.org, Steven Rostedt , Nam Cao , Gabriele Monaco , Masami Hiramatsu , linux-trace-kernel@vger.kernel.org Cc: =?UTF-8?q?Thomas=20Wei=C3=9Fschuh?= Subject: [PATCH 1/8] rv: Refactor da_monitor to minimise macros Date: Wed, 26 Nov 2025 11:42:32 +0100 Message-ID: <20251126104241.291258-2-gmonaco@redhat.com> In-Reply-To: <20251126104241.291258-1-gmonaco@redhat.com> References: <20251126104241.291258-1-gmonaco@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.93 Content-Type: text/plain; charset="utf-8" The da_monitor helper functions are generated from macros of the type: DECLARE_DA_FUNCTION(name, type) \ static void da_func_x_##name(type arg) {} \ static void da_func_y_##name(type arg) {} \ This is good to minimise code duplication but the long macros made of skipped end of lines is rather hard to parse. Since functions are static, the advantage of naming them differently for each monitor is minimal. Refactor the da_monitor.h file to minimise macros, instead of declaring functions from macros, we simply declare them with the same name for all monitors (e.g. da_func_x) and for any remaining reference to the monitor name (e.g. tracepoints, enums, global variables) we use the CONCATENATE macro. In this way the file is much easier to maintain while keeping the same generality. Functions depending on the monitor types are now conditionally compiled according to the value of RV_MON_TYPE, which must be defined in the monitor source. The monitor type can be specified as in the original implementation, although it's best to keep the default implementation (unsigned char) as not all parts of code support larger data types, and likely there's no need. We keep the empty macro definitions to ease review of this change with diff tools, but cleanup is required. Also adapt existing monitors to keep the build working. Reviewed-by: Nam Cao Signed-off-by: Gabriele Monaco --- include/linux/rv.h | 4 + include/rv/automata.h | 132 ++-- include/rv/da_monitor.h | 898 ++++++++++++------------- kernel/trace/rv/monitors/nrp/nrp.c | 30 +- kernel/trace/rv/monitors/nrp/nrp.h | 2 + kernel/trace/rv/monitors/opid/opid.c | 40 +- kernel/trace/rv/monitors/opid/opid.h | 2 + kernel/trace/rv/monitors/sco/sco.c | 26 +- kernel/trace/rv/monitors/sco/sco.h | 2 + kernel/trace/rv/monitors/scpd/scpd.c | 28 +- kernel/trace/rv/monitors/scpd/scpd.h | 2 + kernel/trace/rv/monitors/snep/snep.c | 28 +- kernel/trace/rv/monitors/snep/snep.h | 2 + kernel/trace/rv/monitors/snroc/snroc.c | 26 +- kernel/trace/rv/monitors/snroc/snroc.h | 2 + kernel/trace/rv/monitors/sssw/sssw.c | 38 +- kernel/trace/rv/monitors/sssw/sssw.h | 2 + kernel/trace/rv/monitors/sts/sts.c | 34 +- kernel/trace/rv/monitors/sts/sts.h | 2 + kernel/trace/rv/monitors/wip/wip.c | 26 +- kernel/trace/rv/monitors/wip/wip.h | 2 + kernel/trace/rv/monitors/wwnr/wwnr.c | 28 +- kernel/trace/rv/monitors/wwnr/wwnr.h | 2 + 23 files changed, 682 insertions(+), 676 deletions(-) diff --git a/include/linux/rv.h b/include/linux/rv.h index 92fd467547e7..58774eb3aecf 100644 --- a/include/linux/rv.h +++ b/include/linux/rv.h @@ -10,6 +10,10 @@ #define MAX_DA_NAME_LEN 32 #define MAX_DA_RETRY_RACING_EVENTS 3 =20 +#define RV_MON_GLOBAL 0 +#define RV_MON_PER_CPU 1 +#define RV_MON_PER_TASK 2 + #ifdef CONFIG_RV #include #include diff --git a/include/rv/automata.h b/include/rv/automata.h index eb9e636809a0..5b5d2e94c034 100644 --- a/include/rv/automata.h +++ b/include/rv/automata.h @@ -6,6 +6,20 @@ * models in C generated by the dot2k tool. */ =20 +#ifndef MONITOR_NAME +#error "MONITOR_NAME macro is not defined. Did you include $(MODEL_NAME).h= generated by rvgen?" +#endif + +#ifndef type +#define type unsigned char +#endif + +#define RV_AUTOMATON_NAME CONCATENATE(automaton_, MONITOR_NAME) +#define EVENT_MAX CONCATENATE(event_max_, MONITOR_NAME) +#define STATE_MAX CONCATENATE(state_max_, MONITOR_NAME) +#define events CONCATENATE(events_, MONITOR_NAME) +#define states CONCATENATE(states_, MONITOR_NAME) + /* * DECLARE_AUTOMATA_HELPERS - define a set of helper functions for automata * @@ -13,63 +27,63 @@ * as suffix for the functions and data. These functions will handle autom= aton * with data type 'type'. */ -#define DECLARE_AUTOMATA_HELPERS(name, type) \ - \ -/* \ - * model_get_state_name_##name - return the (string) name of the given sta= te \ - */ \ -static char *model_get_state_name_##name(enum states_##name state) \ -{ \ - if ((state < 0) || (state >=3D state_max_##name)) \ - return "INVALID"; \ - \ - return automaton_##name.state_names[state]; \ -} \ - \ -/* \ - * model_get_event_name_##name - return the (string) name of the given eve= nt \ - */ \ -static char *model_get_event_name_##name(enum events_##name event) \ -{ \ - if ((event < 0) || (event >=3D event_max_##name)) \ - return "INVALID"; \ - \ - return automaton_##name.event_names[event]; \ -} \ - \ -/* \ - * model_get_initial_state_##name - return the automaton's initial state \ - */ \ -static inline type model_get_initial_state_##name(void) \ -{ \ - return automaton_##name.initial_state; \ -} \ - \ -/* \ - * model_get_next_state_##name - process an automaton event occurrence \ - * \ - * Given the current state (curr_state) and the event (event), returns \ - * the next state, or INVALID_STATE in case of error. \ - */ \ -static inline type model_get_next_state_##name(enum states_##name curr_sta= te, \ - enum events_##name event) \ -{ \ - if ((curr_state < 0) || (curr_state >=3D state_max_##name)) \ - return INVALID_STATE; \ - \ - if ((event < 0) || (event >=3D event_max_##name)) \ - return INVALID_STATE; \ - \ - return automaton_##name.function[curr_state][event]; \ -} \ - \ -/* \ - * model_is_final_state_##name - check if the given state is a final state= \ - */ \ -static inline bool model_is_final_state_##name(enum states_##name state) \ -{ \ - if ((state < 0) || (state >=3D state_max_##name)) \ - return 0; \ - \ - return automaton_##name.final_states[state]; \ +#define DECLARE_AUTOMATA_HELPERS(name, type) + +/* + * model_get_state_name - return the (string) name of the given state + */ +static char *model_get_state_name(enum states state) +{ + if ((state < 0) || (state >=3D STATE_MAX)) + return "INVALID"; + + return RV_AUTOMATON_NAME.state_names[state]; +} + +/* + * model_get_event_name - return the (string) name of the given event + */ +static char *model_get_event_name(enum events event) +{ + if ((event < 0) || (event >=3D EVENT_MAX)) + return "INVALID"; + + return RV_AUTOMATON_NAME.event_names[event]; +} + +/* + * model_get_initial_state - return the automaton's initial state + */ +static inline type model_get_initial_state(void) +{ + return RV_AUTOMATON_NAME.initial_state; +} + +/* + * model_get_next_state - process an automaton event occurrence + * + * Given the current state (curr_state) and the event (event), returns + * the next state, or INVALID_STATE in case of error. + */ +static inline type model_get_next_state(enum states curr_state, + enum events event) +{ + if ((curr_state < 0) || (curr_state >=3D STATE_MAX)) + return INVALID_STATE; + + if ((event < 0) || (event >=3D EVENT_MAX)) + return INVALID_STATE; + + return RV_AUTOMATON_NAME.function[curr_state][event]; +} + +/* + * model_is_final_state - check if the given state is a final state + */ +static inline bool model_is_final_state(enum states state) +{ + if ((state < 0) || (state >=3D STATE_MAX)) + return 0; + + return RV_AUTOMATON_NAME.final_states[state]; } diff --git a/include/rv/da_monitor.h b/include/rv/da_monitor.h index 0cef64366538..a4555dafa8d0 100644 --- a/include/rv/da_monitor.h +++ b/include/rv/da_monitor.h @@ -13,82 +13,85 @@ =20 #include #include +#include #include #include =20 +static struct rv_monitor rv_this; + /* * Generic helpers for all types of deterministic automata monitors. */ -#define DECLARE_DA_MON_GENERIC_HELPERS(name, type) \ - \ -static void react_##name(type curr_state, type event) \ -{ \ - rv_react(&rv_##name, \ - "rv: monitor %s does not allow event %s on state %s\n", \ - #name, \ - model_get_event_name_##name(event), \ - model_get_state_name_##name(curr_state)); \ -} \ - \ -/* \ - * da_monitor_reset_##name - reset a monitor and setting it to init state = \ - */ \ -static inline void da_monitor_reset_##name(struct da_monitor *da_mon) \ -{ \ - da_mon->monitoring =3D 0; \ - da_mon->curr_state =3D model_get_initial_state_##name(); \ -} \ - \ -/* \ - * da_monitor_start_##name - start monitoring \ - * \ - * The monitor will ignore all events until monitoring is set to true. Thi= s \ - * function needs to be called to tell the monitor to start monitoring. = \ - */ \ -static inline void da_monitor_start_##name(struct da_monitor *da_mon) \ -{ \ - da_mon->curr_state =3D model_get_initial_state_##name(); \ - da_mon->monitoring =3D 1; \ -} \ - \ -/* \ - * da_monitoring_##name - returns true if the monitor is processing events= \ - */ \ -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 ha= ndle events \ - */ \ -static inline bool da_monitor_handling_event_##name(struct da_monitor *da_= mon) \ -{ \ - \ - if (!da_monitor_enabled_##name()) \ - return 0; \ - \ - /* monitor is actually monitoring */ \ - if (unlikely(!da_monitoring_##name(da_mon))) \ - return 0; \ - \ - return 1; \ +#define DECLARE_DA_MON_GENERIC_HELPERS(name, type) + +static void react(type curr_state, type event) +{ + rv_react(&rv_this, + "rv: monitor %s does not allow event %s on state %s\n", + __stringify(MONITOR_NAME), + model_get_event_name(event), + model_get_state_name(curr_state)); +} + +/* + * da_monitor_reset - reset a monitor and setting it to init state + */ +static inline void da_monitor_reset(struct da_monitor *da_mon) +{ + da_mon->monitoring =3D 0; + da_mon->curr_state =3D model_get_initial_state(); +} + +/* + * da_monitor_start - start monitoring + * + * The monitor will ignore all events until monitoring is set to true. This + * function needs to be called to tell the monitor to start monitoring. + */ +static inline void da_monitor_start(struct da_monitor *da_mon) +{ + da_mon->curr_state =3D model_get_initial_state(); + da_mon->monitoring =3D 1; +} + +/* + * da_monitoring - returns true if the monitor is processing events + */ +static inline bool da_monitoring(struct da_monitor *da_mon) +{ + return da_mon->monitoring; +} + +/* + * da_monitor_enabled - checks if the monitor is enabled + */ +static inline bool da_monitor_enabled(void) +{ + /* global switch */ + if (unlikely(!rv_monitoring_on())) + return 0; + + /* monitor enabled */ + if (unlikely(!rv_this.enabled)) + return 0; + + return 1; +} + +/* + * da_monitor_handling_event - checks if the monitor is ready to handle ev= ents + */ +static inline bool da_monitor_handling_event(struct da_monitor *da_mon) +{ + + if (!da_monitor_enabled()) + return 0; + + /* monitor is actually monitoring */ + if (unlikely(!da_monitoring(da_mon))) + return 0; + + return 1; } =20 /* @@ -100,37 +103,37 @@ static inline bool da_monitor_handling_event_##name(s= truct da_monitor *da_mon) * warn and reset the monitor if it runs out of retries. The monitor shoul= d be * able to handle various orders. */ -#define DECLARE_DA_MON_MODEL_HANDLER_IMPLICIT(name, type) \ - \ -static inline bool \ -da_event_##name(struct da_monitor *da_mon, enum events_##name event) \ -{ \ - enum states_##name curr_state, next_state; \ - \ - curr_state =3D READ_ONCE(da_mon->curr_state); \ - for (int i =3D 0; i < MAX_DA_RETRY_RACING_EVENTS; i++) { \ - next_state =3D model_get_next_state_##name(curr_state, event); \ - if (next_state =3D=3D INVALID_STATE) { \ - react_##name(curr_state, event); \ - trace_error_##name(model_get_state_name_##name(curr_state), \ - model_get_event_name_##name(event)); \ - return false; \ - } \ - if (likely(try_cmpxchg(&da_mon->curr_state, &curr_state, next_state))) {= \ - trace_event_##name(model_get_state_name_##name(curr_state), \ - model_get_event_name_##name(event), \ - model_get_state_name_##name(next_state), \ - model_is_final_state_##name(next_state)); \ - return true; \ - } \ - } \ - \ - trace_rv_retries_error(#name, model_get_event_name_##name(event)); \ - pr_warn("rv: " __stringify(MAX_DA_RETRY_RACING_EVENTS) \ - " retries reached for event %s, resetting monitor %s", \ - model_get_event_name_##name(event), #name); \ - return false; \ -} \ +#if RV_MON_TYPE =3D=3D RV_MON_GLOBAL || RV_MON_TYPE =3D=3D RV_MON_PER_CPU + +static inline bool +da_event(struct da_monitor *da_mon, enum events event) +{ + enum states curr_state, next_state; + + curr_state =3D READ_ONCE(da_mon->curr_state); + for (int i =3D 0; i < MAX_DA_RETRY_RACING_EVENTS; i++) { + next_state =3D model_get_next_state(curr_state, event); + if (next_state =3D=3D INVALID_STATE) { + react(curr_state, event); + CONCATENATE(trace_error_, MONITOR_NAME)(model_get_state_name(curr_state= ), + model_get_event_name(event)); + return false; + } + if (likely(try_cmpxchg(&da_mon->curr_state, &curr_state, next_state))) { + CONCATENATE(trace_event_, MONITOR_NAME)(model_get_state_name(curr_state= ), + model_get_event_name(event), + model_get_state_name(next_state), + model_is_final_state(next_state)); + return true; + } + } + + trace_rv_retries_error(__stringify(MONITOR_NAME), model_get_event_name(ev= ent)); + pr_warn("rv: " __stringify(MAX_DA_RETRY_RACING_EVENTS) + " retries reached for event %s, resetting monitor %s", + model_get_event_name(event), __stringify(MONITOR_NAME)); + return false; +} =20 /* * Event handler for per_task monitors. @@ -139,395 +142,380 @@ da_event_##name(struct da_monitor *da_mon, enum eve= nts_##name event) \ * warn and reset the monitor if it runs out of retries. The monitor shoul= d be * able to handle various orders. */ -#define DECLARE_DA_MON_MODEL_HANDLER_PER_TASK(name, type) \ - \ -static inline bool da_event_##name(struct da_monitor *da_mon, struct task_= struct *tsk, \ - enum events_##name event) \ -{ \ - enum states_##name curr_state, next_state; \ - \ - curr_state =3D READ_ONCE(da_mon->curr_state); \ - for (int i =3D 0; i < MAX_DA_RETRY_RACING_EVENTS; i++) { \ - next_state =3D model_get_next_state_##name(curr_state, event); \ - if (next_state =3D=3D INVALID_STATE) { \ - react_##name(curr_state, event); \ - trace_error_##name(tsk->pid, \ - model_get_state_name_##name(curr_state), \ - model_get_event_name_##name(event)); \ - return false; \ - } \ - if (likely(try_cmpxchg(&da_mon->curr_state, &curr_state, next_state))) {= \ - trace_event_##name(tsk->pid, \ - model_get_state_name_##name(curr_state), \ - model_get_event_name_##name(event), \ - model_get_state_name_##name(next_state), \ - model_is_final_state_##name(next_state)); \ - return true; \ - } \ - } \ - \ - trace_rv_retries_error(#name, model_get_event_name_##name(event)); \ - pr_warn("rv: " __stringify(MAX_DA_RETRY_RACING_EVENTS) \ - " retries reached for event %s, resetting monitor %s", \ - model_get_event_name_##name(event), #name); \ - return false; \ +#elif RV_MON_TYPE =3D=3D RV_MON_PER_TASK + +static inline bool da_event(struct da_monitor *da_mon, struct task_struct = *tsk, + enum events event) +{ + enum states curr_state, next_state; + + curr_state =3D READ_ONCE(da_mon->curr_state); + for (int i =3D 0; i < MAX_DA_RETRY_RACING_EVENTS; i++) { + next_state =3D model_get_next_state(curr_state, event); + if (next_state =3D=3D INVALID_STATE) { + react(curr_state, event); + CONCATENATE(trace_error_, MONITOR_NAME)(tsk->pid, + model_get_state_name(curr_state), + model_get_event_name(event)); + return false; + } + if (likely(try_cmpxchg(&da_mon->curr_state, &curr_state, next_state))) { + CONCATENATE(trace_event_, MONITOR_NAME)(tsk->pid, + model_get_state_name(curr_state), + model_get_event_name(event), + model_get_state_name(next_state), + model_is_final_state(next_state)); + return true; + } + } + + trace_rv_retries_error(__stringify(MONITOR_NAME), model_get_event_name(ev= ent)); + pr_warn("rv: " __stringify(MAX_DA_RETRY_RACING_EVENTS) + " retries reached for event %s, resetting monitor %s", + model_get_event_name(event), __stringify(MONITOR_NAME)); + return false; } +#endif =20 /* * Functions to define, init and get a global monitor. */ -#define DECLARE_DA_MON_INIT_GLOBAL(name, type) \ - \ -/* \ - * global monitor (a single variable) \ - */ \ -static struct da_monitor da_mon_##name; \ - \ -/* \ - * da_get_monitor_##name - return the global monitor address \ - */ \ -static struct da_monitor *da_get_monitor_##name(void) \ -{ \ - return &da_mon_##name; \ -} \ - \ -/* \ - * da_monitor_reset_all_##name - reset the single monitor \ - */ \ -static void da_monitor_reset_all_##name(void) \ -{ \ - da_monitor_reset_##name(da_get_monitor_##name()); \ -} \ - \ -/* \ - * da_monitor_init_##name - initialize a monitor \ - */ \ -static inline int da_monitor_init_##name(void) \ -{ \ - da_monitor_reset_all_##name(); \ - return 0; \ -} \ - \ -/* \ - * da_monitor_destroy_##name - destroy the monitor \ - */ \ -static inline void da_monitor_destroy_##name(void) \ -{ \ - return; \ +#if RV_MON_TYPE =3D=3D RV_MON_GLOBAL + +/* + * global monitor (a single variable) + */ +static struct da_monitor da_mon_this; + +/* + * da_get_monitor - return the global monitor address + */ +static struct da_monitor *da_get_monitor(void) +{ + return &da_mon_this; +} + +/* + * da_monitor_reset_all - reset the single monitor + */ +static void da_monitor_reset_all(void) +{ + da_monitor_reset(da_get_monitor()); +} + +/* + * da_monitor_init - initialize a monitor + */ +static inline int da_monitor_init(void) +{ + da_monitor_reset_all(); + return 0; +} + +/* + * da_monitor_destroy - destroy the monitor + */ +static inline void da_monitor_destroy(void) +{ + return; } =20 /* * Functions to define, init and get a per-cpu monitor. */ -#define DECLARE_DA_MON_INIT_PER_CPU(name, type) \ - \ -/* \ - * per-cpu monitor variables \ - */ \ -static DEFINE_PER_CPU(struct da_monitor, da_mon_##name); \ - \ -/* \ - * da_get_monitor_##name - return current CPU monitor address \ - */ \ -static struct da_monitor *da_get_monitor_##name(void) \ -{ \ - return this_cpu_ptr(&da_mon_##name); \ -} \ - \ -/* \ - * da_monitor_reset_all_##name - reset all CPUs' monitor \ - */ \ -static void da_monitor_reset_all_##name(void) \ -{ \ - struct da_monitor *da_mon; \ - int cpu; \ - for_each_cpu(cpu, cpu_online_mask) { \ - da_mon =3D per_cpu_ptr(&da_mon_##name, cpu); \ - da_monitor_reset_##name(da_mon); \ - } \ -} \ - \ -/* \ - * da_monitor_init_##name - initialize all CPUs' monitor \ - */ \ -static inline int da_monitor_init_##name(void) \ -{ \ - da_monitor_reset_all_##name(); \ - return 0; \ -} \ - \ -/* \ - * da_monitor_destroy_##name - destroy the monitor \ - */ \ -static inline void da_monitor_destroy_##name(void) \ -{ \ - return; \ +#elif RV_MON_TYPE =3D=3D RV_MON_PER_CPU + +/* + * per-cpu monitor variables + */ +static DEFINE_PER_CPU(struct da_monitor, da_mon_this); + +/* + * da_get_monitor - return current CPU monitor address + */ +static struct da_monitor *da_get_monitor(void) +{ + return this_cpu_ptr(&da_mon_this); +} + +/* + * da_monitor_reset_all - reset all CPUs' monitor + */ +static void da_monitor_reset_all(void) +{ + struct da_monitor *da_mon; + int cpu; + for_each_cpu(cpu, cpu_online_mask) { + da_mon =3D per_cpu_ptr(&da_mon_this, cpu); + da_monitor_reset(da_mon); + } +} + +/* + * da_monitor_init - initialize all CPUs' monitor + */ +static inline int da_monitor_init(void) +{ + da_monitor_reset_all(); + return 0; +} + +/* + * da_monitor_destroy - destroy the monitor + */ +static inline void da_monitor_destroy(void) +{ + return; } =20 /* * Functions to define, init and get a per-task monitor. */ -#define DECLARE_DA_MON_INIT_PER_TASK(name, type) \ - \ -/* \ - * The per-task monitor is stored a vector in the task struct. This variab= le \ - * stores the position on the vector reserved for this monitor. \ - */ \ -static int task_mon_slot_##name =3D RV_PER_TASK_MONITOR_INIT; \ - \ -/* \ - * da_get_monitor_##name - return the monitor in the allocated slot for ts= k \ - */ \ -static inline struct da_monitor *da_get_monitor_##name(struct task_struct = *tsk) \ -{ \ - return &tsk->rv[task_mon_slot_##name].da_mon; \ -} \ - \ -static void da_monitor_reset_all_##name(void) \ -{ \ - struct task_struct *g, *p; \ - int cpu; \ - \ - read_lock(&tasklist_lock); \ - for_each_process_thread(g, p) \ - da_monitor_reset_##name(da_get_monitor_##name(p)); \ - for_each_present_cpu(cpu) \ - da_monitor_reset_##name(da_get_monitor_##name(idle_task(cpu))); \ - read_unlock(&tasklist_lock); \ -} \ - \ -/* \ - * da_monitor_init_##name - initialize the per-task monitor \ - * \ - * Try to allocate a slot in the task's vector of monitors. If there \ - * is an available slot, use it and reset all task's monitor. \ - */ \ -static int da_monitor_init_##name(void) \ -{ \ - int slot; \ - \ - slot =3D rv_get_task_monitor_slot(); \ - if (slot < 0 || slot >=3D RV_PER_TASK_MONITOR_INIT) \ - return slot; \ - \ - task_mon_slot_##name =3D slot; \ - \ - da_monitor_reset_all_##name(); \ - return 0; \ -} \ - \ -/* \ - * da_monitor_destroy_##name - return the allocated slot \ - */ \ -static inline void da_monitor_destroy_##name(void) \ -{ \ - if (task_mon_slot_##name =3D=3D RV_PER_TASK_MONITOR_INIT) { \ - WARN_ONCE(1, "Disabling a disabled monitor: " #name); \ - return; \ - } \ - rv_put_task_monitor_slot(task_mon_slot_##name); \ - task_mon_slot_##name =3D RV_PER_TASK_MONITOR_INIT; \ - return; \ +#elif RV_MON_TYPE =3D=3D RV_MON_PER_TASK + +/* + * The per-task monitor is stored a vector in the task struct. This variab= le + * stores the position on the vector reserved for this monitor. + */ +static int task_mon_slot =3D RV_PER_TASK_MONITOR_INIT; + +/* + * da_get_monitor - return the monitor in the allocated slot for tsk + */ +static inline struct da_monitor *da_get_monitor(struct task_struct *tsk) +{ + return &tsk->rv[task_mon_slot].da_mon; +} + +static void da_monitor_reset_all(void) +{ + struct task_struct *g, *p; + int cpu; + + read_lock(&tasklist_lock); + for_each_process_thread(g, p) + da_monitor_reset(da_get_monitor(p)); + for_each_present_cpu(cpu) + da_monitor_reset(da_get_monitor(idle_task(cpu))); + read_unlock(&tasklist_lock); } =20 /* - * Handle event for implicit monitor: da_get_monitor_##name() will figure = out + * da_monitor_init - initialize the per-task monitor + * + * Try to allocate a slot in the task's vector of monitors. If there + * is an available slot, use it and reset all task's monitor. + */ +static int da_monitor_init(void) +{ + int slot; + + slot =3D rv_get_task_monitor_slot(); + if (slot < 0 || slot >=3D RV_PER_TASK_MONITOR_INIT) + return slot; + + task_mon_slot =3D slot; + + da_monitor_reset_all(); + return 0; +} + +/* + * da_monitor_destroy - return the allocated slot + */ +static inline void da_monitor_destroy(void) +{ + if (task_mon_slot =3D=3D RV_PER_TASK_MONITOR_INIT) { + WARN_ONCE(1, "Disabling a disabled monitor: " __stringify(MONITOR_NAME)); + return; + } + rv_put_task_monitor_slot(task_mon_slot); + task_mon_slot =3D RV_PER_TASK_MONITOR_INIT; + return; +} +#endif + +/* + * Handle event for implicit monitor: da_get_monitor() will figure out * the monitor. */ -#define DECLARE_DA_MON_MONITOR_HANDLER_IMPLICIT(name, type) \ - \ -static inline void __da_handle_event_##name(struct da_monitor *da_mon, \ - enum events_##name event) \ -{ \ - bool retval; \ - \ - retval =3D da_event_##name(da_mon, event); \ - if (!retval) \ - da_monitor_reset_##name(da_mon); \ -} \ - \ -/* \ - * da_handle_event_##name - handle an event \ - */ \ -static inline void da_handle_event_##name(enum events_##name event) \ -{ \ - struct da_monitor *da_mon =3D da_get_monitor_##name(); \ - bool retval; \ - \ - retval =3D da_monitor_handling_event_##name(da_mon); \ - if (!retval) \ - return; \ - \ - __da_handle_event_##name(da_mon, event); \ -} \ - \ -/* \ - * da_handle_start_event_##name - start monitoring or handle event \ - * \ - * This function is used to notify the monitor that the system is returnin= g \ - * to the initial state, so the monitor can start monitoring in the next e= vent. \ - * Thus: \ - * \ - * If the monitor already started, handle the event. \ - * If the monitor did not start yet, start the monitor but skip the event.= \ - */ \ -static inline bool da_handle_start_event_##name(enum events_##name event) = \ -{ \ - struct da_monitor *da_mon; \ - \ - if (!da_monitor_enabled_##name()) \ - return 0; \ - \ - da_mon =3D da_get_monitor_##name(); \ - \ - if (unlikely(!da_monitoring_##name(da_mon))) { \ - da_monitor_start_##name(da_mon); \ - return 0; \ - } \ - \ - __da_handle_event_##name(da_mon, 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(enum events_##name eve= nt) \ -{ \ - struct da_monitor *da_mon; \ - \ - if (!da_monitor_enabled_##name()) \ - return 0; \ - \ - da_mon =3D da_get_monitor_##name(); \ - \ - if (unlikely(!da_monitoring_##name(da_mon))) \ - da_monitor_start_##name(da_mon); \ - \ - __da_handle_event_##name(da_mon, event); \ - \ - return 1; \ +#if RV_MON_TYPE =3D=3D RV_MON_GLOBAL || RV_MON_TYPE =3D=3D RV_MON_PER_CPU + +static inline void __da_handle_event(struct da_monitor *da_mon, + enum events event) +{ + bool retval; + + retval =3D da_event(da_mon, event); + if (!retval) + da_monitor_reset(da_mon); +} + +/* + * da_handle_event - handle an event + */ +static inline void da_handle_event(enum events event) +{ + struct da_monitor *da_mon =3D da_get_monitor(); + bool retval; + + retval =3D da_monitor_handling_event(da_mon); + if (!retval) + return; + + __da_handle_event(da_mon, event); +} + +/* + * da_handle_start_event - start monitoring or handle event + * + * This function is used to notify the monitor that the system is returning + * to the initial state, so the monitor can start monitoring in the next e= vent. + * Thus: + * + * If the monitor already started, handle the event. + * If the monitor did not start yet, start the monitor but skip the event. + */ +static inline bool da_handle_start_event(enum events event) +{ + struct da_monitor *da_mon; + + if (!da_monitor_enabled()) + return 0; + + da_mon =3D da_get_monitor(); + + if (unlikely(!da_monitoring(da_mon))) { + da_monitor_start(da_mon); + return 0; + } + + __da_handle_event(da_mon, event); + + return 1; +} + +/* + * da_handle_start_run_event - 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(enum events event) +{ + struct da_monitor *da_mon; + + if (!da_monitor_enabled()) + return 0; + + da_mon =3D da_get_monitor(); + + if (unlikely(!da_monitoring(da_mon))) + da_monitor_start(da_mon); + + __da_handle_event(da_mon, event); + + return 1; } =20 /* * Handle event for per task. */ -#define DECLARE_DA_MON_MONITOR_HANDLER_PER_TASK(name, type) \ - \ -static inline void \ -__da_handle_event_##name(struct da_monitor *da_mon, struct task_struct *ts= k, \ - enum events_##name event) \ -{ \ - bool retval; \ - \ - retval =3D da_event_##name(da_mon, tsk, event); \ - if (!retval) \ - da_monitor_reset_##name(da_mon); \ -} \ - \ -/* \ - * da_handle_event_##name - handle an event \ - */ \ -static inline void \ -da_handle_event_##name(struct task_struct *tsk, enum events_##name event) = \ -{ \ - struct da_monitor *da_mon =3D da_get_monitor_##name(tsk); \ - bool retval; \ - \ - retval =3D da_monitor_handling_event_##name(da_mon); \ - if (!retval) \ - return; \ - \ - __da_handle_event_##name(da_mon, tsk, event); \ -} \ - \ -/* \ - * da_handle_start_event_##name - start monitoring or handle event \ - * \ - * This function is used to notify the monitor that the system is returnin= g \ - * to the initial state, so the monitor can start monitoring in the next e= vent. \ - * Thus: \ - * \ - * If the monitor already started, handle the event. \ - * If the monitor did not start yet, start the monitor but skip the event.= \ - */ \ -static inline bool \ -da_handle_start_event_##name(struct task_struct *tsk, enum events_##name e= vent) \ -{ \ - struct da_monitor *da_mon; \ - \ - if (!da_monitor_enabled_##name()) \ - return 0; \ - \ - da_mon =3D da_get_monitor_##name(tsk); \ - \ - if (unlikely(!da_monitoring_##name(da_mon))) { \ - da_monitor_start_##name(da_mon); \ - return 0; \ - } \ - \ - __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_##na= me event) \ -{ \ - struct da_monitor *da_mon; \ - \ - if (!da_monitor_enabled_##name()) \ - return 0; \ - \ - da_mon =3D 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; \ +#elif RV_MON_TYPE =3D=3D RV_MON_PER_TASK + +static inline void +__da_handle_event(struct da_monitor *da_mon, struct task_struct *tsk, + enum events event) +{ + bool retval; + + retval =3D da_event(da_mon, tsk, event); + if (!retval) + da_monitor_reset(da_mon); +} + +/* + * da_handle_event - handle an event + */ +static inline void +da_handle_event(struct task_struct *tsk, enum events event) +{ + struct da_monitor *da_mon =3D da_get_monitor(tsk); + bool retval; + + retval =3D da_monitor_handling_event(da_mon); + if (!retval) + return; + + __da_handle_event(da_mon, tsk, event); +} + +/* + * da_handle_start_event - start monitoring or handle event + * + * This function is used to notify the monitor that the system is returning + * to the initial state, so the monitor can start monitoring in the next e= vent. + * Thus: + * + * If the monitor already started, handle the event. + * If the monitor did not start yet, start the monitor but skip the event. + */ +static inline bool +da_handle_start_event(struct task_struct *tsk, enum events event) +{ + struct da_monitor *da_mon; + + if (!da_monitor_enabled()) + return 0; + + da_mon =3D da_get_monitor(tsk); + + if (unlikely(!da_monitoring(da_mon))) { + da_monitor_start(da_mon); + return 0; + } + + __da_handle_event(da_mon, tsk, event); + + return 1; +} + +/* + * da_handle_start_run_event - 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(struct task_struct *tsk, enum events event) +{ + struct da_monitor *da_mon; + + if (!da_monitor_enabled()) + return 0; + + da_mon =3D da_get_monitor(tsk); + + if (unlikely(!da_monitoring(da_mon))) + da_monitor_start(da_mon); + + __da_handle_event(da_mon, tsk, event); + + return 1; } +#endif =20 /* * Entry point for the global monitor. */ -#define DECLARE_DA_MON_GLOBAL(name, type) \ - \ -DECLARE_AUTOMATA_HELPERS(name, type) \ -DECLARE_DA_MON_GENERIC_HELPERS(name, type) \ -DECLARE_DA_MON_MODEL_HANDLER_IMPLICIT(name, type) \ -DECLARE_DA_MON_INIT_GLOBAL(name, type) \ -DECLARE_DA_MON_MONITOR_HANDLER_IMPLICIT(name, type) +#define DECLARE_DA_MON_GLOBAL(name, type) =20 /* * Entry point for the per-cpu monitor. */ -#define DECLARE_DA_MON_PER_CPU(name, type) \ - \ -DECLARE_AUTOMATA_HELPERS(name, type) \ -DECLARE_DA_MON_GENERIC_HELPERS(name, type) \ -DECLARE_DA_MON_MODEL_HANDLER_IMPLICIT(name, type) \ -DECLARE_DA_MON_INIT_PER_CPU(name, type) \ -DECLARE_DA_MON_MONITOR_HANDLER_IMPLICIT(name, type) +#define DECLARE_DA_MON_PER_CPU(name, type) =20 /* * Entry point for the per-task monitor. */ -#define DECLARE_DA_MON_PER_TASK(name, type) \ - \ -DECLARE_AUTOMATA_HELPERS(name, type) \ -DECLARE_DA_MON_GENERIC_HELPERS(name, type) \ -DECLARE_DA_MON_MODEL_HANDLER_PER_TASK(name, type) \ -DECLARE_DA_MON_INIT_PER_TASK(name, type) \ -DECLARE_DA_MON_MONITOR_HANDLER_PER_TASK(name, type) +#define DECLARE_DA_MON_PER_TASK(name, type) diff --git a/kernel/trace/rv/monitors/nrp/nrp.c b/kernel/trace/rv/monitors/= nrp/nrp.c index 5a83b7171432..4b5646a70094 100644 --- a/kernel/trace/rv/monitors/nrp/nrp.c +++ b/kernel/trace/rv/monitors/nrp/nrp.c @@ -6,7 +6,6 @@ #include #include #include -#include =20 #define MODULE_NAME "nrp" =20 @@ -15,17 +14,16 @@ #include #include =20 +#define RV_MON_TYPE RV_MON_PER_TASK #include "nrp.h" - -static struct rv_monitor rv_nrp; -DECLARE_DA_MON_PER_TASK(nrp, unsigned char); +#include =20 #ifdef CONFIG_X86_LOCAL_APIC #include =20 static void handle_vector_irq_entry(void *data, int vector) { - da_handle_event_nrp(current, irq_entry_nrp); + da_handle_event(current, irq_entry_nrp); } =20 static void attach_vector_irq(void) @@ -60,7 +58,7 @@ static void detach_vector_irq(void) { } =20 static void handle_irq_entry(void *data, int irq, struct irqaction *action) { - da_handle_event_nrp(current, irq_entry_nrp); + da_handle_event(current, irq_entry_nrp); } =20 static void handle_sched_need_resched(void *data, struct task_struct *tsk, @@ -72,22 +70,22 @@ static void handle_sched_need_resched(void *data, struc= t task_struct *tsk, * which may not mirror the system state but makes the monitor simpler, */ if (tif =3D=3D TIF_NEED_RESCHED) - da_handle_start_event_nrp(tsk, sched_need_resched_nrp); + da_handle_start_event(tsk, sched_need_resched_nrp); } =20 static void handle_schedule_entry(void *data, bool preempt) { if (preempt) - da_handle_event_nrp(current, schedule_entry_preempt_nrp); + da_handle_event(current, schedule_entry_preempt_nrp); else - da_handle_event_nrp(current, schedule_entry_nrp); + da_handle_event(current, schedule_entry_nrp); } =20 static int enable_nrp(void) { int retval; =20 - retval =3D da_monitor_init_nrp(); + retval =3D da_monitor_init(); if (retval) return retval; =20 @@ -101,33 +99,33 @@ static int enable_nrp(void) =20 static void disable_nrp(void) { - rv_nrp.enabled =3D 0; + rv_this.enabled =3D 0; =20 rv_detach_trace_probe("nrp", irq_handler_entry, handle_irq_entry); rv_detach_trace_probe("nrp", sched_set_need_resched_tp, handle_sched_need= _resched); rv_detach_trace_probe("nrp", sched_entry_tp, handle_schedule_entry); detach_vector_irq(); =20 - da_monitor_destroy_nrp(); + da_monitor_destroy(); } =20 -static struct rv_monitor rv_nrp =3D { +static struct rv_monitor rv_this =3D { .name =3D "nrp", .description =3D "need resched preempts.", .enable =3D enable_nrp, .disable =3D disable_nrp, - .reset =3D da_monitor_reset_all_nrp, + .reset =3D da_monitor_reset_all, .enabled =3D 0, }; =20 static int __init register_nrp(void) { - return rv_register_monitor(&rv_nrp, &rv_sched); + return rv_register_monitor(&rv_this, &rv_sched); } =20 static void __exit unregister_nrp(void) { - rv_unregister_monitor(&rv_nrp); + rv_unregister_monitor(&rv_this); } =20 module_init(register_nrp); diff --git a/kernel/trace/rv/monitors/nrp/nrp.h b/kernel/trace/rv/monitors/= nrp/nrp.h index c9f12207cbf6..c2ec83da2124 100644 --- a/kernel/trace/rv/monitors/nrp/nrp.h +++ b/kernel/trace/rv/monitors/nrp/nrp.h @@ -5,6 +5,8 @@ * Documentation/trace/rv/deterministic_automata.rst */ =20 +#define MONITOR_NAME nrp + enum states_nrp { preempt_irq_nrp =3D 0, any_thread_running_nrp, diff --git a/kernel/trace/rv/monitors/opid/opid.c b/kernel/trace/rv/monitor= s/opid/opid.c index 50d64e7fb8c4..25a40e90fa40 100644 --- a/kernel/trace/rv/monitors/opid/opid.c +++ b/kernel/trace/rv/monitors/opid/opid.c @@ -6,7 +6,6 @@ #include #include #include -#include =20 #define MODULE_NAME "opid" =20 @@ -16,17 +15,16 @@ #include #include =20 +#define RV_MON_TYPE RV_MON_PER_CPU #include "opid.h" - -static struct rv_monitor rv_opid; -DECLARE_DA_MON_PER_CPU(opid, unsigned char); +#include =20 #ifdef CONFIG_X86_LOCAL_APIC #include =20 static void handle_vector_irq_entry(void *data, int vector) { - da_handle_event_opid(irq_entry_opid); + da_handle_event(irq_entry_opid); } =20 static void attach_vector_irq(void) @@ -61,52 +59,52 @@ static void detach_vector_irq(void) { } =20 static void handle_irq_disable(void *data, unsigned long ip, unsigned long= parent_ip) { - da_handle_event_opid(irq_disable_opid); + da_handle_event(irq_disable_opid); } =20 static void handle_irq_enable(void *data, unsigned long ip, unsigned long = parent_ip) { - da_handle_event_opid(irq_enable_opid); + da_handle_event(irq_enable_opid); } =20 static void handle_irq_entry(void *data, int irq, struct irqaction *action) { - da_handle_event_opid(irq_entry_opid); + da_handle_event(irq_entry_opid); } =20 static void handle_preempt_disable(void *data, unsigned long ip, unsigned = long parent_ip) { - da_handle_event_opid(preempt_disable_opid); + da_handle_event(preempt_disable_opid); } =20 static void handle_preempt_enable(void *data, unsigned long ip, unsigned l= ong parent_ip) { - da_handle_event_opid(preempt_enable_opid); + da_handle_event(preempt_enable_opid); } =20 static void handle_sched_need_resched(void *data, struct task_struct *tsk,= int cpu, int tif) { /* The monitor's intitial state is not in_irq */ if (this_cpu_read(hardirq_context)) - da_handle_event_opid(sched_need_resched_opid); + da_handle_event(sched_need_resched_opid); else - da_handle_start_event_opid(sched_need_resched_opid); + da_handle_start_event(sched_need_resched_opid); } =20 static void handle_sched_waking(void *data, struct task_struct *p) { /* The monitor's intitial state is not in_irq */ if (this_cpu_read(hardirq_context)) - da_handle_event_opid(sched_waking_opid); + da_handle_event(sched_waking_opid); else - da_handle_start_event_opid(sched_waking_opid); + da_handle_start_event(sched_waking_opid); } =20 static int enable_opid(void) { int retval; =20 - retval =3D da_monitor_init_opid(); + retval =3D da_monitor_init(); if (retval) return retval; =20 @@ -124,7 +122,7 @@ static int enable_opid(void) =20 static void disable_opid(void) { - rv_opid.enabled =3D 0; + rv_this.enabled =3D 0; =20 rv_detach_trace_probe("opid", irq_disable, handle_irq_disable); rv_detach_trace_probe("opid", irq_enable, handle_irq_enable); @@ -135,29 +133,29 @@ static void disable_opid(void) rv_detach_trace_probe("opid", sched_waking, handle_sched_waking); detach_vector_irq(); =20 - da_monitor_destroy_opid(); + da_monitor_destroy(); } =20 /* * This is the monitor register section. */ -static struct rv_monitor rv_opid =3D { +static struct rv_monitor rv_this =3D { .name =3D "opid", .description =3D "operations with preemption and irq disabled.", .enable =3D enable_opid, .disable =3D disable_opid, - .reset =3D da_monitor_reset_all_opid, + .reset =3D da_monitor_reset_all, .enabled =3D 0, }; =20 static int __init register_opid(void) { - return rv_register_monitor(&rv_opid, &rv_sched); + return rv_register_monitor(&rv_this, &rv_sched); } =20 static void __exit unregister_opid(void) { - rv_unregister_monitor(&rv_opid); + rv_unregister_monitor(&rv_this); } =20 module_init(register_opid); diff --git a/kernel/trace/rv/monitors/opid/opid.h b/kernel/trace/rv/monitor= s/opid/opid.h index b4b8c2ff7f64..5014f1b85ecf 100644 --- a/kernel/trace/rv/monitors/opid/opid.h +++ b/kernel/trace/rv/monitors/opid/opid.h @@ -5,6 +5,8 @@ * Documentation/trace/rv/deterministic_automata.rst */ =20 +#define MONITOR_NAME opid + enum states_opid { disabled_opid =3D 0, enabled_opid, diff --git a/kernel/trace/rv/monitors/sco/sco.c b/kernel/trace/rv/monitors/= sco/sco.c index 04c36405e2e3..5a3bd5e16e62 100644 --- a/kernel/trace/rv/monitors/sco/sco.c +++ b/kernel/trace/rv/monitors/sco/sco.c @@ -6,7 +6,6 @@ #include #include #include -#include =20 #define MODULE_NAME "sco" =20 @@ -14,31 +13,30 @@ #include #include =20 +#define RV_MON_TYPE RV_MON_PER_CPU #include "sco.h" - -static struct rv_monitor rv_sco; -DECLARE_DA_MON_PER_CPU(sco, unsigned char); +#include =20 static void handle_sched_set_state(void *data, struct task_struct *tsk, in= t state) { - da_handle_start_event_sco(sched_set_state_sco); + da_handle_start_event(sched_set_state_sco); } =20 static void handle_schedule_entry(void *data, bool preempt) { - da_handle_event_sco(schedule_entry_sco); + da_handle_event(schedule_entry_sco); } =20 static void handle_schedule_exit(void *data, bool is_switch) { - da_handle_start_event_sco(schedule_exit_sco); + da_handle_start_event(schedule_exit_sco); } =20 static int enable_sco(void) { int retval; =20 - retval =3D da_monitor_init_sco(); + retval =3D da_monitor_init(); if (retval) return retval; =20 @@ -51,32 +49,32 @@ static int enable_sco(void) =20 static void disable_sco(void) { - rv_sco.enabled =3D 0; + rv_this.enabled =3D 0; =20 rv_detach_trace_probe("sco", sched_set_state_tp, handle_sched_set_state); rv_detach_trace_probe("sco", sched_entry_tp, handle_schedule_entry); rv_detach_trace_probe("sco", sched_exit_tp, handle_schedule_exit); =20 - da_monitor_destroy_sco(); + da_monitor_destroy(); } =20 -static struct rv_monitor rv_sco =3D { +static struct rv_monitor rv_this =3D { .name =3D "sco", .description =3D "scheduling context operations.", .enable =3D enable_sco, .disable =3D disable_sco, - .reset =3D da_monitor_reset_all_sco, + .reset =3D da_monitor_reset_all, .enabled =3D 0, }; =20 static int __init register_sco(void) { - return rv_register_monitor(&rv_sco, &rv_sched); + return rv_register_monitor(&rv_this, &rv_sched); } =20 static void __exit unregister_sco(void) { - rv_unregister_monitor(&rv_sco); + rv_unregister_monitor(&rv_this); } =20 module_init(register_sco); diff --git a/kernel/trace/rv/monitors/sco/sco.h b/kernel/trace/rv/monitors/= sco/sco.h index 7a4c1f2d5ca1..06b1c420ce54 100644 --- a/kernel/trace/rv/monitors/sco/sco.h +++ b/kernel/trace/rv/monitors/sco/sco.h @@ -5,6 +5,8 @@ * Documentation/trace/rv/deterministic_automata.rst */ =20 +#define MONITOR_NAME sco + enum states_sco { thread_context_sco =3D 0, scheduling_context_sco, diff --git a/kernel/trace/rv/monitors/scpd/scpd.c b/kernel/trace/rv/monitor= s/scpd/scpd.c index 1e351ba52fee..83b48627dc9f 100644 --- a/kernel/trace/rv/monitors/scpd/scpd.c +++ b/kernel/trace/rv/monitors/scpd/scpd.c @@ -6,7 +6,6 @@ #include #include #include -#include =20 #define MODULE_NAME "scpd" =20 @@ -15,36 +14,35 @@ #include #include =20 +#define RV_MON_TYPE RV_MON_PER_CPU #include "scpd.h" - -static struct rv_monitor rv_scpd; -DECLARE_DA_MON_PER_CPU(scpd, unsigned char); +#include =20 static void handle_preempt_disable(void *data, unsigned long ip, unsigned = long parent_ip) { - da_handle_event_scpd(preempt_disable_scpd); + da_handle_event(preempt_disable_scpd); } =20 static void handle_preempt_enable(void *data, unsigned long ip, unsigned l= ong parent_ip) { - da_handle_start_event_scpd(preempt_enable_scpd); + da_handle_start_event(preempt_enable_scpd); } =20 static void handle_schedule_entry(void *data, bool preempt) { - da_handle_event_scpd(schedule_entry_scpd); + da_handle_event(schedule_entry_scpd); } =20 static void handle_schedule_exit(void *data, bool is_switch) { - da_handle_event_scpd(schedule_exit_scpd); + da_handle_event(schedule_exit_scpd); } =20 static int enable_scpd(void) { int retval; =20 - retval =3D da_monitor_init_scpd(); + retval =3D da_monitor_init(); if (retval) return retval; =20 @@ -58,33 +56,33 @@ static int enable_scpd(void) =20 static void disable_scpd(void) { - rv_scpd.enabled =3D 0; + rv_this.enabled =3D 0; =20 rv_detach_trace_probe("scpd", preempt_disable, handle_preempt_disable); rv_detach_trace_probe("scpd", preempt_enable, handle_preempt_enable); rv_detach_trace_probe("scpd", sched_entry_tp, handle_schedule_entry); rv_detach_trace_probe("scpd", sched_exit_tp, handle_schedule_exit); =20 - da_monitor_destroy_scpd(); + da_monitor_destroy(); } =20 -static struct rv_monitor rv_scpd =3D { +static struct rv_monitor rv_this =3D { .name =3D "scpd", .description =3D "schedule called with preemption disabled.", .enable =3D enable_scpd, .disable =3D disable_scpd, - .reset =3D da_monitor_reset_all_scpd, + .reset =3D da_monitor_reset_all, .enabled =3D 0, }; =20 static int __init register_scpd(void) { - return rv_register_monitor(&rv_scpd, &rv_sched); + return rv_register_monitor(&rv_this, &rv_sched); } =20 static void __exit unregister_scpd(void) { - rv_unregister_monitor(&rv_scpd); + rv_unregister_monitor(&rv_this); } =20 module_init(register_scpd); diff --git a/kernel/trace/rv/monitors/scpd/scpd.h b/kernel/trace/rv/monitor= s/scpd/scpd.h index 295f735a5811..4a725a68085a 100644 --- a/kernel/trace/rv/monitors/scpd/scpd.h +++ b/kernel/trace/rv/monitors/scpd/scpd.h @@ -5,6 +5,8 @@ * Documentation/trace/rv/deterministic_automata.rst */ =20 +#define MONITOR_NAME scpd + enum states_scpd { cant_sched_scpd =3D 0, can_sched_scpd, diff --git a/kernel/trace/rv/monitors/snep/snep.c b/kernel/trace/rv/monitor= s/snep/snep.c index 558950f524a5..b80b73795dec 100644 --- a/kernel/trace/rv/monitors/snep/snep.c +++ b/kernel/trace/rv/monitors/snep/snep.c @@ -6,7 +6,6 @@ #include #include #include -#include =20 #define MODULE_NAME "snep" =20 @@ -15,36 +14,35 @@ #include #include =20 +#define RV_MON_TYPE RV_MON_PER_CPU #include "snep.h" - -static struct rv_monitor rv_snep; -DECLARE_DA_MON_PER_CPU(snep, unsigned char); +#include =20 static void handle_preempt_disable(void *data, unsigned long ip, unsigned = long parent_ip) { - da_handle_start_event_snep(preempt_disable_snep); + da_handle_start_event(preempt_disable_snep); } =20 static void handle_preempt_enable(void *data, unsigned long ip, unsigned l= ong parent_ip) { - da_handle_start_event_snep(preempt_enable_snep); + da_handle_start_event(preempt_enable_snep); } =20 static void handle_schedule_entry(void *data, bool preempt) { - da_handle_event_snep(schedule_entry_snep); + da_handle_event(schedule_entry_snep); } =20 static void handle_schedule_exit(void *data, bool is_switch) { - da_handle_start_event_snep(schedule_exit_snep); + da_handle_start_event(schedule_exit_snep); } =20 static int enable_snep(void) { int retval; =20 - retval =3D da_monitor_init_snep(); + retval =3D da_monitor_init(); if (retval) return retval; =20 @@ -58,33 +56,33 @@ static int enable_snep(void) =20 static void disable_snep(void) { - rv_snep.enabled =3D 0; + rv_this.enabled =3D 0; =20 rv_detach_trace_probe("snep", preempt_disable, handle_preempt_disable); rv_detach_trace_probe("snep", preempt_enable, handle_preempt_enable); rv_detach_trace_probe("snep", sched_entry_tp, handle_schedule_entry); rv_detach_trace_probe("snep", sched_exit_tp, handle_schedule_exit); =20 - da_monitor_destroy_snep(); + da_monitor_destroy(); } =20 -static struct rv_monitor rv_snep =3D { +static struct rv_monitor rv_this =3D { .name =3D "snep", .description =3D "schedule does not enable preempt.", .enable =3D enable_snep, .disable =3D disable_snep, - .reset =3D da_monitor_reset_all_snep, + .reset =3D da_monitor_reset_all, .enabled =3D 0, }; =20 static int __init register_snep(void) { - return rv_register_monitor(&rv_snep, &rv_sched); + return rv_register_monitor(&rv_this, &rv_sched); } =20 static void __exit unregister_snep(void) { - rv_unregister_monitor(&rv_snep); + rv_unregister_monitor(&rv_this); } =20 module_init(register_snep); diff --git a/kernel/trace/rv/monitors/snep/snep.h b/kernel/trace/rv/monitor= s/snep/snep.h index 4cd9abb77b7b..753080dc5fa1 100644 --- a/kernel/trace/rv/monitors/snep/snep.h +++ b/kernel/trace/rv/monitors/snep/snep.h @@ -5,6 +5,8 @@ * Documentation/trace/rv/deterministic_automata.rst */ =20 +#define MONITOR_NAME snep + enum states_snep { non_scheduling_context_snep =3D 0, scheduling_contex_snep, diff --git a/kernel/trace/rv/monitors/snroc/snroc.c b/kernel/trace/rv/monit= ors/snroc/snroc.c index 540e686e699f..f168b1a4b12c 100644 --- a/kernel/trace/rv/monitors/snroc/snroc.c +++ b/kernel/trace/rv/monitors/snroc/snroc.c @@ -6,7 +6,6 @@ #include #include #include -#include =20 #define MODULE_NAME "snroc" =20 @@ -14,14 +13,13 @@ #include #include =20 +#define RV_MON_TYPE RV_MON_PER_TASK #include "snroc.h" - -static struct rv_monitor rv_snroc; -DECLARE_DA_MON_PER_TASK(snroc, unsigned char); +#include =20 static void handle_sched_set_state(void *data, struct task_struct *tsk, in= t state) { - da_handle_event_snroc(tsk, sched_set_state_snroc); + da_handle_event(tsk, sched_set_state_snroc); } =20 static void handle_sched_switch(void *data, bool preempt, @@ -29,15 +27,15 @@ static void handle_sched_switch(void *data, bool preemp= t, struct task_struct *next, unsigned int prev_state) { - da_handle_start_event_snroc(prev, sched_switch_out_snroc); - da_handle_event_snroc(next, sched_switch_in_snroc); + da_handle_start_event(prev, sched_switch_out_snroc); + da_handle_event(next, sched_switch_in_snroc); } =20 static int enable_snroc(void) { int retval; =20 - retval =3D da_monitor_init_snroc(); + retval =3D da_monitor_init(); if (retval) return retval; =20 @@ -49,31 +47,31 @@ static int enable_snroc(void) =20 static void disable_snroc(void) { - rv_snroc.enabled =3D 0; + rv_this.enabled =3D 0; =20 rv_detach_trace_probe("snroc", sched_set_state_tp, handle_sched_set_state= ); rv_detach_trace_probe("snroc", sched_switch, handle_sched_switch); =20 - da_monitor_destroy_snroc(); + da_monitor_destroy(); } =20 -static struct rv_monitor rv_snroc =3D { +static struct rv_monitor rv_this =3D { .name =3D "snroc", .description =3D "set non runnable on its own context.", .enable =3D enable_snroc, .disable =3D disable_snroc, - .reset =3D da_monitor_reset_all_snroc, + .reset =3D da_monitor_reset_all, .enabled =3D 0, }; =20 static int __init register_snroc(void) { - return rv_register_monitor(&rv_snroc, &rv_sched); + return rv_register_monitor(&rv_this, &rv_sched); } =20 static void __exit unregister_snroc(void) { - rv_unregister_monitor(&rv_snroc); + rv_unregister_monitor(&rv_this); } =20 module_init(register_snroc); diff --git a/kernel/trace/rv/monitors/snroc/snroc.h b/kernel/trace/rv/monit= ors/snroc/snroc.h index c3650a2b1b10..ada5ee08bdab 100644 --- a/kernel/trace/rv/monitors/snroc/snroc.h +++ b/kernel/trace/rv/monitors/snroc/snroc.h @@ -5,6 +5,8 @@ * Documentation/trace/rv/deterministic_automata.rst */ =20 +#define MONITOR_NAME snroc + enum states_snroc { other_context_snroc =3D 0, own_context_snroc, diff --git a/kernel/trace/rv/monitors/sssw/sssw.c b/kernel/trace/rv/monitor= s/sssw/sssw.c index 84b8d890d9d4..a91321c890cd 100644 --- a/kernel/trace/rv/monitors/sssw/sssw.c +++ b/kernel/trace/rv/monitors/sssw/sssw.c @@ -6,7 +6,6 @@ #include #include #include -#include =20 #define MODULE_NAME "sssw" =20 @@ -15,17 +14,16 @@ #include #include =20 +#define RV_MON_TYPE RV_MON_PER_TASK #include "sssw.h" - -static struct rv_monitor rv_sssw; -DECLARE_DA_MON_PER_TASK(sssw, unsigned char); +#include =20 static void handle_sched_set_state(void *data, struct task_struct *tsk, in= t state) { if (state =3D=3D TASK_RUNNING) - da_handle_start_event_sssw(tsk, sched_set_state_runnable_sssw); + da_handle_start_event(tsk, sched_set_state_runnable_sssw); else - da_handle_event_sssw(tsk, sched_set_state_sleepable_sssw); + da_handle_event(tsk, sched_set_state_sleepable_sssw); } =20 static void handle_sched_switch(void *data, bool preempt, @@ -34,15 +32,15 @@ static void handle_sched_switch(void *data, bool preemp= t, unsigned int prev_state) { if (preempt) - da_handle_event_sssw(prev, sched_switch_preempt_sssw); + da_handle_event(prev, sched_switch_preempt_sssw); else if (prev_state =3D=3D TASK_RUNNING) - da_handle_event_sssw(prev, sched_switch_yield_sssw); + da_handle_event(prev, sched_switch_yield_sssw); else if (prev_state =3D=3D TASK_RTLOCK_WAIT) /* special case of sleeping task with racy conditions */ - da_handle_event_sssw(prev, sched_switch_blocking_sssw); + da_handle_event(prev, sched_switch_blocking_sssw); else - da_handle_event_sssw(prev, sched_switch_suspend_sssw); - da_handle_event_sssw(next, sched_switch_in_sssw); + da_handle_event(prev, sched_switch_suspend_sssw); + da_handle_event(next, sched_switch_in_sssw); } =20 static void handle_sched_wakeup(void *data, struct task_struct *p) @@ -51,21 +49,21 @@ static void handle_sched_wakeup(void *data, struct task= _struct *p) * Wakeup can also lead to signal_wakeup although the system is * actually runnable. The monitor can safely start with this event. */ - da_handle_start_event_sssw(p, sched_wakeup_sssw); + da_handle_start_event(p, sched_wakeup_sssw); } =20 static void handle_signal_deliver(void *data, int sig, struct kernel_siginfo *info, struct k_sigaction *ka) { - da_handle_event_sssw(current, signal_deliver_sssw); + da_handle_event(current, signal_deliver_sssw); } =20 static int enable_sssw(void) { int retval; =20 - retval =3D da_monitor_init_sssw(); + retval =3D da_monitor_init(); if (retval) return retval; =20 @@ -79,33 +77,33 @@ static int enable_sssw(void) =20 static void disable_sssw(void) { - rv_sssw.enabled =3D 0; + rv_this.enabled =3D 0; =20 rv_detach_trace_probe("sssw", sched_set_state_tp, handle_sched_set_state); rv_detach_trace_probe("sssw", sched_switch, handle_sched_switch); rv_detach_trace_probe("sssw", sched_wakeup, handle_sched_wakeup); rv_detach_trace_probe("sssw", signal_deliver, handle_signal_deliver); =20 - da_monitor_destroy_sssw(); + da_monitor_destroy(); } =20 -static struct rv_monitor rv_sssw =3D { +static struct rv_monitor rv_this =3D { .name =3D "sssw", .description =3D "set state sleep and wakeup.", .enable =3D enable_sssw, .disable =3D disable_sssw, - .reset =3D da_monitor_reset_all_sssw, + .reset =3D da_monitor_reset_all, .enabled =3D 0, }; =20 static int __init register_sssw(void) { - return rv_register_monitor(&rv_sssw, &rv_sched); + return rv_register_monitor(&rv_this, &rv_sched); } =20 static void __exit unregister_sssw(void) { - rv_unregister_monitor(&rv_sssw); + rv_unregister_monitor(&rv_this); } =20 module_init(register_sssw); diff --git a/kernel/trace/rv/monitors/sssw/sssw.h b/kernel/trace/rv/monitor= s/sssw/sssw.h index 243d54050c94..8409eaadc7e0 100644 --- a/kernel/trace/rv/monitors/sssw/sssw.h +++ b/kernel/trace/rv/monitors/sssw/sssw.h @@ -5,6 +5,8 @@ * Documentation/trace/rv/deterministic_automata.rst */ =20 +#define MONITOR_NAME sssw + enum states_sssw { runnable_sssw =3D 0, signal_wakeup_sssw, diff --git a/kernel/trace/rv/monitors/sts/sts.c b/kernel/trace/rv/monitors/= sts/sts.c index c4a9cd67c1d2..ce031cbf202a 100644 --- a/kernel/trace/rv/monitors/sts/sts.c +++ b/kernel/trace/rv/monitors/sts/sts.c @@ -6,7 +6,6 @@ #include #include #include -#include =20 #define MODULE_NAME "sts" =20 @@ -16,17 +15,16 @@ #include #include =20 +#define RV_MON_TYPE RV_MON_PER_CPU #include "sts.h" - -static struct rv_monitor rv_sts; -DECLARE_DA_MON_PER_CPU(sts, unsigned char); +#include =20 #ifdef CONFIG_X86_LOCAL_APIC #include =20 static void handle_vector_irq_entry(void *data, int vector) { - da_handle_event_sts(irq_entry_sts); + da_handle_event(irq_entry_sts); } =20 static void attach_vector_irq(void) @@ -61,17 +59,17 @@ static void detach_vector_irq(void) { } =20 static void handle_irq_disable(void *data, unsigned long ip, unsigned long= parent_ip) { - da_handle_event_sts(irq_disable_sts); + da_handle_event(irq_disable_sts); } =20 static void handle_irq_enable(void *data, unsigned long ip, unsigned long = parent_ip) { - da_handle_event_sts(irq_enable_sts); + da_handle_event(irq_enable_sts); } =20 static void handle_irq_entry(void *data, int irq, struct irqaction *action) { - da_handle_event_sts(irq_entry_sts); + da_handle_event(irq_entry_sts); } =20 static void handle_sched_switch(void *data, bool preempt, @@ -79,24 +77,24 @@ static void handle_sched_switch(void *data, bool preemp= t, struct task_struct *next, unsigned int prev_state) { - da_handle_event_sts(sched_switch_sts); + da_handle_event(sched_switch_sts); } =20 static void handle_schedule_entry(void *data, bool preempt) { - da_handle_event_sts(schedule_entry_sts); + da_handle_event(schedule_entry_sts); } =20 static void handle_schedule_exit(void *data, bool is_switch) { - da_handle_start_event_sts(schedule_exit_sts); + da_handle_start_event(schedule_exit_sts); } =20 static int enable_sts(void) { int retval; =20 - retval =3D da_monitor_init_sts(); + retval =3D da_monitor_init(); if (retval) return retval; =20 @@ -113,7 +111,7 @@ static int enable_sts(void) =20 static void disable_sts(void) { - rv_sts.enabled =3D 0; + rv_this.enabled =3D 0; =20 rv_detach_trace_probe("sts", irq_disable, handle_irq_disable); rv_detach_trace_probe("sts", irq_enable, handle_irq_enable); @@ -123,29 +121,29 @@ static void disable_sts(void) rv_detach_trace_probe("sts", sched_exit_tp, handle_schedule_exit); detach_vector_irq(); =20 - da_monitor_destroy_sts(); + da_monitor_destroy(); } =20 /* * This is the monitor register section. */ -static struct rv_monitor rv_sts =3D { +static struct rv_monitor rv_this =3D { .name =3D "sts", .description =3D "schedule implies task switch.", .enable =3D enable_sts, .disable =3D disable_sts, - .reset =3D da_monitor_reset_all_sts, + .reset =3D da_monitor_reset_all, .enabled =3D 0, }; =20 static int __init register_sts(void) { - return rv_register_monitor(&rv_sts, &rv_sched); + return rv_register_monitor(&rv_this, &rv_sched); } =20 static void __exit unregister_sts(void) { - rv_unregister_monitor(&rv_sts); + rv_unregister_monitor(&rv_this); } =20 module_init(register_sts); diff --git a/kernel/trace/rv/monitors/sts/sts.h b/kernel/trace/rv/monitors/= sts/sts.h index 3368b6599a00..3779d7f99404 100644 --- a/kernel/trace/rv/monitors/sts/sts.h +++ b/kernel/trace/rv/monitors/sts/sts.h @@ -5,6 +5,8 @@ * Documentation/trace/rv/deterministic_automata.rst */ =20 +#define MONITOR_NAME sts + enum states_sts { can_sched_sts =3D 0, cant_sched_sts, diff --git a/kernel/trace/rv/monitors/wip/wip.c b/kernel/trace/rv/monitors/= wip/wip.c index 4b4e99615a11..22d77ec42463 100644 --- a/kernel/trace/rv/monitors/wip/wip.c +++ b/kernel/trace/rv/monitors/wip/wip.c @@ -6,7 +6,6 @@ #include #include #include -#include =20 #define MODULE_NAME "wip" =20 @@ -14,31 +13,30 @@ #include #include =20 +#define RV_MON_TYPE RV_MON_PER_CPU #include "wip.h" - -static struct rv_monitor rv_wip; -DECLARE_DA_MON_PER_CPU(wip, unsigned char); +#include =20 static void handle_preempt_disable(void *data, unsigned long ip, unsigned = long parent_ip) { - da_handle_event_wip(preempt_disable_wip); + da_handle_event(preempt_disable_wip); } =20 static void handle_preempt_enable(void *data, unsigned long ip, unsigned l= ong parent_ip) { - da_handle_start_event_wip(preempt_enable_wip); + da_handle_start_event(preempt_enable_wip); } =20 static void handle_sched_waking(void *data, struct task_struct *task) { - da_handle_event_wip(sched_waking_wip); + da_handle_event(sched_waking_wip); } =20 static int enable_wip(void) { int retval; =20 - retval =3D da_monitor_init_wip(); + retval =3D da_monitor_init(); if (retval) return retval; =20 @@ -51,32 +49,32 @@ static int enable_wip(void) =20 static void disable_wip(void) { - rv_wip.enabled =3D 0; + rv_this.enabled =3D 0; =20 rv_detach_trace_probe("wip", preempt_disable, handle_preempt_disable); rv_detach_trace_probe("wip", preempt_enable, handle_preempt_enable); rv_detach_trace_probe("wip", sched_waking, handle_sched_waking); =20 - da_monitor_destroy_wip(); + da_monitor_destroy(); } =20 -static struct rv_monitor rv_wip =3D { +static struct rv_monitor rv_this =3D { .name =3D "wip", .description =3D "wakeup in preemptive per-cpu testing monitor.", .enable =3D enable_wip, .disable =3D disable_wip, - .reset =3D da_monitor_reset_all_wip, + .reset =3D da_monitor_reset_all, .enabled =3D 0, }; =20 static int __init register_wip(void) { - return rv_register_monitor(&rv_wip, NULL); + return rv_register_monitor(&rv_this, NULL); } =20 static void __exit unregister_wip(void) { - rv_unregister_monitor(&rv_wip); + rv_unregister_monitor(&rv_this); } =20 module_init(register_wip); diff --git a/kernel/trace/rv/monitors/wip/wip.h b/kernel/trace/rv/monitors/= wip/wip.h index c7193748bf36..cfdc52975354 100644 --- a/kernel/trace/rv/monitors/wip/wip.h +++ b/kernel/trace/rv/monitors/wip/wip.h @@ -5,6 +5,8 @@ * Documentation/trace/rv/deterministic_automata.rst */ =20 +#define MONITOR_NAME wip + enum states_wip { preemptive_wip =3D 0, non_preemptive_wip, diff --git a/kernel/trace/rv/monitors/wwnr/wwnr.c b/kernel/trace/rv/monitor= s/wwnr/wwnr.c index 4145bea2729e..579e7e217ee0 100644 --- a/kernel/trace/rv/monitors/wwnr/wwnr.c +++ b/kernel/trace/rv/monitors/wwnr/wwnr.c @@ -6,40 +6,38 @@ #include #include #include -#include =20 #define MODULE_NAME "wwnr" =20 #include #include =20 +#define RV_MON_TYPE RV_MON_PER_TASK #include "wwnr.h" - -static struct rv_monitor rv_wwnr; -DECLARE_DA_MON_PER_TASK(wwnr, unsigned char); +#include =20 static void handle_switch(void *data, bool preempt, struct task_struct *p, struct task_struct *n, unsigned int prev_state) { /* start monitoring only after the first suspension */ if (prev_state =3D=3D TASK_INTERRUPTIBLE) - da_handle_start_event_wwnr(p, switch_out_wwnr); + da_handle_start_event(p, switch_out_wwnr); else - da_handle_event_wwnr(p, switch_out_wwnr); + da_handle_event(p, switch_out_wwnr); =20 - da_handle_event_wwnr(n, switch_in_wwnr); + da_handle_event(n, switch_in_wwnr); } =20 static void handle_wakeup(void *data, struct task_struct *p) { - da_handle_event_wwnr(p, wakeup_wwnr); + da_handle_event(p, wakeup_wwnr); } =20 static int enable_wwnr(void) { int retval; =20 - retval =3D da_monitor_init_wwnr(); + retval =3D da_monitor_init(); if (retval) return retval; =20 @@ -51,31 +49,31 @@ static int enable_wwnr(void) =20 static void disable_wwnr(void) { - rv_wwnr.enabled =3D 0; + rv_this.enabled =3D 0; =20 rv_detach_trace_probe("wwnr", sched_switch, handle_switch); rv_detach_trace_probe("wwnr", sched_wakeup, handle_wakeup); =20 - da_monitor_destroy_wwnr(); + da_monitor_destroy(); } =20 -static struct rv_monitor rv_wwnr =3D { +static struct rv_monitor rv_this =3D { .name =3D "wwnr", .description =3D "wakeup while not running per-task testing model.", .enable =3D enable_wwnr, .disable =3D disable_wwnr, - .reset =3D da_monitor_reset_all_wwnr, + .reset =3D da_monitor_reset_all, .enabled =3D 0, }; =20 static int __init register_wwnr(void) { - return rv_register_monitor(&rv_wwnr, NULL); + return rv_register_monitor(&rv_this, NULL); } =20 static void __exit unregister_wwnr(void) { - rv_unregister_monitor(&rv_wwnr); + rv_unregister_monitor(&rv_this); } =20 module_init(register_wwnr); diff --git a/kernel/trace/rv/monitors/wwnr/wwnr.h b/kernel/trace/rv/monitor= s/wwnr/wwnr.h index 0a59d23edf61..85d12e42a955 100644 --- a/kernel/trace/rv/monitors/wwnr/wwnr.h +++ b/kernel/trace/rv/monitors/wwnr/wwnr.h @@ -5,6 +5,8 @@ * Documentation/trace/rv/deterministic_automata.rst */ =20 +#define MONITOR_NAME wwnr + enum states_wwnr { not_running_wwnr =3D 0, running_wwnr, --=20 2.51.1 From nobody Mon Dec 1 22:41:52 2025 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 98BE231AF3F for ; Wed, 26 Nov 2025 10:43:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764153785; cv=none; b=hktGeY40YgVcs0ZIjsyypD/r2d+p8OC7VJHekmu1GxpI66Rol84Fg8V4gkiRymGJp8nGdiKKfB0m3/ww5bYxWeqI6IitdWIEwj1REbcQsiimJDHrzzovclg0seaCC75wLMUb4IOX8/RpVG7bQSRpxsAsCyQFXsmcd4neSiuycFM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764153785; c=relaxed/simple; bh=kjUdhIslaOP9wYogqA37CR3hirS47kh1r/qkRLNi+V4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Igc7wGhy3NUH4Q05aN1exvwAVNeLWeMjWz53bt7gL+aEA2v/0rzVmP7lXpeiKPKMrNQ6msVRvol/6CVn94xOsg8bqiXR0FM7t71QNupEhCo48gpFbxTlGEG7wKrNHAFnM2n6KbHPzB/oyEedJ7/8Rjbu8cMo5Q07wCEntHopXzg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=OEF+x0QK; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="OEF+x0QK" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1764153782; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=2TDFWffmjNNRKBTFeSMpNrBuTmRdG4qCgmDRDKGn9Ic=; b=OEF+x0QKgMrPROQq9r6LT6Dt1IRxr8h4bkquiNWVq+xjGUzu/RCWevoucrdchGbz1RIt9x PGOD0QmKpslb153MFSffEfztjlQ6Ayuc84BExHR8/qxZz7KvqlYq+pojDOIE9PANcK1AhB h5edL8iZEKo67KcC5N0EseIzjQvOzI8= Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-131-E2E1S1UZNq68eQLlt_uKHw-1; Wed, 26 Nov 2025 05:42:59 -0500 X-MC-Unique: E2E1S1UZNq68eQLlt_uKHw-1 X-Mimecast-MFC-AGG-ID: E2E1S1UZNq68eQLlt_uKHw_1764153778 Received: from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.93]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id ECE9D195609F; Wed, 26 Nov 2025 10:42:57 +0000 (UTC) Received: from gmonaco-thinkpadt14gen3.rmtit.csb (unknown [10.45.226.131]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 5D6311800451; Wed, 26 Nov 2025 10:42:55 +0000 (UTC) From: Gabriele Monaco To: linux-kernel@vger.kernel.org, Steven Rostedt , Nam Cao , Gabriele Monaco , linux-trace-kernel@vger.kernel.org Cc: =?UTF-8?q?Thomas=20Wei=C3=9Fschuh?= Subject: [PATCH 2/8] rv: Cleanup da_monitor after refactor Date: Wed, 26 Nov 2025 11:42:33 +0100 Message-ID: <20251126104241.291258-3-gmonaco@redhat.com> In-Reply-To: <20251126104241.291258-1-gmonaco@redhat.com> References: <20251126104241.291258-1-gmonaco@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.93 Content-Type: text/plain; charset="utf-8" Previous changes refactored the da_monitor header file to avoid using macros, however empty macros (e.g. DECLARE_DA_FUNCTION) were left to ease review with diff tools. Most macros also get the argument type which doesn't really have a purpose since states have their own enum and the storage in struct da_monitor is fixed to unsigned int. Remove empty and no longer required macros and substitute the type parameter with the appropriate enum. Additionally break long line and adjust the format overall. Reviewed-by: Nam Cao Signed-off-by: Gabriele Monaco --- include/rv/automata.h | 24 +++------ include/rv/da_monitor.h | 107 ++++++++++++++++------------------------ 2 files changed, 50 insertions(+), 81 deletions(-) diff --git a/include/rv/automata.h b/include/rv/automata.h index 5b5d2e94c034..4a4eb40cf09a 100644 --- a/include/rv/automata.h +++ b/include/rv/automata.h @@ -6,29 +6,19 @@ * models in C generated by the dot2k tool. */ =20 +#ifndef _RV_AUTOMATA_H +#define _RV_AUTOMATA_H + #ifndef MONITOR_NAME #error "MONITOR_NAME macro is not defined. Did you include $(MODEL_NAME).h= generated by rvgen?" #endif =20 -#ifndef type -#define type unsigned char -#endif - #define RV_AUTOMATON_NAME CONCATENATE(automaton_, MONITOR_NAME) #define EVENT_MAX CONCATENATE(event_max_, MONITOR_NAME) #define STATE_MAX CONCATENATE(state_max_, MONITOR_NAME) #define events CONCATENATE(events_, MONITOR_NAME) #define states CONCATENATE(states_, MONITOR_NAME) =20 -/* - * DECLARE_AUTOMATA_HELPERS - define a set of helper functions for automata - * - * Define a set of helper functions for automata. The 'name' argument is u= sed - * as suffix for the functions and data. These functions will handle autom= aton - * with data type 'type'. - */ -#define DECLARE_AUTOMATA_HELPERS(name, type) - /* * model_get_state_name - return the (string) name of the given state */ @@ -54,7 +44,7 @@ static char *model_get_event_name(enum events event) /* * model_get_initial_state - return the automaton's initial state */ -static inline type model_get_initial_state(void) +static inline enum states model_get_initial_state(void) { return RV_AUTOMATON_NAME.initial_state; } @@ -65,8 +55,8 @@ static inline type model_get_initial_state(void) * Given the current state (curr_state) and the event (event), returns * the next state, or INVALID_STATE in case of error. */ -static inline type model_get_next_state(enum states curr_state, - enum events event) +static inline enum states model_get_next_state(enum states curr_state, + enum events event) { if ((curr_state < 0) || (curr_state >=3D STATE_MAX)) return INVALID_STATE; @@ -87,3 +77,5 @@ static inline bool model_is_final_state(enum states state) =20 return RV_AUTOMATON_NAME.final_states[state]; } + +#endif diff --git a/include/rv/da_monitor.h b/include/rv/da_monitor.h index a4555dafa8d0..7b28ef9f73bd 100644 --- a/include/rv/da_monitor.h +++ b/include/rv/da_monitor.h @@ -11,6 +11,9 @@ * Documentation/trace/rv/da_monitor_synthesis.rst */ =20 +#ifndef _RV_DA_MONITOR_H +#define _RV_DA_MONITOR_H + #include #include #include @@ -19,12 +22,7 @@ =20 static struct rv_monitor rv_this; =20 -/* - * Generic helpers for all types of deterministic automata monitors. - */ -#define DECLARE_DA_MON_GENERIC_HELPERS(name, type) - -static void react(type curr_state, type event) +static void react(enum states curr_state, enum events event) { rv_react(&rv_this, "rv: monitor %s does not allow event %s on state %s\n", @@ -83,7 +81,6 @@ static inline bool da_monitor_enabled(void) */ static inline bool da_monitor_handling_event(struct da_monitor *da_mon) { - if (!da_monitor_enabled()) return 0; =20 @@ -94,6 +91,7 @@ static inline bool da_monitor_handling_event(struct da_mo= nitor *da_mon) return 1; } =20 +#if RV_MON_TYPE =3D=3D RV_MON_GLOBAL || RV_MON_TYPE =3D=3D RV_MON_PER_CPU /* * Event handler for implicit monitors. Implicit monitor is the one which = the * handler does not need to specify which da_monitor to manipulate. Exampl= es @@ -103,10 +101,8 @@ static inline bool da_monitor_handling_event(struct da= _monitor *da_mon) * warn and reset the monitor if it runs out of retries. The monitor shoul= d be * able to handle various orders. */ -#if RV_MON_TYPE =3D=3D RV_MON_GLOBAL || RV_MON_TYPE =3D=3D RV_MON_PER_CPU =20 -static inline bool -da_event(struct da_monitor *da_mon, enum events event) +static inline bool da_event(struct da_monitor *da_mon, enum events event) { enum states curr_state, next_state; =20 @@ -115,15 +111,17 @@ da_event(struct da_monitor *da_mon, enum events event) next_state =3D model_get_next_state(curr_state, event); if (next_state =3D=3D INVALID_STATE) { react(curr_state, event); - CONCATENATE(trace_error_, MONITOR_NAME)(model_get_state_name(curr_state= ), - model_get_event_name(event)); + CONCATENATE(trace_error_, MONITOR_NAME)( + model_get_state_name(curr_state), + model_get_event_name(event)); return false; } if (likely(try_cmpxchg(&da_mon->curr_state, &curr_state, next_state))) { - CONCATENATE(trace_event_, MONITOR_NAME)(model_get_state_name(curr_state= ), - model_get_event_name(event), - model_get_state_name(next_state), - model_is_final_state(next_state)); + CONCATENATE(trace_event_, MONITOR_NAME)( + model_get_state_name(curr_state), + model_get_event_name(event), + model_get_state_name(next_state), + model_is_final_state(next_state)); return true; } } @@ -135,6 +133,7 @@ da_event(struct da_monitor *da_mon, enum events event) return false; } =20 +#elif RV_MON_TYPE =3D=3D RV_MON_PER_TASK /* * Event handler for per_task monitors. * @@ -142,10 +141,9 @@ da_event(struct da_monitor *da_mon, enum events event) * warn and reset the monitor if it runs out of retries. The monitor shoul= d be * able to handle various orders. */ -#elif RV_MON_TYPE =3D=3D RV_MON_PER_TASK =20 static inline bool da_event(struct da_monitor *da_mon, struct task_struct = *tsk, - enum events event) + enum events event) { enum states curr_state, next_state; =20 @@ -155,16 +153,16 @@ static inline bool da_event(struct da_monitor *da_mon= , struct task_struct *tsk, if (next_state =3D=3D INVALID_STATE) { react(curr_state, event); CONCATENATE(trace_error_, MONITOR_NAME)(tsk->pid, - model_get_state_name(curr_state), - model_get_event_name(event)); + model_get_state_name(curr_state), + model_get_event_name(event)); return false; } if (likely(try_cmpxchg(&da_mon->curr_state, &curr_state, next_state))) { CONCATENATE(trace_event_, MONITOR_NAME)(tsk->pid, - model_get_state_name(curr_state), - model_get_event_name(event), - model_get_state_name(next_state), - model_is_final_state(next_state)); + model_get_state_name(curr_state), + model_get_event_name(event), + model_get_state_name(next_state), + model_is_final_state(next_state)); return true; } } @@ -175,12 +173,12 @@ static inline bool da_event(struct da_monitor *da_mon= , struct task_struct *tsk, model_get_event_name(event), __stringify(MONITOR_NAME)); return false; } -#endif +#endif /* RV_MON_TYPE */ =20 +#if RV_MON_TYPE =3D=3D RV_MON_GLOBAL /* * Functions to define, init and get a global monitor. */ -#if RV_MON_TYPE =3D=3D RV_MON_GLOBAL =20 /* * global monitor (a single variable) @@ -215,15 +213,12 @@ static inline int da_monitor_init(void) /* * da_monitor_destroy - destroy the monitor */ -static inline void da_monitor_destroy(void) -{ - return; -} +static inline void da_monitor_destroy(void) { } =20 +#elif RV_MON_TYPE =3D=3D RV_MON_PER_CPU /* * Functions to define, init and get a per-cpu monitor. */ -#elif RV_MON_TYPE =3D=3D RV_MON_PER_CPU =20 /* * per-cpu monitor variables @@ -245,6 +240,7 @@ static void da_monitor_reset_all(void) { struct da_monitor *da_mon; int cpu; + for_each_cpu(cpu, cpu_online_mask) { da_mon =3D per_cpu_ptr(&da_mon_this, cpu); da_monitor_reset(da_mon); @@ -263,15 +259,12 @@ static inline int da_monitor_init(void) /* * da_monitor_destroy - destroy the monitor */ -static inline void da_monitor_destroy(void) -{ - return; -} +static inline void da_monitor_destroy(void) { } =20 +#elif RV_MON_TYPE =3D=3D RV_MON_PER_TASK /* * Functions to define, init and get a per-task monitor. */ -#elif RV_MON_TYPE =3D=3D RV_MON_PER_TASK =20 /* * The per-task monitor is stored a vector in the task struct. This variab= le @@ -331,18 +324,17 @@ static inline void da_monitor_destroy(void) } rv_put_task_monitor_slot(task_mon_slot); task_mon_slot =3D RV_PER_TASK_MONITOR_INIT; - return; } -#endif +#endif /* RV_MON_TYPE */ =20 +#if RV_MON_TYPE =3D=3D RV_MON_GLOBAL || RV_MON_TYPE =3D=3D RV_MON_PER_CPU /* * Handle event for implicit monitor: da_get_monitor() will figure out * the monitor. */ -#if RV_MON_TYPE =3D=3D RV_MON_GLOBAL || RV_MON_TYPE =3D=3D RV_MON_PER_CPU =20 static inline void __da_handle_event(struct da_monitor *da_mon, - enum events event) + enum events event) { bool retval; =20 @@ -418,14 +410,13 @@ static inline bool da_handle_start_run_event(enum eve= nts event) return 1; } =20 +#elif RV_MON_TYPE =3D=3D RV_MON_PER_TASK /* * Handle event for per task. */ -#elif RV_MON_TYPE =3D=3D RV_MON_PER_TASK =20 -static inline void -__da_handle_event(struct da_monitor *da_mon, struct task_struct *tsk, - enum events event) +static inline void __da_handle_event(struct da_monitor *da_mon, + struct task_struct *tsk, enum events event) { bool retval; =20 @@ -437,8 +428,7 @@ __da_handle_event(struct da_monitor *da_mon, struct tas= k_struct *tsk, /* * da_handle_event - handle an event */ -static inline void -da_handle_event(struct task_struct *tsk, enum events event) +static inline void da_handle_event(struct task_struct *tsk, enum events ev= ent) { struct da_monitor *da_mon =3D da_get_monitor(tsk); bool retval; @@ -460,8 +450,8 @@ da_handle_event(struct task_struct *tsk, enum events ev= ent) * If the monitor already started, handle the event. * If the monitor did not start yet, start the monitor but skip the event. */ -static inline bool -da_handle_start_event(struct task_struct *tsk, enum events event) +static inline bool da_handle_start_event(struct task_struct *tsk, + enum events event) { struct da_monitor *da_mon; =20 @@ -486,8 +476,8 @@ da_handle_start_event(struct task_struct *tsk, enum eve= nts 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(struct task_struct *tsk, enum events event) +static inline bool da_handle_start_run_event(struct task_struct *tsk, + enum events event) { struct da_monitor *da_mon; =20 @@ -503,19 +493,6 @@ da_handle_start_run_event(struct task_struct *tsk, enu= m events event) =20 return 1; } -#endif +#endif /* RV_MON_TYPE */ =20 -/* - * Entry point for the global monitor. - */ -#define DECLARE_DA_MON_GLOBAL(name, type) - -/* - * Entry point for the per-cpu monitor. - */ -#define DECLARE_DA_MON_PER_CPU(name, type) - -/* - * Entry point for the per-task monitor. - */ -#define DECLARE_DA_MON_PER_TASK(name, type) +#endif --=20 2.51.1 From nobody Mon Dec 1 22:41:52 2025 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B4B4331B83B for ; Wed, 26 Nov 2025 10:43:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764153790; cv=none; b=gC8OBavCOgcgnZ7qEdlg7rLwtZ0rrFobvkb5fF6uAps7cytdMHDfLI1ATgiWXZsl6qBuwvxY28itEU+I8js+B2zAMLzUF22r/OxbI/86BudtSW9GMVpvrqZJyReSptscNNyiPl34ivZRiN/hodN0Ta02MpdQOws5aS39y2TjQ1g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764153790; c=relaxed/simple; bh=xzvgaU/jHkHNHoLV+AEnOOFCrbedfXH4Y/myMGNYhj0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hwPtV5WvXg10qgvvn6CbS/nQLtIb2mvIBm7QtUlWJK4Hn5pVxUGud8EFcfhNXaejNNEabKMKqYvXnbM3JZ74u1xCArdvCG7JDIgTdS1LyKm1sdIIiH7PiVabYzuIfIJ/ib+MyA7+Y8QU6UUFU3Z4TyYwz6EztZFu/MUNxu4teHo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=bweTMHBT; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="bweTMHBT" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1764153787; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=9JHlfLXvHQ/f3tSlurs7sciQCZwBwOndT3yQiCDkBXY=; b=bweTMHBTw4T4h6sUSaO7wMJ4QPaOR2Lu21nwSgn7pEg4M7IETwj+MPCPLR6k2SlqUehV/P HEWQrPEuo/BsXjUmCDBlson7RB6pkuET9up17nQAvq4AYy9PNa+ZVj4uExh4e0paaK4x+E bjCtAguWcvYJ5KBD6+05+8xBGUxNWRY= Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-256-gk_pSRvSOMqufiCybJnFbA-1; Wed, 26 Nov 2025 05:43:03 -0500 X-MC-Unique: gk_pSRvSOMqufiCybJnFbA-1 X-Mimecast-MFC-AGG-ID: gk_pSRvSOMqufiCybJnFbA_1764153782 Received: from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.93]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 077751800358; Wed, 26 Nov 2025 10:43:02 +0000 (UTC) Received: from gmonaco-thinkpadt14gen3.rmtit.csb (unknown [10.45.226.131]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id EC42218004A3; Wed, 26 Nov 2025 10:42:58 +0000 (UTC) From: Gabriele Monaco To: linux-kernel@vger.kernel.org, Steven Rostedt , Nam Cao , Gabriele Monaco , Jonathan Corbet , linux-trace-kernel@vger.kernel.org, linux-doc@vger.kernel.org Cc: =?UTF-8?q?Thomas=20Wei=C3=9Fschuh?= Subject: [PATCH 3/8] Documentation/rv: Adapt documentation after da_monitor refactoring Date: Wed, 26 Nov 2025 11:42:34 +0100 Message-ID: <20251126104241.291258-4-gmonaco@redhat.com> In-Reply-To: <20251126104241.291258-1-gmonaco@redhat.com> References: <20251126104241.291258-1-gmonaco@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.93 Content-Type: text/plain; charset="utf-8" Previous changes refactored the da_monitor header file to avoid using macros. This implies a few changes in how to import and use da_monitor helpers: DECLARE_DA_MON_(name, type) is substituted by #define RV_MON_TYPE RV_MON_ da_handle_event_() is substituted by da_handle_event() Update the documentation to reflect the changes. Reviewed-by: Nam Cao Signed-off-by: Gabriele Monaco --- Documentation/trace/rv/monitor_synthesis.rst | 44 ++++++++++---------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/Documentation/trace/rv/monitor_synthesis.rst b/Documentation/t= race/rv/monitor_synthesis.rst index 3a7d7b2f6cb6..cc5f97977a29 100644 --- a/Documentation/trace/rv/monitor_synthesis.rst +++ b/Documentation/trace/rv/monitor_synthesis.rst @@ -100,54 +100,52 @@ rv/da_monitor.h =20 This initial implementation presents three different types of monitor inst= ances: =20 -- ``#define DECLARE_DA_MON_GLOBAL(name, type)`` -- ``#define DECLARE_DA_MON_PER_CPU(name, type)`` -- ``#define DECLARE_DA_MON_PER_TASK(name, type)`` +- ``#define RV_MON_TYPE RV_MON_GLOBAL`` +- ``#define RV_MON_TYPE RV_MON_PER_CPU`` +- ``#define RV_MON_TYPE RV_MON_PER_TASK`` =20 -The first declares the functions for a global deterministic automata monit= or, -the second for monitors with per-cpu instances, and the third with per-task -instances. +The first sets up functions declaration for a global deterministic automata +monitor, the second for monitors with per-cpu instances, and the third with +per-task instances. =20 -In all cases, the 'name' argument is a string that identifies the monitor,= and -the 'type' argument is the data type used by rvgen on the representation of -the model in C. +In all cases, the C file must include the $(MODEL_NAME).h file (generated = by +`rvgen`), for example, to define the per-cpu 'wip' monitor, the `wip.c` so= urce +file must include:: =20 -For example, the wip model with two states and three events can be -stored in an 'unsigned char' type. Considering that the preemption control -is a per-cpu behavior, the monitor declaration in the 'wip.c' file is:: - - DECLARE_DA_MON_PER_CPU(wip, unsigned char); + #define RV_MON_TYPE RV_MON_PER_CPU + #include "wip.h" + #include =20 The monitor is executed by sending events to be processed via the functions presented below:: =20 - da_handle_event_$(MONITOR_NAME)($(event from event enum)); - da_handle_start_event_$(MONITOR_NAME)($(event from event enum)); - da_handle_start_run_event_$(MONITOR_NAME)($(event from event enum)); + da_handle_event($(event from event enum)); + da_handle_start_event($(event from event enum)); + da_handle_start_run_event($(event from event enum)); =20 -The function ``da_handle_event_$(MONITOR_NAME)()`` is the regular case whe= re +The function ``da_handle_event()`` is the regular case where the event will be processed if the monitor is processing events. =20 When a monitor is enabled, it is placed in the initial state of the automa= ta. However, the monitor does not know if the system is in the *initial state*. =20 -The ``da_handle_start_event_$(MONITOR_NAME)()`` function is used to notify= the +The ``da_handle_start_event()`` function is used to notify the monitor that the system is returning to the initial state, so the monitor = can start monitoring the next event. =20 -The ``da_handle_start_run_event_$(MONITOR_NAME)()`` function is used to no= tify +The ``da_handle_start_run_event()`` function is used to notify the monitor that the system is known to be in the initial state, so the monitor can start monitoring and monitor the current event. =20 Using the wip model as example, the events "preempt_disable" and "sched_waking" should be sent to monitor, respectively, via [2]:: =20 - da_handle_event_wip(preempt_disable_wip); - da_handle_event_wip(sched_waking_wip); + da_handle_event(preempt_disable_wip); + da_handle_event(sched_waking_wip); =20 While the event "preempt_enabled" will use:: =20 - da_handle_start_event_wip(preempt_enable_wip); + da_handle_start_event(preempt_enable_wip); =20 To notify the monitor that the system will be returning to the initial sta= te, so the system and the monitor should be in sync. --=20 2.51.1 From nobody Mon Dec 1 22:41:52 2025 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 769FE31D399 for ; Wed, 26 Nov 2025 10:43:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764153791; cv=none; b=qJnTAAY3ckJutS95Z8WDQY1+gnoENoxMdfNxN9zmtCAI1Ov+5XScwynSHJO/BClfPWp7TgAsl4FU1OYFQ4QWXI5k7+YHNhaK4P3rINgqRply7HzTFbkXr/Q/Tj/T9XAI2ka7vljKFfdyWraF0dxcb5YSuqYQAs7N6p5hv+2Jm9Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764153791; c=relaxed/simple; bh=/UDn/5W83lvFD9h5OF95CDwRpH09gcN0aa8tdQ3XRJg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=eaovhDJPhFMpZwLUa47hVni3qJPS8mOB4pkcWb0G/u9eDbHzSnX9gnlDKcJp3ydzb21ahtLnhmx/3ifUoS+/dGIHK+HyAsA0czNS13r7YHUAoVMNfuqy13rXLEsYfmfcK5g6cGkcqYG4WaeKpt4uPsXOWHr0NjPiTvahHmXwP+g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=Nql0l1XQ; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Nql0l1XQ" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1764153788; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=6bTjsWcAgyFzINUHOD7EuUUEsT8+XkRCCX/wli3bZHI=; b=Nql0l1XQK9KUyVH/qqQc8M6ygMGcSYdX4P84nN/mzvePAcdUGY7EJ1n+nGIAWlIt3mFCrE cC1KT+Ol+ep3c2tPemRDQSIP2JYDOTYl+OVWhop/PlX8yaEmVU7Y8e5sUBKjXoYhGyLdHv BUqaqHOb/SrA6sycBJwgCf0CXj6SkJ8= Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-675-_i5J454BO4i0RBTs4RSNfg-1; Wed, 26 Nov 2025 05:43:06 -0500 X-MC-Unique: _i5J454BO4i0RBTs4RSNfg-1 X-Mimecast-MFC-AGG-ID: _i5J454BO4i0RBTs4RSNfg_1764153785 Received: from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.93]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id B81EE18002C5; Wed, 26 Nov 2025 10:43:05 +0000 (UTC) Received: from gmonaco-thinkpadt14gen3.rmtit.csb (unknown [10.45.226.131]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 41BC51800298; Wed, 26 Nov 2025 10:43:02 +0000 (UTC) From: Gabriele Monaco To: linux-kernel@vger.kernel.org, Steven Rostedt , Nam Cao , Gabriele Monaco , linux-trace-kernel@vger.kernel.org Cc: =?UTF-8?q?Thomas=20Wei=C3=9Fschuh?= Subject: [PATCH 4/8] verification/rvgen: Adapt dot2k and templates after refactoring da_monitor.h Date: Wed, 26 Nov 2025 11:42:35 +0100 Message-ID: <20251126104241.291258-5-gmonaco@redhat.com> In-Reply-To: <20251126104241.291258-1-gmonaco@redhat.com> References: <20251126104241.291258-1-gmonaco@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.93 Content-Type: text/plain; charset="utf-8" Previous changes refactored the da_monitor header file to avoid using macros. This implies a few changes in how to import and use da_monitor helpers: DECLARE_DA_MON_(name, type) is substituted by #define RV_MON_TYPE RV_MON_ Update the rvgen templates to reflect the changes. Reviewed-by: Nam Cao Signed-off-by: Gabriele Monaco --- tools/verification/rvgen/rvgen/dot2k.py | 6 +++-- .../rvgen/rvgen/templates/dot2k/main.c | 25 +++++++------------ 2 files changed, 13 insertions(+), 18 deletions(-) diff --git a/tools/verification/rvgen/rvgen/dot2k.py b/tools/verification/r= vgen/rvgen/dot2k.py index ed0a3c901106..d618a842fc52 100644 --- a/tools/verification/rvgen/rvgen/dot2k.py +++ b/tools/verification/rvgen/rvgen/dot2k.py @@ -38,9 +38,9 @@ class dot2k(Monitor, Dot2c): handle =3D "handle_start_run_event" if self.monitor_type =3D=3D "per_task": buff.append("\tstruct task_struct *p =3D /* XXX: how do I = get p? */;"); - buff.append("\tda_%s_%s(p, %s%s);" % (handle, self.name, e= vent, self.enum_suffix)); + buff.append("\tda_%s(p, %s%s);" % (handle, event, self.enu= m_suffix)); else: - buff.append("\tda_%s_%s(%s%s);" % (handle, self.name, even= t, self.enum_suffix)); + buff.append("\tda_%s(%s%s);" % (handle, event, self.enum_s= uffix)); buff.append("}") buff.append("") return '\n'.join(buff) @@ -66,6 +66,8 @@ class dot2k(Monitor, Dot2c): buff.append(" * Documentation/trace/rv/deterministic_automata.rs= t") buff.append(" */") buff.append("") + buff.append("#define MONITOR_NAME %s" % (self.name)) + buff.append("") =20 return buff =20 diff --git a/tools/verification/rvgen/rvgen/templates/dot2k/main.c b/tools/= verification/rvgen/rvgen/templates/dot2k/main.c index e0fd1134bd85..a14e4f0883db 100644 --- a/tools/verification/rvgen/rvgen/templates/dot2k/main.c +++ b/tools/verification/rvgen/rvgen/templates/dot2k/main.c @@ -6,7 +6,6 @@ #include #include #include -#include =20 #define MODULE_NAME "%%MODEL_NAME%%" =20 @@ -20,15 +19,9 @@ * This is the self-generated part of the monitor. Generally, there is no = need * to touch this section. */ +#define RV_MON_TYPE RV_MON_%%MONITOR_TYPE%% #include "%%MODEL_NAME%%.h" - -/* - * Declare the deterministic automata monitor. - * - * The rv monitor reference is needed for the monitor declaration. - */ -static struct rv_monitor rv_%%MODEL_NAME%%; -DECLARE_DA_MON_%%MONITOR_TYPE%%(%%MODEL_NAME%%, %%MIN_TYPE%%); +#include =20 /* * This is the instrumentation part of the monitor. @@ -42,7 +35,7 @@ static int enable_%%MODEL_NAME%%(void) { int retval; =20 - retval =3D da_monitor_init_%%MODEL_NAME%%(); + retval =3D da_monitor_init(); if (retval) return retval; =20 @@ -53,33 +46,33 @@ static int enable_%%MODEL_NAME%%(void) =20 static void disable_%%MODEL_NAME%%(void) { - rv_%%MODEL_NAME%%.enabled =3D 0; + rv_this.enabled =3D 0; =20 %%TRACEPOINT_DETACH%% =20 - da_monitor_destroy_%%MODEL_NAME%%(); + da_monitor_destroy(); } =20 /* * This is the monitor register section. */ -static struct rv_monitor rv_%%MODEL_NAME%% =3D { +static struct rv_monitor rv_this =3D { .name =3D "%%MODEL_NAME%%", .description =3D "%%DESCRIPTION%%", .enable =3D enable_%%MODEL_NAME%%, .disable =3D disable_%%MODEL_NAME%%, - .reset =3D da_monitor_reset_all_%%MODEL_NAME%%, + .reset =3D da_monitor_reset_all, .enabled =3D 0, }; =20 static int __init register_%%MODEL_NAME%%(void) { - return rv_register_monitor(&rv_%%MODEL_NAME%%, %%PARENT%%); + return rv_register_monitor(&rv_this, %%PARENT%%); } =20 static void __exit unregister_%%MODEL_NAME%%(void) { - rv_unregister_monitor(&rv_%%MODEL_NAME%%); + rv_unregister_monitor(&rv_this); } =20 module_init(register_%%MODEL_NAME%%); --=20 2.51.1 From nobody Mon Dec 1 22:41:52 2025 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BDBFF28B3E7 for ; Wed, 26 Nov 2025 10:43:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764153799; cv=none; b=ja3RNYfuQFD/MapVsH5J/wMnUXSprvNd+lryQAmYWy9vceq1arB9E/92MvQr62VQzgJfBZ25RArVP+/nU92wjxEjcHPw8oY+W2jb0BJ5HNIsiCBLgtHCywjw6r/wzrLCgBIsv1nD16H2tpYEpf1di8LLkvvksJQ9PyC4LmT0YEw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764153799; c=relaxed/simple; bh=DdXewirAc9M8rmpcGepCzdvXP7IKip3daAJ87dqAEXg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=FbrlV2VXAGiHEiNEzO3oX1NarjZmty9EHz3r0k3SbdA1DUi49hgnnh7cO0+HoG9YZkmENfDR9NfUJvFm6xBjKlxz2fCucULhhKY9czKqwDSgDoYTCbT4OlB8J3eBEOWYs7eiXcp2cz2VyyuKL8vYTfM0x42M4BMjhTP4L6qgyMk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=JtBzE9Of; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="JtBzE9Of" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1764153794; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=OZDio91owcywlxv6gs9ldQWtqoH4+TUmYBVZ1En8FXU=; b=JtBzE9OftyNYugea061jg26HN5R+KU/QTJuk3d11PirrwWSWk0AavqMYMvDlnktegWkGUv R3IvbVUqQVR06mzxWXuF8aPlJB/qGk5bJa+V+PkBt0L94mJe6rd4NJwou+VIpk5l8avMWf ngJlohNNZbdEFyXPJU9eHP5H696fa54= Received: from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-231-k9xCuNyqMfelZW4fNP02eg-1; Wed, 26 Nov 2025 05:43:10 -0500 X-MC-Unique: k9xCuNyqMfelZW4fNP02eg-1 X-Mimecast-MFC-AGG-ID: k9xCuNyqMfelZW4fNP02eg_1764153789 Received: from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.93]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 83EF91956063; Wed, 26 Nov 2025 10:43:09 +0000 (UTC) Received: from gmonaco-thinkpadt14gen3.rmtit.csb (unknown [10.45.226.131]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 02DC01800451; Wed, 26 Nov 2025 10:43:06 +0000 (UTC) From: Gabriele Monaco To: linux-kernel@vger.kernel.org, Steven Rostedt , Nam Cao , Gabriele Monaco , linux-trace-kernel@vger.kernel.org Cc: =?UTF-8?q?Thomas=20Wei=C3=9Fschuh?= Subject: [PATCH 5/8] verification/rvgen: Annotate DA functions with types Date: Wed, 26 Nov 2025 11:42:36 +0100 Message-ID: <20251126104241.291258-6-gmonaco@redhat.com> In-Reply-To: <20251126104241.291258-1-gmonaco@redhat.com> References: <20251126104241.291258-1-gmonaco@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.93 Content-Type: text/plain; charset="utf-8" Functions in automata.py, dot2c.py and dot2k.py don't have type annotations and it can get complicated to remember how to use them. Add minimal type annotations. Reviewed-by: Nam Cao Signed-off-by: Gabriele Monaco --- tools/verification/rvgen/rvgen/automata.py | 20 +++++------ tools/verification/rvgen/rvgen/dot2c.py | 42 +++++++++++----------- tools/verification/rvgen/rvgen/dot2k.py | 20 +++++------ 3 files changed, 41 insertions(+), 41 deletions(-) diff --git a/tools/verification/rvgen/rvgen/automata.py b/tools/verificatio= n/rvgen/rvgen/automata.py index d9a3fe2b74bf..3f06aef8d4fd 100644 --- a/tools/verification/rvgen/rvgen/automata.py +++ b/tools/verification/rvgen/rvgen/automata.py @@ -28,7 +28,7 @@ class Automata: self.function =3D self.__create_matrix() self.events_start, self.events_start_run =3D self.__store_init_eve= nts() =20 - def __get_model_name(self): + def __get_model_name(self) -> str: basename =3D ntpath.basename(self.__dot_path) if not basename.endswith(".dot") and not basename.endswith(".gv"): print("not a dot file") @@ -40,7 +40,7 @@ class Automata: =20 return model_name =20 - def __open_dot(self): + def __open_dot(self) -> list[str]: cursor =3D 0 dot_lines =3D [] try: @@ -60,13 +60,13 @@ class Automata: cursor +=3D 1 return dot_lines =20 - def __get_cursor_begin_states(self): + def __get_cursor_begin_states(self) -> int: cursor =3D 0 while self.__dot_lines[cursor].split()[0] !=3D "{node": cursor +=3D 1 return cursor =20 - def __get_cursor_begin_events(self): + def __get_cursor_begin_events(self) -> int: cursor =3D 0 while self.__dot_lines[cursor].split()[0] !=3D "{node": cursor +=3D 1 @@ -76,7 +76,7 @@ class Automata: cursor +=3D 1 return cursor =20 - def __get_state_variables(self): + def __get_state_variables(self) -> tuple[list[str], str, list[str]]: # wait for node declaration states =3D [] final_states =3D [] @@ -116,7 +116,7 @@ class Automata: =20 return states, initial_state, final_states =20 - def __get_event_variables(self): + def __get_event_variables(self) -> list[str]: # here we are at the begin of transitions, take a note, we will re= turn later. cursor =3D self.__get_cursor_begin_events() =20 @@ -140,7 +140,7 @@ class Automata: =20 return sorted(set(events)) =20 - def __create_matrix(self): + def __create_matrix(self) -> list[list[str]]: # transform the array into a dictionary events =3D self.events states =3D self.states @@ -174,7 +174,7 @@ class Automata: =20 return matrix =20 - def __store_init_events(self): + def __store_init_events(self) -> tuple[list[bool], list[bool]]: events_start =3D [False] * len(self.events) events_start_run =3D [False] * len(self.events) for i, _ in enumerate(self.events): @@ -196,10 +196,10 @@ class Automata: events_start_run[i] =3D True return events_start, events_start_run =20 - def is_start_event(self, event): + def is_start_event(self, event: str) -> bool: return self.events_start[self.events.index(event)] =20 - def is_start_run_event(self, event): + def is_start_run_event(self, event: str) -> bool: # prefer handle_start_event if there if any(self.events_start): return False diff --git a/tools/verification/rvgen/rvgen/dot2c.py b/tools/verification/r= vgen/rvgen/dot2c.py index b9b6f14cc536..fd64174fcfad 100644 --- a/tools/verification/rvgen/rvgen/dot2c.py +++ b/tools/verification/rvgen/rvgen/dot2c.py @@ -35,7 +35,7 @@ class Dot2c(Automata): # cut off the last \n return string[:-1] =20 - def __get_enum_states_content(self): + def __get_enum_states_content(self) -> list[str]: buff =3D [] buff.append("\t%s%s =3D 0," % (self.initial_state, self.enum_suffi= x)) for state in self.states: @@ -49,7 +49,7 @@ class Dot2c(Automata): buff =3D self.__get_enum_states_content() return self.__buff_to_string(buff) =20 - def format_states_enum(self): + def format_states_enum(self) -> list[str]: buff =3D [] buff.append("enum %s {" % self.enum_states_def) buff.append(self.get_enum_states_string()) @@ -57,7 +57,7 @@ class Dot2c(Automata): =20 return buff =20 - def __get_enum_events_content(self): + def __get_enum_events_content(self) -> list[str]: buff =3D [] first =3D True for event in self.events: @@ -75,7 +75,7 @@ class Dot2c(Automata): buff =3D self.__get_enum_events_content() return self.__buff_to_string(buff) =20 - def format_events_enum(self): + def format_events_enum(self) -> list[str]: buff =3D [] buff.append("enum %s {" % self.enum_events_def) buff.append(self.get_enum_events_string()) @@ -83,7 +83,7 @@ class Dot2c(Automata): =20 return buff =20 - def get_minimun_type(self): + def get_minimun_type(self) -> str: min_type =3D "unsigned char" =20 if self.states.__len__() > 255: @@ -97,7 +97,7 @@ class Dot2c(Automata): =20 return min_type =20 - def format_automaton_definition(self): + def format_automaton_definition(self) -> list[str]: min_type =3D self.get_minimun_type() buff =3D [] buff.append("struct %s {" % self.struct_automaton_def) @@ -109,12 +109,12 @@ class Dot2c(Automata): buff.append("};\n") return buff =20 - def format_aut_init_header(self): + def format_aut_init_header(self) -> list[str]: buff =3D [] buff.append("static const struct %s %s =3D {" % (self.struct_autom= aton_def, self.var_automaton_def)) return buff =20 - def __get_string_vector_per_line_content(self, buff): + def __get_string_vector_per_line_content(self, buff: list[str]) -> str: first =3D True string =3D "" for entry in buff: @@ -133,14 +133,14 @@ class Dot2c(Automata): def get_aut_init_states_string(self): return self.__get_string_vector_per_line_content(self.states) =20 - def format_aut_init_events_string(self): + def format_aut_init_events_string(self) -> list[str]: buff =3D [] buff.append("\t.event_names =3D {") buff.append(self.get_aut_init_events_string()) buff.append("\t},") return buff =20 - def format_aut_init_states_string(self): + def format_aut_init_states_string(self) -> list[str]: buff =3D [] buff.append("\t.state_names =3D {") buff.append(self.get_aut_init_states_string()) @@ -148,11 +148,11 @@ class Dot2c(Automata): =20 return buff =20 - def __get_max_strlen_of_states(self): + def __get_max_strlen_of_states(self) -> int: max_state_name =3D max(self.states, key =3D len).__len__() return max(max_state_name, self.invalid_state_str.__len__()) =20 - def get_aut_init_function(self): + def get_aut_init_function(self) -> str: nr_states =3D self.states.__len__() nr_events =3D self.events.__len__() buff =3D [] @@ -180,7 +180,7 @@ class Dot2c(Automata): =20 return self.__buff_to_string(buff) =20 - def format_aut_init_function(self): + def format_aut_init_function(self) -> list[str]: buff =3D [] buff.append("\t.function =3D {") buff.append(self.get_aut_init_function()) @@ -188,17 +188,17 @@ class Dot2c(Automata): =20 return buff =20 - def get_aut_init_initial_state(self): + def get_aut_init_initial_state(self) -> str: return self.initial_state =20 - def format_aut_init_initial_state(self): + def format_aut_init_initial_state(self) -> list[str]: buff =3D [] initial_state =3D self.get_aut_init_initial_state() buff.append("\t.initial_state =3D " + initial_state + self.enum_su= ffix + ",") =20 return buff =20 - def get_aut_init_final_states(self): + def get_aut_init_final_states(self) -> str: line =3D "" first =3D True for state in self.states: @@ -213,29 +213,29 @@ class Dot2c(Automata): line =3D line + '0' return line =20 - def format_aut_init_final_states(self): + def format_aut_init_final_states(self) -> list[str]: buff =3D [] buff.append("\t.final_states =3D { %s }," % self.get_aut_init_final= _states()) =20 return buff =20 - def __get_automaton_initialization_footer_string(self): + def __get_automaton_initialization_footer_string(self) -> str: footer =3D "};\n" return footer =20 - def format_aut_init_footer(self): + def format_aut_init_footer(self) -> list[str]: buff =3D [] buff.append(self.__get_automaton_initialization_footer_string()) =20 return buff =20 - def format_invalid_state(self): + def format_invalid_state(self) -> list[str]: buff =3D [] buff.append("#define %s state_max%s\n" % (self.invalid_state_str, = self.enum_suffix)) =20 return buff =20 - def format_model(self): + def format_model(self) -> list[str]: buff =3D [] buff +=3D self.format_states_enum() buff +=3D self.format_invalid_state() diff --git a/tools/verification/rvgen/rvgen/dot2k.py b/tools/verification/r= vgen/rvgen/dot2k.py index d618a842fc52..6128fe238430 100644 --- a/tools/verification/rvgen/rvgen/dot2k.py +++ b/tools/verification/rvgen/rvgen/dot2k.py @@ -21,10 +21,10 @@ class dot2k(Monitor, Dot2c): Dot2c.__init__(self, file_path, extra_params.get("model_name")) self.enum_suffix =3D "_%s" % self.name =20 - def fill_monitor_type(self): + def fill_monitor_type(self) -> str: return self.monitor_type.upper() =20 - def fill_tracepoint_handlers_skel(self): + def fill_tracepoint_handlers_skel(self) -> str: buff =3D [] for event in self.events: buff.append("static void handle_%s(void *data, /* XXX: fill he= ader */)" % event) @@ -45,19 +45,19 @@ class dot2k(Monitor, Dot2c): buff.append("") return '\n'.join(buff) =20 - def fill_tracepoint_attach_probe(self): + def fill_tracepoint_attach_probe(self) -> str: buff =3D [] for event in self.events: buff.append("\trv_attach_trace_probe(\"%s\", /* XXX: tracepoin= t */, handle_%s);" % (self.name, event)) return '\n'.join(buff) =20 - def fill_tracepoint_detach_helper(self): + def fill_tracepoint_detach_helper(self) -> str: buff =3D [] for event in self.events: buff.append("\trv_detach_trace_probe(\"%s\", /* XXX: tracepoin= t */, handle_%s);" % (self.name, event)) return '\n'.join(buff) =20 - def fill_model_h_header(self): + def fill_model_h_header(self) -> list[str]: buff =3D [] buff.append("/* SPDX-License-Identifier: GPL-2.0 */") buff.append("/*") @@ -71,7 +71,7 @@ class dot2k(Monitor, Dot2c): =20 return buff =20 - def fill_model_h(self): + def fill_model_h(self) -> str: # # Adjust the definition names # @@ -85,17 +85,17 @@ class dot2k(Monitor, Dot2c): =20 return '\n'.join(buff) =20 - def fill_monitor_class_type(self): + def fill_monitor_class_type(self) -> str: if self.monitor_type =3D=3D "per_task": return "DA_MON_EVENTS_ID" return "DA_MON_EVENTS_IMPLICIT" =20 - def fill_monitor_class(self): + def fill_monitor_class(self) -> str: if self.monitor_type =3D=3D "per_task": return "da_monitor_id" return "da_monitor" =20 - def fill_tracepoint_args_skel(self, tp_type): + def fill_tracepoint_args_skel(self, tp_type: str) -> str: buff =3D [] tp_args_event =3D [ ("char *", "state"), @@ -117,7 +117,7 @@ class dot2k(Monitor, Dot2c): buff.append(" TP_ARGS(%s)" % tp_args_c) return '\n'.join(buff) =20 - def fill_main_c(self): + def fill_main_c(self) -> str: main_c =3D super().fill_main_c() =20 min_type =3D self.get_minimun_type() --=20 2.51.1 From nobody Mon Dec 1 22:41:52 2025 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7FDA531ED88 for ; Wed, 26 Nov 2025 10:43:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764153798; cv=none; b=QRJbQbA6a5GLhJXKDks1I2+8aVpAddrr+/jhWmiQBvVd/he57CDqNSkSlNTPmurZCT9pXUuW/5RYMHjktSm6iNmDQYDRhr16sXqzCbFaOiJ0bIG/EaakhS0EAJd04Rxwo4TFLUmkgIVYA5OGzMy8rBgXHHDrDdOBnGZz6cXa3i8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764153798; c=relaxed/simple; bh=GXJ1rwuIhRplydan4OKQf0Ax7rBALdKSap8mSjmJoJ8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=r+zLhumRUYyaHlS+9TQ6gfBeXD0DFx9W3rJt1m0cw5GpftPCFayw0nbOljp13Sg62NHPKY39NtNO9Z9FeTGy57MWCaR+sNw+HMU18o6Dj9/fzzSKyOPsmsE1E5y5C3KowO6LWUn+WaScfR4Gz9U9KVizN+zBpeXWtDWuo3b4lgc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=Ui0sLHIa; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Ui0sLHIa" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1764153795; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=0yifEd5HDDiuA0nLbLqpegEzOrrP2cY77oVrIqLxs18=; b=Ui0sLHIaZEUbhTJtYzafPfMoGa4pP+zs7+HV6Jfu1F9OLZ7BhM7sj0Ip5AK0RWKLf18+nM mfH/6Ial1papzCrWv1CJuIueDWmaOjxktYYV3tR0hGyVpEXF7lnDf2CKdygUTyiyD+q+xy J0De2ql49V/SrUubCj+uPYAoa/wTBkw= Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-568-X0BcpMtoNZC3PlLDfX2KmA-1; Wed, 26 Nov 2025 05:43:14 -0500 X-MC-Unique: X0BcpMtoNZC3PlLDfX2KmA-1 X-Mimecast-MFC-AGG-ID: X0BcpMtoNZC3PlLDfX2KmA_1764153793 Received: from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.93]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 05CD71956095; Wed, 26 Nov 2025 10:43:13 +0000 (UTC) Received: from gmonaco-thinkpadt14gen3.rmtit.csb (unknown [10.45.226.131]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 82F5A1800451; Wed, 26 Nov 2025 10:43:10 +0000 (UTC) From: Gabriele Monaco To: linux-kernel@vger.kernel.org, Steven Rostedt , Nam Cao , Gabriele Monaco , linux-trace-kernel@vger.kernel.org Cc: =?UTF-8?q?Thomas=20Wei=C3=9Fschuh?= Subject: [PATCH 6/8] verification/dot2c: Remove __buff_to_string() and cleanup Date: Wed, 26 Nov 2025 11:42:37 +0100 Message-ID: <20251126104241.291258-7-gmonaco@redhat.com> In-Reply-To: <20251126104241.291258-1-gmonaco@redhat.com> References: <20251126104241.291258-1-gmonaco@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.93 Content-Type: text/plain; charset="utf-8" str.join() can do what __buff_to_string() does. Therefore replace __buff_to_string() to make the scripts more pythonic. Also clean and remove some intermediate functions. Reviewed-by: Nam Cao Signed-off-by: Gabriele Monaco --- tools/verification/rvgen/rvgen/dot2c.py | 35 +++++-------------------- 1 file changed, 6 insertions(+), 29 deletions(-) diff --git a/tools/verification/rvgen/rvgen/dot2c.py b/tools/verification/r= vgen/rvgen/dot2c.py index fd64174fcfad..24894411c3cd 100644 --- a/tools/verification/rvgen/rvgen/dot2c.py +++ b/tools/verification/rvgen/rvgen/dot2c.py @@ -26,15 +26,6 @@ class Dot2c(Automata): super().__init__(file_path, model_name) self.line_length =3D 100 =20 - def __buff_to_string(self, buff): - string =3D "" - - for line in buff: - string =3D string + line + "\n" - - # cut off the last \n - return string[:-1] - def __get_enum_states_content(self) -> list[str]: buff =3D [] buff.append("\t%s%s =3D 0," % (self.initial_state, self.enum_suffi= x)) @@ -45,14 +36,10 @@ class Dot2c(Automata): =20 return buff =20 - def get_enum_states_string(self): - buff =3D self.__get_enum_states_content() - return self.__buff_to_string(buff) - def format_states_enum(self) -> list[str]: buff =3D [] buff.append("enum %s {" % self.enum_states_def) - buff.append(self.get_enum_states_string()) + buff +=3D self.__get_enum_states_content() buff.append("};\n") =20 return buff @@ -71,14 +58,10 @@ class Dot2c(Automata): =20 return buff =20 - def get_enum_events_string(self): - buff =3D self.__get_enum_events_content() - return self.__buff_to_string(buff) - def format_events_enum(self) -> list[str]: buff =3D [] buff.append("enum %s {" % self.enum_events_def) - buff.append(self.get_enum_events_string()) + buff +=3D self.__get_enum_events_content() buff.append("};\n") =20 return buff @@ -127,23 +110,17 @@ class Dot2c(Automata): =20 return string =20 - def get_aut_init_events_string(self): - return self.__get_string_vector_per_line_content(self.events) - - def get_aut_init_states_string(self): - return self.__get_string_vector_per_line_content(self.states) - def format_aut_init_events_string(self) -> list[str]: buff =3D [] buff.append("\t.event_names =3D {") - buff.append(self.get_aut_init_events_string()) + buff.append(self.__get_string_vector_per_line_content(self.events)) buff.append("\t},") return buff =20 def format_aut_init_states_string(self) -> list[str]: buff =3D [] buff.append("\t.state_names =3D {") - buff.append(self.get_aut_init_states_string()) + buff.append(self.__get_string_vector_per_line_content(self.states)) buff.append("\t},") =20 return buff @@ -178,7 +155,7 @@ class Dot2c(Automata): line +=3D "\n\t\t}," if linetoolong else " }," buff.append(line) =20 - return self.__buff_to_string(buff) + return '\n'.join(buff) =20 def format_aut_init_function(self) -> list[str]: buff =3D [] @@ -253,4 +230,4 @@ class Dot2c(Automata): =20 def print_model_classic(self): buff =3D self.format_model() - print(self.__buff_to_string(buff)) + print('\n'.join(buff)) --=20 2.51.1 From nobody Mon Dec 1 22:41:52 2025 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EFF9431CA72 for ; Wed, 26 Nov 2025 10:43:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764153804; cv=none; b=sQil7dmBOGDhCKrhjng9ZF7+eAqKM7BPPpd9X3PgPGaF7S//+Ss1baNRdpd125avgkNPTsUL/N8xBuhr/ttyLxLMwtlcX1zU0DEsC21l0gcVLjSuM8zL8NgdwPO5uPqXfr49hwN2n9EH8jMtjIhh49rKlLpN6/aBzNJLwpn9LBo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764153804; c=relaxed/simple; bh=5D7FNXR+X6in3Nnsoe9+4cj2xDaPuXzyqxsimKAT1tw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JY6gm5vsc4faY2Fhw3J2MlrCotm43EULfUzcHqdXzZejQOmxWBrWoIFZJtdyuAf11rz3vBeSJKW5kzGEdinOtFpwRZ4XTimL3TOSpyHlZ/XXiRkPwYrfXEkRPQNL+zHMDSs6dFBFHPn5MtKhIsnMY3OjFA9KCnVXJYGQPO6HbUM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=bT1dHhqE; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="bT1dHhqE" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1764153801; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=isKlHQ3Fg2P4RjvhJNrQ1bcKfGXGxj/S4v0QnTh3zu8=; b=bT1dHhqEV1vtWKe5zwbdNpWC03vfWWaaflJezHtN7H+eKM/0zNnJDGFKsoANiqpM/pstCz 8Ebg5O1MCqAeJRUvwWNBsG1mrgEJmVi7QvoYmJkpuADKwtXseLo0/qXajyowTenGXlQQYe 5nvhKw8m7pUjMnGZXLyZTNZs8mBmp7Q= Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-634-qFX6EiF9Oou0kkFATql8SQ-1; Wed, 26 Nov 2025 05:43:19 -0500 X-MC-Unique: qFX6EiF9Oou0kkFATql8SQ-1 X-Mimecast-MFC-AGG-ID: qFX6EiF9Oou0kkFATql8SQ_1764153798 Received: from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.93]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 555C01800107; Wed, 26 Nov 2025 10:43:18 +0000 (UTC) Received: from gmonaco-thinkpadt14gen3.rmtit.csb (unknown [10.45.226.131]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 87C8618004A3; Wed, 26 Nov 2025 10:43:15 +0000 (UTC) From: Gabriele Monaco To: linux-kernel@vger.kernel.org, Steven Rostedt , Nam Cao , Gabriele Monaco , Masami Hiramatsu , linux-trace-kernel@vger.kernel.org Cc: =?UTF-8?q?Thomas=20Wei=C3=9Fschuh?= Subject: [PATCH 7/8] verification/dot2c: Remove superfluous enum assignment and add last comma Date: Wed, 26 Nov 2025 11:42:38 +0100 Message-ID: <20251126104241.291258-8-gmonaco@redhat.com> In-Reply-To: <20251126104241.291258-1-gmonaco@redhat.com> References: <20251126104241.291258-1-gmonaco@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.93 Content-Type: text/plain; charset="utf-8" The header files generated by dot2c currently create enums for states and events assigning the first element to 0. This is superfluous as it happens automatically if no value is specified. Also it doesn't add a comma to the last enum elements, which slightly complicates the diff if states or events are added. Remove the assignment to 0 and add a comma to last elements, this simplifies the logic for the code generator. Reviewed-by: Nam Cao Signed-off-by: Gabriele Monaco --- kernel/trace/rv/monitors/nrp/nrp.h | 20 +++++++------- kernel/trace/rv/monitors/opid/opid.h | 22 +++++++-------- kernel/trace/rv/monitors/sco/sco.h | 12 ++++----- kernel/trace/rv/monitors/scpd/scpd.h | 12 ++++----- kernel/trace/rv/monitors/snep/snep.h | 16 +++++------ kernel/trace/rv/monitors/snroc/snroc.h | 12 ++++----- kernel/trace/rv/monitors/sssw/sssw.h | 20 +++++++------- kernel/trace/rv/monitors/sts/sts.h | 26 +++++++++--------- kernel/trace/rv/monitors/wip/wip.h | 12 ++++----- kernel/trace/rv/monitors/wwnr/wwnr.h | 12 ++++----- tools/verification/rvgen/rvgen/dot2c.py | 36 +++++++++---------------- 11 files changed, 94 insertions(+), 106 deletions(-) diff --git a/kernel/trace/rv/monitors/nrp/nrp.h b/kernel/trace/rv/monitors/= nrp/nrp.h index c2ec83da2124..3270d4c0139f 100644 --- a/kernel/trace/rv/monitors/nrp/nrp.h +++ b/kernel/trace/rv/monitors/nrp/nrp.h @@ -8,21 +8,21 @@ #define MONITOR_NAME nrp =20 enum states_nrp { - preempt_irq_nrp =3D 0, + preempt_irq_nrp, any_thread_running_nrp, nested_preempt_nrp, rescheduling_nrp, - state_max_nrp + state_max_nrp, }; =20 #define INVALID_STATE state_max_nrp =20 enum events_nrp { - irq_entry_nrp =3D 0, + irq_entry_nrp, sched_need_resched_nrp, schedule_entry_nrp, schedule_entry_preempt_nrp, - event_max_nrp + event_max_nrp, }; =20 struct automaton_nrp { @@ -38,38 +38,38 @@ static const struct automaton_nrp automaton_nrp =3D { "preempt_irq", "any_thread_running", "nested_preempt", - "rescheduling" + "rescheduling", }, .event_names =3D { "irq_entry", "sched_need_resched", "schedule_entry", - "schedule_entry_preempt" + "schedule_entry_preempt", }, .function =3D { { preempt_irq_nrp, preempt_irq_nrp, nested_preempt_nrp, - nested_preempt_nrp + nested_preempt_nrp, }, { any_thread_running_nrp, rescheduling_nrp, any_thread_running_nrp, - INVALID_STATE + INVALID_STATE, }, { nested_preempt_nrp, preempt_irq_nrp, any_thread_running_nrp, - any_thread_running_nrp + any_thread_running_nrp, }, { preempt_irq_nrp, rescheduling_nrp, any_thread_running_nrp, - any_thread_running_nrp + any_thread_running_nrp, }, }, .initial_state =3D preempt_irq_nrp, diff --git a/kernel/trace/rv/monitors/opid/opid.h b/kernel/trace/rv/monitor= s/opid/opid.h index 5014f1b85ecf..092992514970 100644 --- a/kernel/trace/rv/monitors/opid/opid.h +++ b/kernel/trace/rv/monitors/opid/opid.h @@ -8,25 +8,25 @@ #define MONITOR_NAME opid =20 enum states_opid { - disabled_opid =3D 0, + disabled_opid, enabled_opid, in_irq_opid, irq_disabled_opid, preempt_disabled_opid, - state_max_opid + state_max_opid, }; =20 #define INVALID_STATE state_max_opid =20 enum events_opid { - irq_disable_opid =3D 0, + irq_disable_opid, irq_enable_opid, irq_entry_opid, preempt_disable_opid, preempt_enable_opid, sched_need_resched_opid, sched_waking_opid, - event_max_opid + event_max_opid, }; =20 struct automaton_opid { @@ -43,7 +43,7 @@ static const struct automaton_opid automaton_opid =3D { "enabled", "in_irq", "irq_disabled", - "preempt_disabled" + "preempt_disabled", }, .event_names =3D { "irq_disable", @@ -52,7 +52,7 @@ static const struct automaton_opid automaton_opid =3D { "preempt_disable", "preempt_enable", "sched_need_resched", - "sched_waking" + "sched_waking", }, .function =3D { { @@ -62,7 +62,7 @@ static const struct automaton_opid automaton_opid =3D { INVALID_STATE, irq_disabled_opid, disabled_opid, - disabled_opid + disabled_opid, }, { irq_disabled_opid, @@ -71,7 +71,7 @@ static const struct automaton_opid automaton_opid =3D { preempt_disabled_opid, enabled_opid, INVALID_STATE, - INVALID_STATE + INVALID_STATE, }, { INVALID_STATE, @@ -80,7 +80,7 @@ static const struct automaton_opid automaton_opid =3D { INVALID_STATE, INVALID_STATE, in_irq_opid, - in_irq_opid + in_irq_opid, }, { INVALID_STATE, @@ -89,7 +89,7 @@ static const struct automaton_opid automaton_opid =3D { disabled_opid, INVALID_STATE, irq_disabled_opid, - INVALID_STATE + INVALID_STATE, }, { disabled_opid, @@ -98,7 +98,7 @@ static const struct automaton_opid automaton_opid =3D { INVALID_STATE, enabled_opid, INVALID_STATE, - INVALID_STATE + INVALID_STATE, }, }, .initial_state =3D disabled_opid, diff --git a/kernel/trace/rv/monitors/sco/sco.h b/kernel/trace/rv/monitors/= sco/sco.h index 06b1c420ce54..bac3beb51e72 100644 --- a/kernel/trace/rv/monitors/sco/sco.h +++ b/kernel/trace/rv/monitors/sco/sco.h @@ -8,18 +8,18 @@ #define MONITOR_NAME sco =20 enum states_sco { - thread_context_sco =3D 0, + thread_context_sco, scheduling_context_sco, - state_max_sco + state_max_sco, }; =20 #define INVALID_STATE state_max_sco =20 enum events_sco { - sched_set_state_sco =3D 0, + sched_set_state_sco, schedule_entry_sco, schedule_exit_sco, - event_max_sco + event_max_sco, }; =20 struct automaton_sco { @@ -33,12 +33,12 @@ struct automaton_sco { static const struct automaton_sco automaton_sco =3D { .state_names =3D { "thread_context", - "scheduling_context" + "scheduling_context", }, .event_names =3D { "sched_set_state", "schedule_entry", - "schedule_exit" + "schedule_exit", }, .function =3D { { thread_context_sco, scheduling_context_sco, INVALID_STATE= }, diff --git a/kernel/trace/rv/monitors/scpd/scpd.h b/kernel/trace/rv/monitor= s/scpd/scpd.h index 4a725a68085a..d6329da2671b 100644 --- a/kernel/trace/rv/monitors/scpd/scpd.h +++ b/kernel/trace/rv/monitors/scpd/scpd.h @@ -8,19 +8,19 @@ #define MONITOR_NAME scpd =20 enum states_scpd { - cant_sched_scpd =3D 0, + cant_sched_scpd, can_sched_scpd, - state_max_scpd + state_max_scpd, }; =20 #define INVALID_STATE state_max_scpd =20 enum events_scpd { - preempt_disable_scpd =3D 0, + preempt_disable_scpd, preempt_enable_scpd, schedule_entry_scpd, schedule_exit_scpd, - event_max_scpd + event_max_scpd, }; =20 struct automaton_scpd { @@ -34,13 +34,13 @@ struct automaton_scpd { static const struct automaton_scpd automaton_scpd =3D { .state_names =3D { "cant_sched", - "can_sched" + "can_sched", }, .event_names =3D { "preempt_disable", "preempt_enable", "schedule_entry", - "schedule_exit" + "schedule_exit", }, .function =3D { { can_sched_scpd, INVALID_STATE, INVALID_STATE, INVALID_= STATE }, diff --git a/kernel/trace/rv/monitors/snep/snep.h b/kernel/trace/rv/monitor= s/snep/snep.h index 753080dc5fa1..357520a5b3d1 100644 --- a/kernel/trace/rv/monitors/snep/snep.h +++ b/kernel/trace/rv/monitors/snep/snep.h @@ -8,19 +8,19 @@ #define MONITOR_NAME snep =20 enum states_snep { - non_scheduling_context_snep =3D 0, + non_scheduling_context_snep, scheduling_contex_snep, - state_max_snep + state_max_snep, }; =20 #define INVALID_STATE state_max_snep =20 enum events_snep { - preempt_disable_snep =3D 0, + preempt_disable_snep, preempt_enable_snep, schedule_entry_snep, schedule_exit_snep, - event_max_snep + event_max_snep, }; =20 struct automaton_snep { @@ -34,26 +34,26 @@ struct automaton_snep { static const struct automaton_snep automaton_snep =3D { .state_names =3D { "non_scheduling_context", - "scheduling_contex" + "scheduling_contex", }, .event_names =3D { "preempt_disable", "preempt_enable", "schedule_entry", - "schedule_exit" + "schedule_exit", }, .function =3D { { non_scheduling_context_snep, non_scheduling_context_snep, scheduling_contex_snep, - INVALID_STATE + INVALID_STATE, }, { INVALID_STATE, INVALID_STATE, INVALID_STATE, - non_scheduling_context_snep + non_scheduling_context_snep, }, }, .initial_state =3D non_scheduling_context_snep, diff --git a/kernel/trace/rv/monitors/snroc/snroc.h b/kernel/trace/rv/monit= ors/snroc/snroc.h index ada5ee08bdab..88b7328ad31a 100644 --- a/kernel/trace/rv/monitors/snroc/snroc.h +++ b/kernel/trace/rv/monitors/snroc/snroc.h @@ -8,18 +8,18 @@ #define MONITOR_NAME snroc =20 enum states_snroc { - other_context_snroc =3D 0, + other_context_snroc, own_context_snroc, - state_max_snroc + state_max_snroc, }; =20 #define INVALID_STATE state_max_snroc =20 enum events_snroc { - sched_set_state_snroc =3D 0, + sched_set_state_snroc, sched_switch_in_snroc, sched_switch_out_snroc, - event_max_snroc + event_max_snroc, }; =20 struct automaton_snroc { @@ -33,12 +33,12 @@ struct automaton_snroc { static const struct automaton_snroc automaton_snroc =3D { .state_names =3D { "other_context", - "own_context" + "own_context", }, .event_names =3D { "sched_set_state", "sched_switch_in", - "sched_switch_out" + "sched_switch_out", }, .function =3D { { INVALID_STATE, own_context_snroc, INVALID_STATE }, diff --git a/kernel/trace/rv/monitors/sssw/sssw.h b/kernel/trace/rv/monitor= s/sssw/sssw.h index 8409eaadc7e0..1a4b806061c3 100644 --- a/kernel/trace/rv/monitors/sssw/sssw.h +++ b/kernel/trace/rv/monitors/sssw/sssw.h @@ -8,17 +8,17 @@ #define MONITOR_NAME sssw =20 enum states_sssw { - runnable_sssw =3D 0, + runnable_sssw, signal_wakeup_sssw, sleepable_sssw, sleeping_sssw, - state_max_sssw + state_max_sssw, }; =20 #define INVALID_STATE state_max_sssw =20 enum events_sssw { - sched_set_state_runnable_sssw =3D 0, + sched_set_state_runnable_sssw, sched_set_state_sleepable_sssw, sched_switch_blocking_sssw, sched_switch_in_sssw, @@ -27,7 +27,7 @@ enum events_sssw { sched_switch_yield_sssw, sched_wakeup_sssw, signal_deliver_sssw, - event_max_sssw + event_max_sssw, }; =20 struct automaton_sssw { @@ -43,7 +43,7 @@ static const struct automaton_sssw automaton_sssw =3D { "runnable", "signal_wakeup", "sleepable", - "sleeping" + "sleeping", }, .event_names =3D { "sched_set_state_runnable", @@ -54,7 +54,7 @@ static const struct automaton_sssw automaton_sssw =3D { "sched_switch_suspend", "sched_switch_yield", "sched_wakeup", - "signal_deliver" + "signal_deliver", }, .function =3D { { @@ -66,7 +66,7 @@ static const struct automaton_sssw automaton_sssw =3D { INVALID_STATE, runnable_sssw, runnable_sssw, - runnable_sssw + runnable_sssw, }, { INVALID_STATE, @@ -77,7 +77,7 @@ static const struct automaton_sssw automaton_sssw =3D { INVALID_STATE, signal_wakeup_sssw, signal_wakeup_sssw, - runnable_sssw + runnable_sssw, }, { runnable_sssw, @@ -88,7 +88,7 @@ static const struct automaton_sssw automaton_sssw =3D { sleeping_sssw, signal_wakeup_sssw, runnable_sssw, - sleepable_sssw + sleepable_sssw, }, { INVALID_STATE, @@ -99,7 +99,7 @@ static const struct automaton_sssw automaton_sssw =3D { INVALID_STATE, INVALID_STATE, runnable_sssw, - INVALID_STATE + INVALID_STATE, }, }, .initial_state =3D runnable_sssw, diff --git a/kernel/trace/rv/monitors/sts/sts.h b/kernel/trace/rv/monitors/= sts/sts.h index 3779d7f99404..6f7b2d9d72e6 100644 --- a/kernel/trace/rv/monitors/sts/sts.h +++ b/kernel/trace/rv/monitors/sts/sts.h @@ -8,26 +8,26 @@ #define MONITOR_NAME sts =20 enum states_sts { - can_sched_sts =3D 0, + can_sched_sts, cant_sched_sts, disable_to_switch_sts, enable_to_exit_sts, in_irq_sts, scheduling_sts, switching_sts, - state_max_sts + state_max_sts, }; =20 #define INVALID_STATE state_max_sts =20 enum events_sts { - irq_disable_sts =3D 0, + irq_disable_sts, irq_enable_sts, irq_entry_sts, sched_switch_sts, schedule_entry_sts, schedule_exit_sts, - event_max_sts + event_max_sts, }; =20 struct automaton_sts { @@ -46,7 +46,7 @@ static const struct automaton_sts automaton_sts =3D { "enable_to_exit", "in_irq", "scheduling", - "switching" + "switching", }, .event_names =3D { "irq_disable", @@ -54,7 +54,7 @@ static const struct automaton_sts automaton_sts =3D { "irq_entry", "sched_switch", "schedule_entry", - "schedule_exit" + "schedule_exit", }, .function =3D { { @@ -63,7 +63,7 @@ static const struct automaton_sts automaton_sts =3D { INVALID_STATE, INVALID_STATE, scheduling_sts, - INVALID_STATE + INVALID_STATE, }, { INVALID_STATE, @@ -71,7 +71,7 @@ static const struct automaton_sts automaton_sts =3D { cant_sched_sts, INVALID_STATE, INVALID_STATE, - INVALID_STATE + INVALID_STATE, }, { INVALID_STATE, @@ -79,7 +79,7 @@ static const struct automaton_sts automaton_sts =3D { in_irq_sts, switching_sts, INVALID_STATE, - INVALID_STATE + INVALID_STATE, }, { enable_to_exit_sts, @@ -87,7 +87,7 @@ static const struct automaton_sts automaton_sts =3D { enable_to_exit_sts, INVALID_STATE, INVALID_STATE, - can_sched_sts + can_sched_sts, }, { INVALID_STATE, @@ -95,7 +95,7 @@ static const struct automaton_sts automaton_sts =3D { in_irq_sts, INVALID_STATE, INVALID_STATE, - INVALID_STATE + INVALID_STATE, }, { disable_to_switch_sts, @@ -103,7 +103,7 @@ static const struct automaton_sts automaton_sts =3D { INVALID_STATE, INVALID_STATE, INVALID_STATE, - INVALID_STATE + INVALID_STATE, }, { INVALID_STATE, @@ -111,7 +111,7 @@ static const struct automaton_sts automaton_sts =3D { INVALID_STATE, INVALID_STATE, INVALID_STATE, - INVALID_STATE + INVALID_STATE, }, }, .initial_state =3D can_sched_sts, diff --git a/kernel/trace/rv/monitors/wip/wip.h b/kernel/trace/rv/monitors/= wip/wip.h index cfdc52975354..b4c3eea94c86 100644 --- a/kernel/trace/rv/monitors/wip/wip.h +++ b/kernel/trace/rv/monitors/wip/wip.h @@ -8,18 +8,18 @@ #define MONITOR_NAME wip =20 enum states_wip { - preemptive_wip =3D 0, + preemptive_wip, non_preemptive_wip, - state_max_wip + state_max_wip, }; =20 #define INVALID_STATE state_max_wip =20 enum events_wip { - preempt_disable_wip =3D 0, + preempt_disable_wip, preempt_enable_wip, sched_waking_wip, - event_max_wip + event_max_wip, }; =20 struct automaton_wip { @@ -33,12 +33,12 @@ struct automaton_wip { static const struct automaton_wip automaton_wip =3D { .state_names =3D { "preemptive", - "non_preemptive" + "non_preemptive", }, .event_names =3D { "preempt_disable", "preempt_enable", - "sched_waking" + "sched_waking", }, .function =3D { { non_preemptive_wip, INVALID_STATE, INVALID_STATE }, diff --git a/kernel/trace/rv/monitors/wwnr/wwnr.h b/kernel/trace/rv/monitor= s/wwnr/wwnr.h index 85d12e42a955..a28006512c9b 100644 --- a/kernel/trace/rv/monitors/wwnr/wwnr.h +++ b/kernel/trace/rv/monitors/wwnr/wwnr.h @@ -8,18 +8,18 @@ #define MONITOR_NAME wwnr =20 enum states_wwnr { - not_running_wwnr =3D 0, + not_running_wwnr, running_wwnr, - state_max_wwnr + state_max_wwnr, }; =20 #define INVALID_STATE state_max_wwnr =20 enum events_wwnr { - switch_in_wwnr =3D 0, + switch_in_wwnr, switch_out_wwnr, wakeup_wwnr, - event_max_wwnr + event_max_wwnr, }; =20 struct automaton_wwnr { @@ -33,12 +33,12 @@ struct automaton_wwnr { static const struct automaton_wwnr automaton_wwnr =3D { .state_names =3D { "not_running", - "running" + "running", }, .event_names =3D { "switch_in", "switch_out", - "wakeup" + "wakeup", }, .function =3D { { running_wwnr, INVALID_STATE, not_running_wwnr }, diff --git a/tools/verification/rvgen/rvgen/dot2c.py b/tools/verification/r= vgen/rvgen/dot2c.py index 24894411c3cd..06a26bf15a7e 100644 --- a/tools/verification/rvgen/rvgen/dot2c.py +++ b/tools/verification/rvgen/rvgen/dot2c.py @@ -28,11 +28,11 @@ class Dot2c(Automata): =20 def __get_enum_states_content(self) -> list[str]: buff =3D [] - buff.append("\t%s%s =3D 0," % (self.initial_state, self.enum_suffi= x)) + buff.append("\t%s%s," % (self.initial_state, self.enum_suffix)) for state in self.states: if state !=3D self.initial_state: buff.append("\t%s%s," % (state, self.enum_suffix)) - buff.append("\tstate_max%s" % (self.enum_suffix)) + buff.append("\tstate_max%s," % (self.enum_suffix)) =20 return buff =20 @@ -46,15 +46,10 @@ class Dot2c(Automata): =20 def __get_enum_events_content(self) -> list[str]: buff =3D [] - first =3D True for event in self.events: - if first: - buff.append("\t%s%s =3D 0," % (event, self.enum_suffix)) - first =3D False - else: - buff.append("\t%s%s," % (event, self.enum_suffix)) + buff.append("\t%s%s," % (event, self.enum_suffix)) =20 - buff.append("\tevent_max%s" % self.enum_suffix) + buff.append("\tevent_max%s," % self.enum_suffix) =20 return buff =20 @@ -97,18 +92,11 @@ class Dot2c(Automata): buff.append("static const struct %s %s =3D {" % (self.struct_autom= aton_def, self.var_automaton_def)) return buff =20 - def __get_string_vector_per_line_content(self, buff: list[str]) -> str: - first =3D True - string =3D "" - for entry in buff: - if first: - string =3D string + "\t\t\"" + entry - first =3D False; - else: - string =3D string + "\",\n\t\t\"" + entry - string =3D string + "\"" - - return string + def __get_string_vector_per_line_content(self, entries: list[str]) -> = str: + buff =3D [] + for entry in entries: + buff.append(f"\t\t\"{entry}\",") + return "\n".join(buff) =20 def format_aut_init_events_string(self) -> list[str]: buff =3D [] @@ -152,7 +140,7 @@ class Dot2c(Automata): if y !=3D nr_events-1: line +=3D ",\n" if linetoolong else ", " else: - line +=3D "\n\t\t}," if linetoolong else " }," + line +=3D ",\n\t\t}," if linetoolong else " }," buff.append(line) =20 return '\n'.join(buff) @@ -179,12 +167,12 @@ class Dot2c(Automata): line =3D "" first =3D True for state in self.states: - if first =3D=3D False: + if not first: line =3D line + ', ' else: first =3D False =20 - if self.final_states.__contains__(state): + if state in self.final_states: line =3D line + '1' else: line =3D line + '0' --=20 2.51.1 From nobody Mon Dec 1 22:41:52 2025 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6A71131D390 for ; Wed, 26 Nov 2025 10:43:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764153811; cv=none; b=YA4mDC6sh410Ac7fZ6PtNcIJi/8uVg6F9/i9OU7Ya3zVmO9h6XoGrB3w2NUt4hBIF7CzBKeS7ityhWAoDluMz2KvpVVxnuEikxt6ZWvyAVlKgqjIq45UEDlYjztnqYDubxKKKLPzxP8aYAaO2ShEkjH2ZM+IrpkvLoL3BOUNaoA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764153811; c=relaxed/simple; bh=pJ78poG9/dSR/9SR9eLiC60bvQx+3N0aqJrUIMbTDPg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Q4TTqKbujnUzIesY7ua1RWukPoErvbgtz5dTcmzZxjgSykAU3jBwFqGscvJhh67OwAJ/5yhyQhzOKD3cuslmmK8lsDBb7GvW8vYANPr5RjVdzMEDN9T6Ah7lXciX6EvY146N74wIRWji0HIpxbZCtZLIMgQPD2GjEQrP/jZ1oaQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=PXp9FAMA; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="PXp9FAMA" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1764153808; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=+3p+Iodt8jx7PveX+7eZHvZvNP4dSAnqUhkVVKz+5rU=; b=PXp9FAMAczSUME/wXfNt8NS4ZyO3GYZy7xnK4QRySaToqM9Hlv6JuAtbaMlvlQYlm69SS1 YvWJesfonrBCPgTm2m/hUBLdY2YXEoLRTxk47WxCv99x5SU7xAR8EEsawGvSOaOw1QeLe+ p0KnvimAzV7CMyQLbb//s2kJXXBfmbk= Received: from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-654-RCC_9F7iPHuT9jo42iZC8w-1; Wed, 26 Nov 2025 05:43:23 -0500 X-MC-Unique: RCC_9F7iPHuT9jo42iZC8w-1 X-Mimecast-MFC-AGG-ID: RCC_9F7iPHuT9jo42iZC8w_1764153802 Received: from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.93]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 85CAC1956061; Wed, 26 Nov 2025 10:43:22 +0000 (UTC) Received: from gmonaco-thinkpadt14gen3.rmtit.csb (unknown [10.45.226.131]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 991F518004A3; Wed, 26 Nov 2025 10:43:19 +0000 (UTC) From: Gabriele Monaco To: linux-kernel@vger.kernel.org, Steven Rostedt , Nam Cao , Gabriele Monaco , Masami Hiramatsu , linux-trace-kernel@vger.kernel.org Cc: =?UTF-8?q?Thomas=20Wei=C3=9Fschuh?= Subject: [PATCH 8/8] verification/rvgen: Remove unused variable declaration from containers Date: Wed, 26 Nov 2025 11:42:39 +0100 Message-ID: <20251126104241.291258-9-gmonaco@redhat.com> In-Reply-To: <20251126104241.291258-1-gmonaco@redhat.com> References: <20251126104241.291258-1-gmonaco@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.93 Content-Type: text/plain; charset="utf-8" The monitor container source files contained a declaration and a definition for the rv_monitor variable. The former is superfluous and can be removed. Remove the variable declaration from the template as well as the existing monitor containers. Reviewed-by: Nam Cao Signed-off-by: Gabriele Monaco --- kernel/trace/rv/monitors/rtapp/rtapp.c | 2 -- kernel/trace/rv/monitors/sched/sched.c | 2 -- tools/verification/rvgen/rvgen/templates/container/main.c | 2 -- 3 files changed, 6 deletions(-) diff --git a/kernel/trace/rv/monitors/rtapp/rtapp.c b/kernel/trace/rv/monit= ors/rtapp/rtapp.c index fd75fc927d65..17f271231c99 100644 --- a/kernel/trace/rv/monitors/rtapp/rtapp.c +++ b/kernel/trace/rv/monitors/rtapp/rtapp.c @@ -8,8 +8,6 @@ =20 #include "rtapp.h" =20 -struct rv_monitor rv_rtapp; - struct rv_monitor rv_rtapp =3D { .name =3D "rtapp", .description =3D "Collection of monitors for detecting problems with real= -time applications", diff --git a/kernel/trace/rv/monitors/sched/sched.c b/kernel/trace/rv/monit= ors/sched/sched.c index d04db4b543f9..dd9d96fc6e21 100644 --- a/kernel/trace/rv/monitors/sched/sched.c +++ b/kernel/trace/rv/monitors/sched/sched.c @@ -8,8 +8,6 @@ =20 #include "sched.h" =20 -struct rv_monitor rv_sched; - struct rv_monitor rv_sched =3D { .name =3D "sched", .description =3D "container for several scheduler monitor specifications.= ", diff --git a/tools/verification/rvgen/rvgen/templates/container/main.c b/to= ols/verification/rvgen/rvgen/templates/container/main.c index 7d9b2f95c7e9..5fc89b46f279 100644 --- a/tools/verification/rvgen/rvgen/templates/container/main.c +++ b/tools/verification/rvgen/rvgen/templates/container/main.c @@ -8,8 +8,6 @@ =20 #include "%%MODEL_NAME%%.h" =20 -struct rv_monitor rv_%%MODEL_NAME%%; - struct rv_monitor rv_%%MODEL_NAME%% =3D { .name =3D "%%MODEL_NAME%%", .description =3D "%%DESCRIPTION%%", --=20 2.51.1