All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tao Zhou <tao.zhou@linux.dev>
To: Daniel Bristot de Oliveira <bristot@kernel.org>
Cc: Steven Rostedt <rostedt@goodmis.org>,
	Wim Van Sebroeck <wim@linux-watchdog.org>,
	Guenter Roeck <linux@roeck-us.net>,
	Jonathan Corbet <corbet@lwn.net>, Ingo Molnar <mingo@redhat.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Peter Zijlstra <peterz@infradead.org>,
	Will Deacon <will@kernel.org>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Marco Elver <elver@google.com>,
	Dmitry Vyukov <dvyukov@google.com>,
	"Paul E. McKenney" <paulmck@kernel.org>,
	Shuah Khan <skhan@linuxfoundation.org>,
	Gabriele Paoloni <gpaoloni@redhat.com>,
	Juri Lelli <juri.lelli@redhat.com>,
	Clark Williams <williams@redhat.com>,
	linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-trace-devel@vger.kernel.org, Tao Zhou <tao.zhou@linux.dev>
Subject: Re: [PATCH V4 10/20] rv/monitor: Add the wwnr monitor skeleton created by dot2k
Date: Thu, 7 Jul 2022 04:08:35 +0800	[thread overview]
Message-ID: <YsXrw40DP2ckPHuC@geo.homenetwork> (raw)
In-Reply-To: <7d1b2238aa5c805501ae3dc80b213d06f6588cb3.1655368610.git.bristot@kernel.org>

On Thu, Jun 16, 2022 at 10:44:52AM +0200, Daniel Bristot de Oliveira wrote:

