From: Mathieu Desnoyers Date: Fri, 29 Jul 2011 16:06:10 +0000 (-0400) Subject: Add calibration ioctl X-Git-Tag: v2.0-pre4~1 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=57105fc258cabb75b3a579aaba53b2024fd340e0;p=lttng-modules.git Add calibration ioctl Signed-off-by: Mathieu Desnoyers --- diff --git a/Makefile b/Makefile index e93792c8..07c32268 100644 --- a/Makefile +++ b/Makefile @@ -19,7 +19,7 @@ ltt-relay-objs := ltt-events.o ltt-debugfs-abi.o \ lttng-context-prio.o lttng-context-nice.o \ lttng-context-vpid.o lttng-context-tid.o \ lttng-context-vtid.o lttng-context-ppid.o \ - lttng-context-vppid.o + lttng-context-vppid.o lttng-calibrate.o ifneq ($(CONFIG_PERF_EVENTS),) ltt-relay-objs += $(shell \ diff --git a/ltt-debugfs-abi.c b/ltt-debugfs-abi.c index a5f8e7ac..31465d83 100644 --- a/ltt-debugfs-abi.c +++ b/ltt-debugfs-abi.c @@ -220,6 +220,20 @@ long lttng_ioctl(struct file *file, unsigned int cmd, unsigned long arg) case LTTNG_KERNEL_WAIT_QUIESCENT: synchronize_trace(); return 0; + case LTTNG_KERNEL_CALIBRATE: + { + struct lttng_calibrate __user *ucalibrate = + (struct lttng_calibrate __user *) arg; + struct lttng_calibrate calibrate; + int ret; + + if (copy_from_user(&calibrate, ucalibrate, sizeof(calibrate))) + return -EFAULT; + ret = lttng_calibrate(&calibrate); + if (copy_to_user(ucalibrate, &calibrate, sizeof(calibrate))) + return -EFAULT; + return ret; + } default: return -ENOIOCTLCMD; } diff --git a/ltt-debugfs-abi.h b/ltt-debugfs-abi.h index 3b8e72ea..3a2b81f1 100644 --- a/ltt-debugfs-abi.h +++ b/ltt-debugfs-abi.h @@ -81,6 +81,19 @@ struct lttng_kernel_tracer_version { uint32_t sublevel; }; +enum lttng_calibrate_type { + LTTNG_CALIBRATE_KRETPROBE, +}; + +struct lttng_calibrate { + enum lttng_calibrate_type type; /* type (input) */ + union { + struct { + uint64_t addr; /* address to probe (output) */ + } kretprobe; + } u; +}; + enum lttng_kernel_context_type { LTTNG_KERNEL_CONTEXT_PID = 0, LTTNG_KERNEL_CONTEXT_PERF_COUNTER = 1, @@ -113,6 +126,8 @@ struct lttng_kernel_context { _IOR(0xF6, 0x41, struct lttng_kernel_tracer_version) #define LTTNG_KERNEL_TRACEPOINT_LIST _IO(0xF6, 0x42) #define LTTNG_KERNEL_WAIT_QUIESCENT _IO(0xF6, 0x43) +#define LTTNG_KERNEL_CALIBRATE \ + _IOWR(0xF6, 0x44, struct lttng_calibrate) /* Session FD ioctl */ #define LTTNG_KERNEL_METADATA \ diff --git a/ltt-events.h b/ltt-events.h index 6cc4ea3f..525fc982 100644 --- a/ltt-events.h +++ b/ltt-events.h @@ -415,6 +415,8 @@ void lttng_ftrace_destroy_private(struct ltt_event *event) } #endif +int lttng_calibrate(struct lttng_calibrate *calibrate); + extern const struct file_operations lttng_tracepoint_list_fops; #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) diff --git a/lttng-calibrate.c b/lttng-calibrate.c new file mode 100644 index 00000000..45c01e32 --- /dev/null +++ b/lttng-calibrate.c @@ -0,0 +1,28 @@ +/* + * lttng-calibrate.c + * + * Copyright 2011 (c) - Mathieu Desnoyers + * + * LTTng probe calibration. + * + * Dual LGPL v2.1/GPL v2 license. + */ + +#include "ltt-debugfs-abi.h" +#include "ltt-events.h" + +void lttng_calibrate_kretprobe(void) +{ +} + +int lttng_calibrate(struct lttng_calibrate *calibrate) +{ + switch (calibrate->type) { + case LTTNG_CALIBRATE_KRETPROBE: + calibrate->u.kretprobe.addr = <tng_calibrate_kretprobe; + break; + default: + return -EINVAL; + } + return 0; +}