mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-04 20:19:47 +08:00

dot2k suggests a list of changes to the kernel tree while adding a monitor: edit tracepoints header, Makefile, Kconfig and moving the monitor folder. Those changes can be easily run automatically. Add a flag to dot2k to alter the kernel source. The kernel source directory can be either assumed from the PWD, or from the running kernel, if installed. This feature works best if the kernel tree is a git repository, so that its easier to make sure there are no unintended changes. The main RV files (e.g. Makefile) have now a comment placeholder that can be useful for manual editing (e.g. to know where to add new monitors) and it is used by the script to append the required lines. We also slightly adapt the file handling functions in dot2k: __open_file is now called __read_file and also closes the file before returning the content; __create_file is now a more general __write_file, we no longer return on FileExistsError (not thrown while opening), a new __create_file simply calls __write_file specifying the monitor folder in the path. Cc: Juri Lelli <juri.lelli@redhat.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: John Kacur <jkacur@redhat.com> Link: https://lore.kernel.org/20241227144752.362911-8-gmonaco@redhat.com Signed-off-by: Gabriele Monaco <gmonaco@redhat.com> Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
131 lines
3.1 KiB
C
131 lines
3.1 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#undef TRACE_SYSTEM
|
|
#define TRACE_SYSTEM rv
|
|
|
|
#if !defined(_TRACE_RV_H) || defined(TRACE_HEADER_MULTI_READ)
|
|
#define _TRACE_RV_H
|
|
|
|
#include <linux/rv.h>
|
|
#include <linux/tracepoint.h>
|
|
|
|
#ifdef CONFIG_DA_MON_EVENTS_IMPLICIT
|
|
DECLARE_EVENT_CLASS(event_da_monitor,
|
|
|
|
TP_PROTO(char *state, char *event, char *next_state, bool final_state),
|
|
|
|
TP_ARGS(state, event, next_state, final_state),
|
|
|
|
TP_STRUCT__entry(
|
|
__array( char, state, MAX_DA_NAME_LEN )
|
|
__array( char, event, MAX_DA_NAME_LEN )
|
|
__array( char, next_state, MAX_DA_NAME_LEN )
|
|
__field( bool, final_state )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
memcpy(__entry->state, state, MAX_DA_NAME_LEN);
|
|
memcpy(__entry->event, event, MAX_DA_NAME_LEN);
|
|
memcpy(__entry->next_state, next_state, MAX_DA_NAME_LEN);
|
|
__entry->final_state = final_state;
|
|
),
|
|
|
|
TP_printk("%s x %s -> %s %s",
|
|
__entry->state,
|
|
__entry->event,
|
|
__entry->next_state,
|
|
__entry->final_state ? "(final)" : "")
|
|
);
|
|
|
|
DECLARE_EVENT_CLASS(error_da_monitor,
|
|
|
|
TP_PROTO(char *state, char *event),
|
|
|
|
TP_ARGS(state, event),
|
|
|
|
TP_STRUCT__entry(
|
|
__array( char, state, MAX_DA_NAME_LEN )
|
|
__array( char, event, MAX_DA_NAME_LEN )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
memcpy(__entry->state, state, MAX_DA_NAME_LEN);
|
|
memcpy(__entry->event, event, MAX_DA_NAME_LEN);
|
|
),
|
|
|
|
TP_printk("event %s not expected in the state %s",
|
|
__entry->event,
|
|
__entry->state)
|
|
);
|
|
|
|
#include <monitors/wip/wip_trace.h>
|
|
// Add new monitors based on CONFIG_DA_MON_EVENTS_IMPLICIT here
|
|
|
|
#endif /* CONFIG_DA_MON_EVENTS_IMPLICIT */
|
|
|
|
#ifdef CONFIG_DA_MON_EVENTS_ID
|
|
DECLARE_EVENT_CLASS(event_da_monitor_id,
|
|
|
|
TP_PROTO(int id, char *state, char *event, char *next_state, bool final_state),
|
|
|
|
TP_ARGS(id, state, event, next_state, final_state),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( int, id )
|
|
__array( char, state, MAX_DA_NAME_LEN )
|
|
__array( char, event, MAX_DA_NAME_LEN )
|
|
__array( char, next_state, MAX_DA_NAME_LEN )
|
|
__field( bool, final_state )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
memcpy(__entry->state, state, MAX_DA_NAME_LEN);
|
|
memcpy(__entry->event, event, MAX_DA_NAME_LEN);
|
|
memcpy(__entry->next_state, next_state, MAX_DA_NAME_LEN);
|
|
__entry->id = id;
|
|
__entry->final_state = final_state;
|
|
),
|
|
|
|
TP_printk("%d: %s x %s -> %s %s",
|
|
__entry->id,
|
|
__entry->state,
|
|
__entry->event,
|
|
__entry->next_state,
|
|
__entry->final_state ? "(final)" : "")
|
|
);
|
|
|
|
DECLARE_EVENT_CLASS(error_da_monitor_id,
|
|
|
|
TP_PROTO(int id, char *state, char *event),
|
|
|
|
TP_ARGS(id, state, event),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( int, id )
|
|
__array( char, state, MAX_DA_NAME_LEN )
|
|
__array( char, event, MAX_DA_NAME_LEN )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
memcpy(__entry->state, state, MAX_DA_NAME_LEN);
|
|
memcpy(__entry->event, event, MAX_DA_NAME_LEN);
|
|
__entry->id = id;
|
|
),
|
|
|
|
TP_printk("%d: event %s not expected in the state %s",
|
|
__entry->id,
|
|
__entry->event,
|
|
__entry->state)
|
|
);
|
|
|
|
#include <monitors/wwnr/wwnr_trace.h>
|
|
// Add new monitors based on CONFIG_DA_MON_EVENTS_ID here
|
|
|
|
#endif /* CONFIG_DA_MON_EVENTS_ID */
|
|
#endif /* _TRACE_RV_H */
|
|
|
|
/* This part ust be outside protection */
|
|
#undef TRACE_INCLUDE_PATH
|
|
#define TRACE_INCLUDE_PATH .
|
|
#define TRACE_INCLUDE_FILE rv_trace
|
|
#include <trace/define_trace.h>
|