From 53f1f0ca4eb1890673992697c19e4e1507ec4ac5 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Wed, 1 Jun 2011 14:01:10 -0400 Subject: [PATCH] Add prio and nice contexts Signed-off-by: Mathieu Desnoyers --- Makefile | 3 +- ltt-debugfs-abi.c | 2 ++ ltt-debugfs-abi.h | 1 + ltt-events.h | 1 + lttng-context-nice.c | 65 ++++++++++++++++++++++++++++++++++++++++++++ lttng-context-pid.c | 2 +- lttng-context-prio.c | 8 +++--- 7 files changed, 76 insertions(+), 6 deletions(-) create mode 100644 lttng-context-nice.c diff --git a/Makefile b/Makefile index 8f364dbf..fa337a0f 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,8 @@ obj-m += ltt-ring-buffer-metadata-client.o obj-m += ltt-relay.o ltt-relay-objs := ltt-events.o ltt-debugfs-abi.o \ ltt-probes.o ltt-core.o ltt-context.o \ - lttng-context-pid.o lttng-context-comm.o + lttng-context-pid.o lttng-context-comm.o \ + lttng-context-prio.o lttng-context-nice.o obj-m += probes/ obj-m += lib/ diff --git a/ltt-debugfs-abi.c b/ltt-debugfs-abi.c index aee5bf5d..37b78de0 100644 --- a/ltt-debugfs-abi.c +++ b/ltt-debugfs-abi.c @@ -154,6 +154,8 @@ long lttng_abi_add_context(struct file *file, return lttng_add_pid_to_ctx(ctx); case LTTNG_KERNEL_CONTEXT_PRIO: return lttng_add_prio_to_ctx(ctx); + case LTTNG_KERNEL_CONTEXT_NICE: + return lttng_add_nice_to_ctx(ctx); case LTTNG_KERNEL_CONTEXT_PERF_COUNTER: return -ENOSYS; case LTTNG_KERNEL_CONTEXT_COMM: diff --git a/ltt-debugfs-abi.h b/ltt-debugfs-abi.h index 586d3a5b..8483b275 100644 --- a/ltt-debugfs-abi.h +++ b/ltt-debugfs-abi.h @@ -66,6 +66,7 @@ enum lttng_kernel_context_type { LTTNG_KERNEL_CONTEXT_PERF_COUNTER, LTTNG_KERNEL_CONTEXT_COMM, LTTNG_KERNEL_CONTEXT_PRIO, + LTTNG_KERNEL_CONTEXT_NICE, }; struct lttng_kernel_perf_counter_ctx { diff --git a/ltt-events.h b/ltt-events.h index cb6ee211..b9bb3bb9 100644 --- a/ltt-events.h +++ b/ltt-events.h @@ -275,6 +275,7 @@ void lttng_destroy_context(struct lttng_ctx *ctx); int lttng_add_pid_to_ctx(struct lttng_ctx **ctx); int lttng_add_comm_to_ctx(struct lttng_ctx **ctx); int lttng_add_prio_to_ctx(struct lttng_ctx **ctx); +int lttng_add_nice_to_ctx(struct lttng_ctx **ctx); #ifdef CONFIG_KPROBES int lttng_kprobes_register(const char *name, diff --git a/lttng-context-nice.c b/lttng-context-nice.c new file mode 100644 index 00000000..d7fafb9d --- /dev/null +++ b/lttng-context-nice.c @@ -0,0 +1,65 @@ +/* + * (C) Copyright 2009-2011 - + * Mathieu Desnoyers + * + * LTTng nice context. + * + * Dual LGPL v2.1/GPL v2 license. + */ + +#include +#include +#include +#include "ltt-events.h" +#include "wrapper/ringbuffer/frontend_types.h" +#include "wrapper/vmalloc.h" +#include "ltt-tracer.h" + +static +size_t nice_get_size(size_t offset) +{ + size_t size = 0; + + size += lib_ring_buffer_align(offset, ltt_alignof(int)); + size += sizeof(int); + return size; +} + +static +void nice_record(struct lttng_ctx_field *field, + struct lib_ring_buffer_ctx *ctx, + struct ltt_channel *chan) +{ + int nice; + + nice = task_nice(current); + lib_ring_buffer_align_ctx(ctx, ltt_alignof(nice)); + chan->ops->event_write(ctx, &nice, sizeof(nice)); +} + +int lttng_add_nice_to_ctx(struct lttng_ctx **ctx) +{ + struct lttng_ctx_field *field; + int ret; + + field = lttng_append_context(ctx); + if (!field) + return ret; + field->event_field.name = "nice"; + field->event_field.type.atype = atype_integer; + field->event_field.type.u.basic.integer.size = sizeof(int) * CHAR_BIT; + field->event_field.type.u.basic.integer.alignment = ltt_alignof(int) * CHAR_BIT; + field->event_field.type.u.basic.integer.signedness = is_signed_type(int); + field->event_field.type.u.basic.integer.reverse_byte_order = 0; + field->event_field.type.u.basic.integer.base = 10; + field->event_field.type.u.basic.integer.encoding = lttng_encode_none; + field->get_size = nice_get_size; + field->record = nice_record; + wrapper_vmalloc_sync_all(); + return 0; +} +EXPORT_SYMBOL_GPL(lttng_add_nice_to_ctx); + +MODULE_LICENSE("GPL and additional rights"); +MODULE_AUTHOR("Mathieu Desnoyers"); +MODULE_DESCRIPTION("Linux Trace Toolkit Nice Context"); diff --git a/lttng-context-pid.c b/lttng-context-pid.c index 956920fd..ddd78a5d 100644 --- a/lttng-context-pid.c +++ b/lttng-context-pid.c @@ -62,4 +62,4 @@ EXPORT_SYMBOL_GPL(lttng_add_pid_to_ctx); MODULE_LICENSE("GPL and additional rights"); MODULE_AUTHOR("Mathieu Desnoyers"); -MODULE_DESCRIPTION("Linux Trace Toolkit Perf Support"); +MODULE_DESCRIPTION("Linux Trace Toolkit PID Context"); diff --git a/lttng-context-prio.c b/lttng-context-prio.c index a748929a..c8f83f48 100644 --- a/lttng-context-prio.c +++ b/lttng-context-prio.c @@ -32,9 +32,9 @@ void prio_record(struct lttng_ctx_field *field, { int prio; - pid = p->prio - MAX_RT_PRIO; - lib_ring_buffer_align_ctx(ctx, ltt_alignof(pid)); - chan->ops->event_write(ctx, &pid, sizeof(pid)); + prio = task_prio(current); + lib_ring_buffer_align_ctx(ctx, ltt_alignof(prio)); + chan->ops->event_write(ctx, &prio, sizeof(prio)); } int lttng_add_prio_to_ctx(struct lttng_ctx **ctx) @@ -62,4 +62,4 @@ EXPORT_SYMBOL_GPL(lttng_add_prio_to_ctx); MODULE_LICENSE("GPL and additional rights"); MODULE_AUTHOR("Mathieu Desnoyers"); -MODULE_DESCRIPTION("Linux Trace Toolkit Perf Support"); +MODULE_DESCRIPTION("Linux Trace Toolkit Priority Context"); -- 2.34.1