From: Philippe Gerum <[email protected]>
Signed-off-by: Philippe Gerum <[email protected]>
[Jan: add missing struct xnsched_quota_group declaration, style fixes]
Signed-off-by: Jan Kiszka <[email protected]>
---
.../cobalt/kernel/dovetail/pipeline/trace.h | 52 ++++--------
kernel/cobalt/trace/cobalt-core.h | 84 +++++++++++++++++++
2 files changed, 102 insertions(+), 34 deletions(-)
diff --git a/include/cobalt/kernel/dovetail/pipeline/trace.h
b/include/cobalt/kernel/dovetail/pipeline/trace.h
index 819b8a713..e39fdfa7c 100644
--- a/include/cobalt/kernel/dovetail/pipeline/trace.h
+++ b/include/cobalt/kernel/dovetail/pipeline/trace.h
@@ -22,96 +22,80 @@
#include <linux/types.h>
#include <linux/kconfig.h>
#include <cobalt/uapi/kernel/trace.h>
+#include <trace/events/cobalt-core.h>
+#include <cobalt/kernel/assert.h>
static inline int xntrace_max_begin(unsigned long v)
{
-//#chz: NTD
- //ipipe_trace_begin(v);
+ TODO();
return 0;
}
static inline int xntrace_max_end(unsigned long v)
{
-//#chz: NTD
- //ipipe_trace_end(v);
+ TODO();
return 0;
}
static inline int xntrace_max_reset(void)
{
-//#chz: NTD
- //ipipe_trace_max_reset();
+ TODO();
return 0;
}
static inline int xntrace_user_start(void)
{
-//#chz: NTD
- //return ipipe_trace_frozen_reset();
+ TODO();
return 0;
}
static inline int xntrace_user_stop(unsigned long v)
{
-//#chz: NTD
- //ipipe_trace_freeze(v);
+ TODO();
return 0;
}
static inline int xntrace_user_freeze(unsigned long v, int once)
{
- int ret = 0;
-//#chz: NTD
-/*
- if (!once)
- ret = ipipe_trace_frozen_reset();
-
- ipipe_trace_freeze(v);
-*/
- return ret;
+ trace_cobalt_trace_longval(0, v);
+ trace_cobalt_trigger("freeze");
+ return 0;
}
static inline int xntrace_special(unsigned char id, unsigned long v)
{
-//#chz: NTD
-// ipipe_trace_special(id, v);
+ trace_cobalt_trace_longval(id, v);
return 0;
}
static inline int xntrace_special_u64(unsigned char id,
- unsigned long long v)
+ unsigned long long v)
{
-//#chz: NTD
-// ipipe_trace_special(id, (unsigned long)(v >> 32));
-// ipipe_trace_special(id, (unsigned long)(v & 0xFFFFFFFF));
+ trace_cobalt_trace_longval(id, v);
return 0;
}
static inline int xntrace_pid(pid_t pid, short prio)
{
-//#chz: NTD
-// ipipe_trace_pid(pid, prio);
+ trace_cobalt_trace_pid(pid, prio);
return 0;
}
-static inline int xntrace_tick(unsigned long delay_ticks)
+static inline int xntrace_tick(unsigned long delay_ticks) /* ns */
{
-//#chz: NTD
-// ipipe_trace_event(0, delay_ticks);
+ trace_cobalt_tick_shot(delay_ticks);
return 0;
}
static inline int xntrace_panic_freeze(void)
{
-//#chz: NTD
-// ipipe_trace_panic_freeze();
+ TODO();
return 0;
}
static inline int xntrace_panic_dump(void)
{
-//#chz: NTD
-// ipipe_trace_panic_dump();
+ TODO();
return 0;
}
diff --git a/kernel/cobalt/trace/cobalt-core.h
b/kernel/cobalt/trace/cobalt-core.h
index 96eec3664..76240d245 100644
--- a/kernel/cobalt/trace/cobalt-core.h
+++ b/kernel/cobalt/trace/cobalt-core.h
@@ -24,6 +24,16 @@
#define _TRACE_COBALT_CORE_H
#include <linux/tracepoint.h>
+#include <linux/math64.h>
+#include <cobalt/kernel/timer.h>
+#include <cobalt/uapi/kernel/types.h>
+
+struct xnsched;
+struct xnthread;
+struct xnsynch;
+struct xnsched_class;
+struct xnsched_quota_group;
+struct xnthread_init_attr;
DECLARE_EVENT_CLASS(thread_event,
TP_PROTO(struct xnthread *thread),
@@ -768,6 +778,80 @@ DEFINE_EVENT(synch_post_event, cobalt_synch_forget,
TP_ARGS(synch)
);
+TRACE_EVENT(cobalt_tick_shot,
+ TP_PROTO(s64 delta),
+ TP_ARGS(delta),
+
+ TP_STRUCT__entry(
+ __field(u64, secs)
+ __field(u32, nsecs)
+ __field(s64, delta)
+ ),
+
+ TP_fast_assign(
+ __entry->delta = delta;
+ __entry->secs = div_u64_rem(trace_clock_local() + delta,
+ NSEC_PER_SEC, &__entry->nsecs);
+ ),
+
+ TP_printk("next tick at %Lu.%06u (delay: %Ld us)",
+ (unsigned long long)__entry->secs,
+ __entry->nsecs / 1000, div_s64(__entry->delta, 1000))
+);
+
+TRACE_EVENT(cobalt_trace,
+ TP_PROTO(const char *msg),
+ TP_ARGS(msg),
+ TP_STRUCT__entry(
+ __string(msg, msg)
+ ),
+ TP_fast_assign(
+ __assign_str(msg, msg);
+ ),
+ TP_printk("%s", __get_str(msg))
+);
+
+TRACE_EVENT(cobalt_trace_longval,
+ TP_PROTO(int id, u64 val),
+ TP_ARGS(id, val),
+ TP_STRUCT__entry(
+ __field(int, id)
+ __field(u64, val)
+ ),
+ TP_fast_assign(
+ __entry->id = id;
+ __entry->val = val;
+ ),
+ TP_printk("id=%#x, v=%llu", __entry->id, __entry->val)
+);
+
+TRACE_EVENT(cobalt_trace_pid,
+ TP_PROTO(pid_t pid, int prio),
+ TP_ARGS(pid, prio),
+ TP_STRUCT__entry(
+ __field(pid_t, pid)
+ __field(int, prio)
+ ),
+ TP_fast_assign(
+ __entry->pid = pid;
+ __entry->prio = prio;
+ ),
+ TP_printk("pid=%d, prio=%d", __entry->pid, __entry->prio)
+);
+
+/* Basically cobalt_trace() + trigger point */
+TRACE_EVENT(cobalt_trigger,
+ TP_PROTO(const char *issuer),
+ TP_ARGS(issuer),
+ TP_STRUCT__entry(
+ __string(issuer, issuer)
+ ),
+ TP_fast_assign(
+ __assign_str(issuer, issuer);
+ ),
+ TP_printk("%s", __get_str(issuer))
+);
+
#endif /* _TRACE_COBALT_CORE_H */
/* This part must be outside protection */
--
2.26.2