> Per task wakeup while not running (wwnr) monitor, generated by dot2k
> with this command line:
> 
>   $ dot2k -d wwnr.dot -t per_task
> 
> The model is:
>  ----- %< -----
> digraph state_automaton {
> 	center = true;
> 	size = "7,11";
> 	{node [shape = plaintext, style=invis, label=""] "__init_not_running"};
> 	{node [shape = ellipse] "not_running"};
> 	{node [shape = plaintext] "not_running"};
> 	{node [shape = plaintext] "running"};
> 	"__init_not_running" -> "not_running";
> 	"not_running" [label = "not_running", color = green3];
> 	"not_running" -> "not_running" [ label = "wakeup" ];
> 	"not_running" -> "running" [ label = "switch_in" ];
> 	"running" [label = "running"];
> 	"running" -> "not_running" [ label = "switch_out" ];
> 	{ rank = min ;
> 		"__init_not_running";
> 		"not_running";
> 	}
> }
>  ----- >% -----
> 
> This model is broken, the reason is that a task can be running in the
> processor without being set as RUNNABLE. Think about a task about to
> sleep:
> 
> 1:	set_current_state(TASK_UNINTERRUPTIBLE);
> 2:	schedule();
> 
> And then imagine an IRQ happening in between the lines one and two,
> waking the task up. BOOM, the wakeup will happen while the task is
> running.
> 
> Q: Why do we need this model, so?
> A: To test the reactors.
> 
> Cc: Wim Van Sebroeck <wim@linux-watchdog.org>
> Cc: Guenter Roeck <linux@roeck-us.net>
> Cc: Jonathan Corbet <corbet@lwn.net>
> Cc: Steven Rostedt <rostedt@goodmis.org>
> Cc: Ingo Molnar <mingo@redhat.com>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: Peter Zijlstra <peterz@infradead.org>
> Cc: Will Deacon <will@kernel.org>
> Cc: Catalin Marinas <catalin.marinas@arm.com>
> Cc: Marco Elver <elver@google.com>
> Cc: Dmitry Vyukov <dvyukov@google.com>
> Cc: "Paul E. McKenney" <paulmck@kernel.org>
> Cc: Shuah Khan <skhan@linuxfoundation.org>
> Cc: Gabriele Paoloni <gpaoloni@redhat.com>
> Cc: Juri Lelli <juri.lelli@redhat.com>
> Cc: Clark Williams <williams@redhat.com>
> Cc: linux-doc@vger.kernel.org
> Cc: linux-kernel@vger.kernel.org
> Cc: linux-trace-devel@vger.kernel.org
> Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
> ---
>  kernel/trace/rv/monitors/wwnr/wwnr.c | 115 +++++++++++++++++++++++++++
>  kernel/trace/rv/monitors/wwnr/wwnr.h |  38 +++++++++
>  2 files changed, 153 insertions(+)
>  create mode 100644 kernel/trace/rv/monitors/wwnr/wwnr.c
>  create mode 100644 kernel/trace/rv/monitors/wwnr/wwnr.h
> 
> diff --git a/kernel/trace/rv/monitors/wwnr/wwnr.c b/kernel/trace/rv/monitors/wwnr/wwnr.c
> new file mode 100644
> index 000000000000..8ba01f0f0df8
> --- /dev/null
> +++ b/kernel/trace/rv/monitors/wwnr/wwnr.c
> @@ -0,0 +1,115 @@
> +// SPDX-License-Identifier: GPL-2.0
> +#include <linux/ftrace.h>
> +#include <linux/tracepoint.h>
> +#include <linux/kernel.h>
> +#include <linux/module.h>
> +#include <linux/init.h>
> +#include <linux/rv.h>
> +#include <rv/instrumentation.h>
> +#include <rv/da_monitor.h>
> +
> +#define MODULE_NAME "wwnr"
> +
> +/*
> + * XXX: include required tracepoint headers, e.g.,
> + * #include <linux/trace/events/sched.h>
> + */
> +#include <trace/events/rv.h>
> +
> +/*
> + * This is the self-generated part of the monitor. Generally, there is no need
> + * to touch this section.
> + */
> +#include "wwnr.h"
> +
> +/*
> + * Declare the deterministic automata monitor.
> + *
> + * The rv monitor reference is needed for the monitor declaration.
> + */
> +struct rv_monitor rv_wwnr;
> +DECLARE_DA_MON_PER_TASK(wwnr, char);
> +
> +/*
> + * This is the instrumentation part of the monitor.
> + *
> + * This is the section where manual work is required. Here the kernel events
> + * are translated into model's event.
> + *
> + */
> +static void handle_switch_in(void *data, /* XXX: fill header */)
> +{
> +	struct task_struct *p = /* XXX: how do I get p? */;
> +	da_handle_event_wwnr(p, switch_in_wwnr);
> +}
> +
> +static void handle_switch_out(void *data, /* XXX: fill header */)
> +{
> +	struct task_struct *p = /* XXX: how do I get p? */;
> +	da_handle_event_wwnr(p, switch_out_wwnr);
> +}
> +
> +static void handle_wakeup(void *data, /* XXX: fill header */)
> +{
> +	struct task_struct *p = /* XXX: how do I get p? */;
> +	da_handle_event_wwnr(p, wakeup_wwnr);
> +}
> +
> +static int start_wwnr(void)
> +{
> +	int retval;
> +
> +	retval = da_monitor_init_wwnr();
> +	if (retval)
> +		return retval;
> +
> +	rv_attach_trace_probe("wwnr", /* XXX: tracepoint */, handle_switch_in);
> +	rv_attach_trace_probe("wwnr", /* XXX: tracepoint */, handle_switch_out);
> +	rv_attach_trace_probe("wwnr", /* XXX: tracepoint */, handle_wakeup);
> +
> +	return 0;
> +}
> +
> +static void stop_wwnr(void)
> +{
> +	rv_wwnr.enabled = 0;
> +
> +	rv_detach_trace_probe("wwnr", /* XXX: tracepoint */, handle_switch_in);
> +	rv_detach_trace_probe("wwnr", /* XXX: tracepoint */, handle_switch_out);
> +	rv_detach_trace_probe("wwnr", /* XXX: tracepoint */, handle_wakeup);
> +
> +	da_monitor_destroy_wwnr();
> +}
> +
> +/*
> + * This is the monitor register section.
> + */
> +struct rv_monitor rv_wwnr = {
> +	.name = "wwnr",
> +	.description = "auto-generated wwnr",
> +	.start = start_wwnr,
> +	.stop = stop_wwnr,
> +	.reset = da_monitor_reset_all_wwnr,
> +	.enabled = 0,
> +};
> +
> +int register_wwnr(void)
> +{
> +	rv_register_monitor(&rv_wwnr);
> +	return 0;
> +}
> +
> +void unregister_wwnr(void)
> +{
> +	if (rv_wwnr.enabled)
> +		stop_wwnr();
> +
> +	rv_unregister_monitor(&rv_wwnr);
> +}
> +
> +module_init(register_wwnr);
> +module_exit(unregister_wwnr);
> +
> +MODULE_LICENSE("GPL");
> +MODULE_AUTHOR("dot2k: auto-generated");
> +MODULE_DESCRIPTION("wwnr");
> diff --git a/kernel/trace/rv/monitors/wwnr/wwnr.h b/kernel/trace/rv/monitors/wwnr/wwnr.h
> new file mode 100644
> index 000000000000..f3dc160642bf
> --- /dev/null
> +++ b/kernel/trace/rv/monitors/wwnr/wwnr.h
> @@ -0,0 +1,38 @@
> +enum states_wwnr {
> +	not_running_wwnr = 0,
> +	running_wwnr,
> +	state_max_wwnr
> +};
> +
> +enum events_wwnr {
> +	switch_in_wwnr = 0,
> +	switch_out_wwnr,
> +	wakeup_wwnr,
> +	event_max_wwnr
> +};
> +
> +struct automaton_wwnr {
> +	char *state_names[state_max_wwnr];
> +	char *event_names[event_max_wwnr];
> +	char function[state_max_wwnr][event_max_wwnr];
> +	char initial_state;
> +	char final_states[state_max_wwnr];
> +};
> +
> +struct automaton_wwnr automaton_wwnr = {
> +	.state_names = {
> +		"not_running",
> +		"running"
> +	},
> +	.event_names = {
> +		"switch_in",
> +		"switch_out",
> +		"wakeup"
> +	},

The .state_names and .event_names lack the wwnr postfix.
If they generated aotomatically, something need to fix,
if not, can manually change to the consistent name.

If the state change from running to non-running(initial state),
in the next patch in handle_switch() where there checked
TASK_INTERRUPTABLE to set initial state. Why can not check
TASK_UNINTERURPTABLE to set initial state there, confused.
This model is not completed for me now.

> +	.function = {
> +		{     running_wwnr,               -1, not_running_wwnr },
> +		{               -1, not_running_wwnr,               -1 },
> +	},
> +	.initial_state = not_running_wwnr,
> +	.final_states = { 1, 0 },
> +};
> -- 
> 2.35.1
> 

  reply	other threads:[~2022-07-06 20:07 UTC|newest]

