This RFC contains several related changes, I'm sending them together to give the full picture and get early feedback but I'm probably going to submit some of them separately. The main areas are:
* DA monitor cleanup to remove macros * Hybrid automata Hybrid automata are an extension of deterministic automata where each state transition is validating a constraint on a finite number of environment variables. Hybrid automata can be used to implement timed automata, where the environment variables are clocks. * per-object monitors Define the generic per-object monitor allow RV monitors on any kind of object where the user can specify how to get an id (e.g. pid for tasks) and the data type for the monitor_target (e.g. struct task_struct * for tasks). The monitor storage (e.g. the rv monitor, pointer to the target, etc.) is stored in a hash table indexed by id. * deadline monitors collection Add the throttle and nomiss monitors to validate timing aspects of the deadline scheduler, as they work for tasks and servers, their inclusion requires also per-object monitors (for dl entities). To: Steven Rostedt <rost...@goodmis.org> To: Nam Cao <nam...@linutronix.de> Cc: Tomas Glozar <tglo...@redhat.com> Cc: Juri Lelli <jle...@redhat.com> Cc: Clark Williams <willi...@redhat.com> Cc: John Kacur <jka...@redhat.com> Cc: linux-trace-kernel@vger.kernel.org Gabriele Monaco (17): rv: Refactor da_monitor to minimise macros rv: Cleanup da_monitor after refactor Documentation/rv: Adapt documentation after da_monitor refactoring verification/rvgen: Adapt dot2k and templates after refactoring da_monitor.h verification/rvgen: Annotate DA functions with types verification/dot2c: Remove __buff_to_string() and cleanup verification/rvgen: Remove unused variable declaration from containers rv: Add Hybrid Automata monitor type verification/rvgen: Allow spaces in and events strings verification/rvgen: Add support for Hybrid Automata Documentation/rv: Add documentation about hybrid automata rv: Add sample hybrid monitors stall rv: Convert the opid monitor to a hybrid automaton sched: Add deadline tracepoints rv: Add support for per-object monitors in DA/HA verification/rvgen: Add support for per-obj monitors rv: Add deadline monitors Documentation/tools/rv/rv-mon-stall.rst | 44 + .../trace/rv/deterministic_automata.rst | 2 +- Documentation/trace/rv/hybrid_automata.rst | 307 ++++ Documentation/trace/rv/index.rst | 1 + Documentation/trace/rv/monitor_deadline.rst | 111 ++ Documentation/trace/rv/monitor_sched.rst | 62 +- Documentation/trace/rv/monitor_stall.rst | 43 + Documentation/trace/rv/monitor_synthesis.rst | 130 +- include/linux/rv.h | 30 + include/rv/automata.h | 132 +- include/rv/da_common.h | 21 + include/rv/da_monitor.h | 1265 ++++++++++------- include/rv/ha_monitor.h | 398 ++++++ include/trace/events/sched.h | 55 + kernel/sched/deadline.c | 8 + kernel/trace/rv/Kconfig | 19 + kernel/trace/rv/Makefile | 4 + kernel/trace/rv/monitors/deadline/Kconfig | 5 + kernel/trace/rv/monitors/deadline/deadline.c | 35 + kernel/trace/rv/monitors/deadline/deadline.h | 82 ++ kernel/trace/rv/monitors/nomiss/Kconfig | 15 + kernel/trace/rv/monitors/nomiss/nomiss.c | 234 +++ kernel/trace/rv/monitors/nomiss/nomiss.h | 81 ++ .../trace/rv/monitors/nomiss/nomiss_trace.h | 19 + kernel/trace/rv/monitors/nrp/nrp.c | 22 +- kernel/trace/rv/monitors/nrp/nrp.h | 2 + kernel/trace/rv/monitors/opid/Kconfig | 11 +- kernel/trace/rv/monitors/opid/opid.c | 119 +- kernel/trace/rv/monitors/opid/opid.h | 90 +- kernel/trace/rv/monitors/opid/opid_trace.h | 4 + kernel/trace/rv/monitors/rtapp/rtapp.c | 2 - kernel/trace/rv/monitors/sched/sched.c | 2 - kernel/trace/rv/monitors/sco/sco.c | 18 +- kernel/trace/rv/monitors/sco/sco.h | 2 + kernel/trace/rv/monitors/scpd/scpd.c | 20 +- kernel/trace/rv/monitors/scpd/scpd.h | 2 + kernel/trace/rv/monitors/snep/snep.c | 20 +- kernel/trace/rv/monitors/snep/snep.h | 2 + kernel/trace/rv/monitors/snroc/snroc.c | 18 +- kernel/trace/rv/monitors/snroc/snroc.h | 2 + kernel/trace/rv/monitors/sssw/sssw.c | 30 +- kernel/trace/rv/monitors/sssw/sssw.h | 2 + kernel/trace/rv/monitors/stall/Kconfig | 9 + kernel/trace/rv/monitors/stall/stall.c | 116 ++ kernel/trace/rv/monitors/stall/stall.h | 64 + kernel/trace/rv/monitors/stall/stall_trace.h | 19 + kernel/trace/rv/monitors/sts/sts.c | 26 +- kernel/trace/rv/monitors/sts/sts.h | 2 + kernel/trace/rv/monitors/throttle/Kconfig | 15 + kernel/trace/rv/monitors/throttle/throttle.c | 259 ++++ kernel/trace/rv/monitors/throttle/throttle.h | 115 ++ .../rv/monitors/throttle/throttle_trace.h | 19 + kernel/trace/rv/monitors/wip/wip.c | 18 +- kernel/trace/rv/monitors/wip/wip.h | 2 + kernel/trace/rv/monitors/wwnr/wwnr.c | 20 +- kernel/trace/rv/monitors/wwnr/wwnr.h | 2 + kernel/trace/rv/rv_trace.h | 68 +- tools/verification/models/deadline/nomiss.dot | 23 + .../verification/models/deadline/throttle.dot | 43 + tools/verification/models/sched/opid.dot | 36 +- tools/verification/models/stall.dot | 20 + tools/verification/rvgen/__main__.py | 8 +- tools/verification/rvgen/rvgen/automata.py | 155 +- tools/verification/rvgen/rvgen/dot2c.py | 129 +- tools/verification/rvgen/rvgen/dot2k.py | 317 ++++- tools/verification/rvgen/rvgen/generator.py | 4 +- .../rvgen/rvgen/templates/container/main.c | 2 - .../rvgen/rvgen/templates/dot2k/main.c | 17 +- .../rvgen/templates/dot2k/trace_hybrid.h | 16 + 69 files changed, 3969 insertions(+), 1026 deletions(-) create mode 100644 Documentation/tools/rv/rv-mon-stall.rst create mode 100644 Documentation/trace/rv/hybrid_automata.rst create mode 100644 Documentation/trace/rv/monitor_deadline.rst create mode 100644 Documentation/trace/rv/monitor_stall.rst create mode 100644 include/rv/da_common.h create mode 100644 include/rv/ha_monitor.h create mode 100644 kernel/trace/rv/monitors/deadline/Kconfig create mode 100644 kernel/trace/rv/monitors/deadline/deadline.c create mode 100644 kernel/trace/rv/monitors/deadline/deadline.h create mode 100644 kernel/trace/rv/monitors/nomiss/Kconfig create mode 100644 kernel/trace/rv/monitors/nomiss/nomiss.c create mode 100644 kernel/trace/rv/monitors/nomiss/nomiss.h create mode 100644 kernel/trace/rv/monitors/nomiss/nomiss_trace.h create mode 100644 kernel/trace/rv/monitors/stall/Kconfig create mode 100644 kernel/trace/rv/monitors/stall/stall.c create mode 100644 kernel/trace/rv/monitors/stall/stall.h create mode 100644 kernel/trace/rv/monitors/stall/stall_trace.h create mode 100644 kernel/trace/rv/monitors/throttle/Kconfig create mode 100644 kernel/trace/rv/monitors/throttle/throttle.c create mode 100644 kernel/trace/rv/monitors/throttle/throttle.h create mode 100644 kernel/trace/rv/monitors/throttle/throttle_trace.h create mode 100644 tools/verification/models/deadline/nomiss.dot create mode 100644 tools/verification/models/deadline/throttle.dot create mode 100644 tools/verification/models/stall.dot create mode 100644 tools/verification/rvgen/rvgen/templates/dot2k/trace_hybrid.h base-commit: 0cc53520e68bea7fb80fdc6bdf8d226d1b6a98d9 -- 2.50.1