[RFC,lttng-tools] Add kernel and userspace callstack event context
diff mbox

Message ID 1490966262-21411-1-git-send-email-mathieu.desnoyers@efficios.com
State RFC
Headers show

Commit Message

Mathieu Desnoyers March 31, 2017, 1:17 p.m. UTC
From: Francis Giraldeau <francis.giraldeau at gmail.com>

LTTng callstack context. The callstack context can be added to any kernel
channel. It records either the kernel or the userspace callstack, up to a
max depth. The context is a CTF sequence, such that it uses only the space
required for the number of callstack entries.

The symbol name resolution is left to the trace reader.

Signed-off-by: Francis Giraldeau <francis.giraldeau at gmail.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
---
 include/lttng/event.h                | 2 ++
 src/bin/lttng-sessiond/context.c     | 6 ++++++
 src/bin/lttng/commands/add_context.c | 4 ++++
 src/common/lttng-kernel.h            | 2 ++
 4 files changed, 14 insertions(+)

Patch
diff mbox

diff --git a/include/lttng/event.h b/include/lttng/event.h
index 16b4d4f..cd62cfb 100644
--- a/include/lttng/event.h
+++ b/include/lttng/event.h
@@ -142,6 +142,8 @@  enum lttng_event_context_type {
 	LTTNG_EVENT_CONTEXT_PREEMPTIBLE		= 17,
 	LTTNG_EVENT_CONTEXT_NEED_RESCHEDULE	= 18,
 	LTTNG_EVENT_CONTEXT_MIGRATABLE		= 19,
+	LTTNG_EVENT_CONTEXT_CALLSTACK_KERNEL	= 20,
+	LTTNG_EVENT_CONTEXT_CALLSTACK_USER	= 21,
 };
 
 enum lttng_event_field_type {
diff --git a/src/bin/lttng-sessiond/context.c b/src/bin/lttng-sessiond/context.c
index 9c3a394..b4d82ff 100644
--- a/src/bin/lttng-sessiond/context.c
+++ b/src/bin/lttng-sessiond/context.c
@@ -241,6 +241,12 @@  int context_kernel_add(struct ltt_kernel_session *ksession,
 	case LTTNG_EVENT_CONTEXT_MIGRATABLE:
 		kctx->ctx.ctx = LTTNG_KERNEL_CONTEXT_MIGRATABLE;
 		break;
+	case LTTNG_EVENT_CONTEXT_CALLSTACK_KERNEL:
+		kctx->ctx.ctx = LTTNG_KERNEL_CONTEXT_CALLSTACK_KERNEL;
+		break;
+	case LTTNG_EVENT_CONTEXT_CALLSTACK_USER:
+		kctx->ctx.ctx = LTTNG_KERNEL_CONTEXT_CALLSTACK_USER;
+		break;
 	default:
 		ret = LTTNG_ERR_KERN_CONTEXT_FAIL;
 		goto error;
diff --git a/src/bin/lttng/commands/add_context.c b/src/bin/lttng/commands/add_context.c
index df722bb..c2f3bf1 100644
--- a/src/bin/lttng/commands/add_context.c
+++ b/src/bin/lttng/commands/add_context.c
@@ -78,6 +78,8 @@  enum context_type {
 	CONTEXT_PREEMPTIBLE  = 17,
 	CONTEXT_NEED_RESCHEDULE = 18,
 	CONTEXT_MIGRATABLE   = 19,
+	CONTEXT_CALLSTACK_KERNEL = 20,
+	CONTEXT_CALLSTACK_USER = 21,
 };
 
 /*
@@ -234,6 +236,8 @@  const struct ctx_opts {
 	{ "preemptible", CONTEXT_PREEMPTIBLE },
 	{ "need_reschedule", CONTEXT_NEED_RESCHEDULE },
 	{ "migratable", CONTEXT_MIGRATABLE },
+	{ "callstack-kernel", CONTEXT_CALLSTACK_KERNEL },
+	{ "callstack-user", CONTEXT_CALLSTACK_USER },
 
 	/* Perf options */
 
diff --git a/src/common/lttng-kernel.h b/src/common/lttng-kernel.h
index 8d87539..9d6d60c 100644
--- a/src/common/lttng-kernel.h
+++ b/src/common/lttng-kernel.h
@@ -58,6 +58,8 @@  enum lttng_kernel_context_type {
 	LTTNG_KERNEL_CONTEXT_PREEMPTIBLE    = 13,
 	LTTNG_KERNEL_CONTEXT_NEED_RESCHEDULE = 14,
 	LTTNG_KERNEL_CONTEXT_MIGRATABLE     = 15,
+	LTTNG_KERNEL_CONTEXT_CALLSTACK_KERNEL = 16,
+	LTTNG_KERNEL_CONTEXT_CALLSTACK_USER   = 17,
 };
 
 /* Perf counter attributes */