From mboxrd@z Thu Jan 1 00:00:00 1970 From: mathieu.desnoyers@efficios.com (Mathieu Desnoyers) Date: Tue, 4 Oct 2016 21:51:31 +0000 (UTC) Subject: [lttng-dev] [PATCH lttng-modules v2] Add support for i2c tracepoints In-Reply-To: <20161004210705.20488-1-simon.marchi@ericsson.com> References: <20161004210705.20488-1-simon.marchi@ericsson.com> Message-ID: <726794854.46219.1475617891786.JavaMail.zimbra@efficios.com> Merged with edit, thanks! Mathieu ----- On Oct 4, 2016, at 5:07 PM, Simon Marchi simon.marchi at ericsson.com wrote: > New in v2: > > * Add module parameter (extract_sensitive_payload) to control the extraction > of possibly sensitive data from events. > > This patch teaches lttng-modules about the i2c tracepoints in the Linux > kernel. > > It contains the following tracepoints: > > * i2c_write > * i2c_read > * i2c_reply > * i2c_result > > I translated the fields and assignments from the kernel's > include/trace/events/i2c.h as well as I could. I also tried building > this module against a kernel without CONFIG_I2C, and it built fine (the > required types are unconditionally defined). So I don't think any "#if > CONFIG_I2C" or similar are required. > > Signed-off-by: Simon Marchi > --- > instrumentation/events/lttng-module/i2c.h | 124 ++++++++++++++++++++++++++++++ > probes/Kbuild | 1 + > probes/lttng-probe-i2c.c | 54 +++++++++++++ > 3 files changed, 179 insertions(+) > create mode 100644 instrumentation/events/lttng-module/i2c.h > create mode 100644 probes/lttng-probe-i2c.c > > diff --git a/instrumentation/events/lttng-module/i2c.h > b/instrumentation/events/lttng-module/i2c.h > new file mode 100644 > index 0000000..8ca12f9 > --- /dev/null > +++ b/instrumentation/events/lttng-module/i2c.h > @@ -0,0 +1,124 @@ > +#undef TRACE_SYSTEM > +#define TRACE_SYSTEM i2c > + > +#if !defined(LTTNG_TRACE_I2C_H) || defined(TRACE_HEADER_MULTI_READ) > +#define LTTNG_TRACE_I2C_H > + > +#include > + > +#ifndef _TRACE_I2C_DEF_ > +#define _TRACE_I2C_DEF_ > + > +#endif /* _TRACE_I2C_DEF_ */ > + > +/* > + * __i2c_transfer() write request > + */ > +LTTNG_TRACEPOINT_EVENT_CODE(i2c_write, > + > + TP_PROTO(const struct i2c_adapter *adap, const struct i2c_msg *msg, > + int num), > + > + TP_ARGS(adap, msg, num), > + > + TP_locvar( > + int extract_sensitive_payload; > + ), > + > + TP_code_pre( > + tp_locvar->extract_sensitive_payload > + = ACCESS_ONCE(extract_sensitive_payload); > + ), > + > + TP_FIELDS( > + ctf_integer(int, adapter_nr, adap->nr) > + ctf_integer(__u16, msg_nr, num) > + ctf_integer(__u16, addr, msg->addr) > + ctf_integer(__u16, flags, msg->flags) > + ctf_integer(__u16, len, msg->len) > + ctf_sequence_hex(__u8, buf, > + tp_locvar->extract_sensitive_payload ? > + msg->buf : NULL, > + __u16, > + tp_locvar->extract_sensitive_payload ? > + msg->len : 0) > + ), > + > + TP_code_post() > +) > + > +/* > + * __i2c_transfer() read request > + */ > +LTTNG_TRACEPOINT_EVENT(i2c_read, > + > + TP_PROTO(const struct i2c_adapter *adap, const struct i2c_msg *msg, > + int num), > + > + TP_ARGS(adap, msg, num), > + > + TP_FIELDS( > + ctf_integer(int, adapter_nr, adap->nr) > + ctf_integer(__u16, msg_nr, num) > + ctf_integer(__u16, addr, msg->addr) > + ctf_integer(__u16, flags, msg->flags) > + ctf_integer(__u16, len, msg->len) > + ) > +) > + > +/* > + * __i2c_transfer() read reply > + */ > +LTTNG_TRACEPOINT_EVENT_CODE(i2c_reply, > + > + TP_PROTO(const struct i2c_adapter *adap, const struct i2c_msg *msg, > + int num), > + > + TP_ARGS(adap, msg, num), > + > + TP_locvar( > + int extract_sensitive_payload; > + ), > + > + TP_code_pre( > + tp_locvar->extract_sensitive_payload > + = ACCESS_ONCE(extract_sensitive_payload); > + ), > + > + TP_FIELDS( > + ctf_integer(int, adapter_nr, adap->nr) > + ctf_integer(__u16, msg_nr, num) > + ctf_integer(__u16, addr, msg->addr) > + ctf_integer(__u16, flags, msg->flags) > + ctf_integer(__u16, len, msg->len) > + ctf_sequence_hex(__u8, buf, > + tp_locvar->extract_sensitive_payload ? > + msg->buf : NULL, > + __u16, > + tp_locvar->extract_sensitive_payload ? > + msg->len : 0) > + ), > + > + TP_code_post() > +) > + > +/* > + * __i2c_transfer() result > + */ > +LTTNG_TRACEPOINT_EVENT(i2c_result, > + > + TP_PROTO(const struct i2c_adapter *adap, int num, int ret), > + > + TP_ARGS(adap, num, ret), > + > + TP_FIELDS( > + ctf_integer(int, adapter_nr, adap->nr) > + ctf_integer(__u16, nr_msgs, num) > + ctf_integer(__s16, ret, ret) > + ) > +) > + > +#endif /* LTTNG_TRACE_I2C_H */ > + > +/* This part must be outside protection */ > +#include > diff --git a/probes/Kbuild b/probes/Kbuild > index 8ae9a6b..ca7c0b1 100644 > --- a/probes/Kbuild > +++ b/probes/Kbuild > @@ -5,6 +5,7 @@ include $(TOP_LTTNG_MODULES_DIR)/Makefile.ABI.workarounds > ccflags-y += -I$(TOP_LTTNG_MODULES_DIR) > > obj-$(CONFIG_LTTNG) += lttng-probe-sched.o > +obj-$(CONFIG_LTTNG) += lttng-probe-i2c.o > obj-$(CONFIG_LTTNG) += lttng-probe-irq.o > obj-$(CONFIG_LTTNG) += lttng-probe-timer.o > obj-$(CONFIG_LTTNG) += lttng-probe-kmem.o > diff --git a/probes/lttng-probe-i2c.c b/probes/lttng-probe-i2c.c > new file mode 100644 > index 0000000..a14d91c > --- /dev/null > +++ b/probes/lttng-probe-i2c.c > @@ -0,0 +1,54 @@ > +/* > + * probes/lttng-probe-i2c.c > + * > + * LTTng i2c probes. > + * > + * Copyright (C) 2012 Mathieu Desnoyers > + * > + * This library is free software; you can redistribute it and/or > + * modify it under the terms of the GNU Lesser General Public > + * License as published by the Free Software Foundation; only > + * version 2.1 of the License. > + * > + * This library is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + * Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public > + * License along with this library; if not, write to the Free Software > + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA > + */ > + > +#include > +#include > +#include > + > +/* > + * Create the tracepoint static inlines from the kernel to validate that our > + * trace event macros match the kernel we run on. > + */ > +#include > + > +/* > + * Create LTTng tracepoint probes. > + */ > +#define LTTNG_PACKAGE_BUILD > +#define CREATE_TRACE_POINTS > +#define TRACE_INCLUDE_PATH instrumentation/events/lttng-module > + > +static int extract_sensitive_payload = 0; > +module_param(extract_sensitive_payload, int, 0644); > +MODULE_PARM_DESC(extract_sensitive_payload, > + "Whether to extract possibly sensitive data from events (i2c " > + "buffer contents) or not (1 or 0, default: 0)."); > + > +#include > + > +MODULE_LICENSE("GPL and additional rights"); > +MODULE_AUTHOR("Mathieu Desnoyers "); > +MODULE_DESCRIPTION("LTTng i2c probes"); > +MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "." > + __stringify(LTTNG_MODULES_MINOR_VERSION) "." > + __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION) > + LTTNG_MODULES_EXTRAVERSION); > -- > 2.10.1 > > _______________________________________________ > lttng-dev mailing list > lttng-dev at lists.lttng.org > https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev -- Mathieu Desnoyers EfficiOS Inc. http://www.efficios.com