Thread overview: 82+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-16  8:44 [PATCH V4 00/20] The Runtime Verification (RV) interface Daniel Bristot de Oliveira
2022-06-16  8:44 ` [PATCH V4 01/20] rv: Add " Daniel Bristot de Oliveira
2022-06-23 17:21   ` Punit Agrawal
2022-07-01 13:24     ` Daniel Bristot de Oliveira
2022-06-23 20:26   ` Steven Rostedt
2022-07-04 19:49     ` Daniel Bristot de Oliveira
2022-07-06 17:49   ` Tao Zhou
2022-07-06 17:53     ` Matthew Wilcox
2022-07-08 15:36       ` Tao Zhou
2022-07-08 15:55         ` Matthew Wilcox
2022-07-08 14:39     ` Daniel Bristot de Oliveira
2022-07-10 15:11       ` Tao Zhou
2022-07-10 15:42         ` Steven Rostedt
2022-07-10 22:28           ` Tao Zhou
2022-06-16  8:44 ` [PATCH V4 02/20] rv: Add runtime reactors interface Daniel Bristot de Oliveira
2022-06-23 20:40   ` Steven Rostedt
2022-06-16  8:44 ` [PATCH V4 03/20] rv/include: Add helper functions for deterministic automata Daniel Bristot de Oliveira
2022-06-28 17:48   ` Steven Rostedt
2022-07-06 18:35   ` Tao Zhou
2022-07-13 18:38     ` Daniel Bristot de Oliveira
2022-06-16  8:44 ` [PATCH V4 04/20] rv/include: Add deterministic automata monitor definition via C macros Daniel Bristot de Oliveira
2022-07-06 18:56   ` Tao Zhou
2022-07-13 18:39     ` Daniel Bristot de Oliveira
2022-06-16  8:44 ` [PATCH V4 05/20] rv/include: Add instrumentation helper functions Daniel Bristot de Oliveira
2022-06-16  8:44 ` [PATCH V4 06/20] tools/rv: Add dot2c Daniel Bristot de Oliveira
2022-06-28 18:10   ` Steven Rostedt
2022-06-28 18:16   ` Steven Rostedt
2022-07-13 18:41     ` Daniel Bristot de Oliveira
2022-06-16  8:44 ` [PATCH V4 07/20] tools/rv: Add dot2k Daniel Bristot de Oliveira
2022-06-16  8:44 ` [PATCH V4 08/20] rv/monitor: Add the wip monitor skeleton created by dot2k Daniel Bristot de Oliveira
2022-06-28 19:02   ` Steven Rostedt
2022-06-16  8:44 ` [PATCH V4 09/20] rv/monitor: wip instrumentation and Makefile/Kconfig entries Daniel Bristot de Oliveira
2022-06-16 11:21   ` kernel test robot
2022-06-16 21:00   ` Randy Dunlap
2022-06-17 16:07     ` Daniel Bristot de Oliveira
2022-06-28 19:02     ` Steven Rostedt
2022-06-16  8:44 ` [PATCH V4 10/20] rv/monitor: Add the wwnr monitor skeleton created by dot2k Daniel Bristot de Oliveira
2022-07-06 20:08   ` Tao Zhou [this message]
2022-06-16  8:44 ` [PATCH V4 11/20] rv/monitor: wwnr instrumentation and Makefile/Kconfig entries Daniel Bristot de Oliveira
2022-06-16 13:47   ` kernel test robot
2022-06-28 19:05   ` Steven Rostedt
2022-06-16  8:44 ` [PATCH V4 12/20] rv/reactor: Add the printk reactor Daniel Bristot de Oliveira
2022-06-16  8:44 ` [PATCH V4 13/20] rv/reactor: Add the panic reactor Daniel Bristot de Oliveira
2022-06-16 15:20   ` kernel test robot
2022-06-16 21:03   ` Randy Dunlap
2022-06-17 16:09     ` Daniel Bristot de Oliveira
2022-07-13 18:47     ` Daniel Bristot de Oliveira
2022-06-28 19:06   ` Steven Rostedt
2022-06-16  8:44 ` [PATCH V4 14/20] Documentation/rv: Add a basic documentation Daniel Bristot de Oliveira
2022-06-29  3:35   ` Bagas Sanjaya
2022-07-13 19:30     ` Daniel Bristot de Oliveira
2022-06-16  8:44 ` [PATCH V4 15/20] Documentation/rv: Add deterministic automata monitor synthesis documentation Daniel Bristot de Oliveira
2022-06-28 19:09   ` Steven Rostedt
2022-06-16  8:44 ` [PATCH V4 16/20] Documentation/rv: Add deterministic automata instrumentation documentation Daniel Bristot de Oliveira
2022-06-16  8:44 ` [PATCH V4 17/20] watchdog/dev: Add tracepoints Daniel Bristot de Oliveira
2022-06-16 13:44   ` Guenter Roeck
2022-06-16 15:47     ` Daniel Bristot de Oliveira
2022-06-16 23:55       ` Guenter Roeck
2022-06-17 16:16         ` Daniel Bristot de Oliveira
2022-07-13 18:49         ` Daniel Bristot de Oliveira
2022-06-16  8:45 ` [PATCH V4 18/20] rv/monitor: Add safe watchdog monitor Daniel Bristot de Oliveira
2022-06-16 13:36   ` Guenter Roeck
2022-06-16 15:29     ` Daniel Bristot de Oliveira
     [not found]       ` <CA+wEVJbvcMZbCroO2_rdVxLvYkUo-ePxCwsp5vbDpoqys4HGWQ@mail.gmail.com>
2022-06-16 23:53         ` Guenter Roeck
2022-06-17 17:06           ` Daniel Bristot de Oliveira
2022-06-28 19:32           ` Steven Rostedt
2022-07-01 14:45             ` Guenter Roeck
2022-07-01 15:38               ` Steven Rostedt
2022-07-04 12:41                 ` Daniel Bristot de Oliveira
2022-06-16 20:57   ` Randy Dunlap
2022-06-17 16:17     ` Daniel Bristot de Oliveira
2022-07-13 19:13   ` Daniel Bristot de Oliveira
2022-06-16  8:45 ` [PATCH V4 19/20] rv/safety_app: Add a safety_app sample Daniel Bristot de Oliveira
2022-06-16  8:45 ` [PATCH V4 20/20] Documentation/rv: Add watchdog-monitor documentation Daniel Bristot de Oliveira
2022-07-07 12:41   ` Tao Zhou
2022-07-13 18:51     ` Daniel Bristot de Oliveira
2022-06-22  7:24 ` [PATCH V4 00/20] The Runtime Verification (RV) interface Song Liu
2022-06-23 16:41   ` Daniel Bristot de Oliveira
2022-06-23 17:52     ` Song Liu
2022-06-23 20:29       ` Daniel Bristot de Oliveira
2022-06-23 21:10         ` Song Liu
2022-07-06 16:18 ` Tao Zhou

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YsXrw40DP2ckPHuC@geo.homenetwork \
    --to=tao.zhou@linux.dev \
    --cc=bristot@kernel.org \
    --cc=catalin.marinas@arm.com \
    --cc=corbet@lwn.net \
    --cc=dvyukov@google.com \
    --cc=elver@google.com \
    --cc=gpaoloni@redhat.com \
    --cc=juri.lelli@redhat.com \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-trace-devel@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=mingo@redhat.com \
    --cc=paulmck@kernel.org \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=skhan@linuxfoundation.org \
    --cc=tglx@linutronix.de \
    --cc=will@kernel.org \
    --cc=williams@redhat.com \
    --cc=wim@linux-watchdog.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.