Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1458440 > unrolled thread
| Started by | Chunyan Zhang <zhang.chunyan@linaro.org> |
|---|---|
| First post | 2016-08-09 08:40 +0200 |
| Last post | 2016-08-09 09:00 +0200 |
| Articles | 4 — 1 participant |
Back to article view | Back to linux.kernel
[PATCH V3 0/3] Integration of function trace with System Trace IP blocks Chunyan Zhang <zhang.chunyan@linaro.org> - 2016-08-09 08:40 +0200
[PATCH V3 2/3] stm class: ftrace: Add ftrace-export-over-stm driver Chunyan Zhang <zhang.chunyan@linaro.org> - 2016-08-09 08:40 +0200
Re: [PATCH V3 2/3] stm class: ftrace: Add ftrace-export-over-stm driver Chunyan Zhang <zhang.chunyan@linaro.org> - 2016-08-09 09:00 +0200
Re: [PATCH V3 0/3] Integration of function trace with System Trace IP blocks Chunyan Zhang <zhang.chunyan@linaro.org> - 2016-08-09 09:00 +0200
| From | Chunyan Zhang <zhang.chunyan@linaro.org> |
|---|---|
| Date | 2016-08-09 08:40 +0200 |
| Subject | [PATCH V3 0/3] Integration of function trace with System Trace IP blocks |
| Message-ID | <s48RH-3Wx-15@gated-at.bofh.it> |
IP blocks allowing a variety of trace sources to log debugging
information to a pre-defined area have been introduced on a couple of
architecture [1][2]. These system trace blocks (also known as STM)
typically follow the MIPI STPv2 protocol [3] and provide a system wide
logging facility to any device, running a kernel or not, with access
to the block's log entry port(s). Since each trace message has a
timestamp, it is possible to correlate events happening in the entire
system rather than being confined to the logging facility of a single
entity.
This patchset is trying to use STM IP blocks to store some function
tracing information produced by Ftrace and I'm taking the Function trace
(TRACE_FN) as the example in this patchset, but other types of traces
also can be supported.
Logging information generated by the function trace subsystem
and gathered in the coresight sink can be used in conjunction with
trace data from other board components, also collected in the same
trace sink. This example is using ARM coresight STM but the same would
apply to any architecture wishing to do the same.
In this patchset made many modifications according to the comments on
last patchset, the first two patches of this serial have been midified
completely. This patchset implemented the similar features, but in the
completely different way.
Comments and advice would be greatly appreciated.
Thanks,
Chunyan
[1]. https://lwn.net/Articles/674746/
[2]. http://lxr.free-electrons.com/source/drivers/hwtracing/intel_th/
[3]. http://mipi.org/specifications/debug#STP
Changes v3:
* Rebased on v4.8-rc1.
* Added trace_export class, and make traces can be exported to not only
ring buffer but also other area such as STM.
* Made stm_ftrace as an trace_export.
* More detailed changes are described in change log of each patch.
Changes v2:
* Addressed comments from Alexander Shishkin:
- Modified some ambiguous change logs.
- Decoupled stm_ftrace and trace_output interface to STM.
- Changed the file name from stm_ftrace.c to stm/ftrace.c.
- Implemented link/unlink hooks for stm_ftrace.
* Removed useless header file include from stm/ftrace.c
* Added Acked-by from Steven Rostedt on 4/4.
Chunyan Zhang (3):
tracing: add a possibility of exporting function trace to other places
instead of ring buffer only
stm class: ftrace: Add ftrace-export-over-stm driver
stm: Mark the functions of writing buffer with notrace
drivers/hwtracing/coresight/coresight-stm.c | 2 +-
drivers/hwtracing/intel_th/sth.c | 11 ++-
drivers/hwtracing/stm/Kconfig | 11 +++
drivers/hwtracing/stm/Makefile | 2 +
drivers/hwtracing/stm/core.c | 7 +-
drivers/hwtracing/stm/dummy_stm.c | 2 +-
drivers/hwtracing/stm/ftrace.c | 87 +++++++++++++++++++
include/linux/stm.h | 4 +-
include/linux/trace.h | 31 +++++++
kernel/trace/trace.c | 124 +++++++++++++++++++++++++++-
kernel/trace/trace.h | 31 +++++++
11 files changed, 300 insertions(+), 12 deletions(-)
create mode 100644 drivers/hwtracing/stm/ftrace.c
create mode 100644 include/linux/trace.h
--
2.7.4
[toc] | [next] | [standalone]
| From | Chunyan Zhang <zhang.chunyan@linaro.org> |
|---|---|
| Date | 2016-08-09 08:40 +0200 |
| Subject | [PATCH V3 2/3] stm class: ftrace: Add ftrace-export-over-stm driver |
| Message-ID | <s48RH-3Wx-31@gated-at.bofh.it> |
| In reply to | #1458440 |
This patch adds a driver that models itself as an stm_source and
registers itself as a trace_export. Once the stm and stm_source
have been linked via sysfs, everything that is passed to the
interface from Ftrace subsystem will endup in the STM trace engine.
Signed-off-by: Chunyan Zhang <zhang.chunyan@linaro.org>
---
drivers/hwtracing/stm/Kconfig | 11 ++++++
drivers/hwtracing/stm/Makefile | 2 +
drivers/hwtracing/stm/ftrace.c | 87 ++++++++++++++++++++++++++++++++++++++++++
3 files changed, 100 insertions(+)
create mode 100644 drivers/hwtracing/stm/ftrace.c
diff --git a/drivers/hwtracing/stm/Kconfig b/drivers/hwtracing/stm/Kconfig
index 847a39b..b34ea96 100644
--- a/drivers/hwtracing/stm/Kconfig
+++ b/drivers/hwtracing/stm/Kconfig
@@ -39,4 +39,15 @@ config STM_SOURCE_HEARTBEAT
If you want to send heartbeat messages over STM devices,
say Y.
+config STM_SOURCE_FTRACE
+ tristate "Copy the output from kernel Ftrace to STM engine"
+ depends on TRACING
+ help
+ This option can be used to copy the output from kernel Ftrace
+ to STM engine. Enabling this option will introduce a slight
+ timing effect.
+
+ If you want to send kernel Ftrace messages over STM devices,
+ say Y.
+
endif
diff --git a/drivers/hwtracing/stm/Makefile b/drivers/hwtracing/stm/Makefile
index a9ce3d4..3abd84c 100644
--- a/drivers/hwtracing/stm/Makefile
+++ b/drivers/hwtracing/stm/Makefile
@@ -6,6 +6,8 @@ obj-$(CONFIG_STM_DUMMY) += dummy_stm.o
obj-$(CONFIG_STM_SOURCE_CONSOLE) += stm_console.o
obj-$(CONFIG_STM_SOURCE_HEARTBEAT) += stm_heartbeat.o
+obj-$(CONFIG_STM_SOURCE_FTRACE) += stm_ftrace.o
stm_console-y := console.o
stm_heartbeat-y := heartbeat.o
+stm_ftrace-y := ftrace.o
diff --git a/drivers/hwtracing/stm/ftrace.c b/drivers/hwtracing/stm/ftrace.c
new file mode 100644
index 0000000..1101f46
--- /dev/null
+++ b/drivers/hwtracing/stm/ftrace.c
@@ -0,0 +1,87 @@
+/*
+ * Simple kernel driver to link kernel Ftrace and an STM device
+ * Copyright (c) 2016, Linaro Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ */
+
+#include <linux/module.h>
+#include <linux/stm.h>
+#include <linux/trace.h>
+
+#define STM_FTRACE_NR_CHANNELS 1
+#define STM_FTRACE_CHAN 0
+
+static int stm_ftrace_link(struct stm_source_data *data);
+static void stm_ftrace_unlink(struct stm_source_data *data);
+
+static struct stm_ftrace {
+ struct stm_source_data data;
+ struct trace_export ftrace;
+} stm_ftrace = {
+ .data = {
+ .name = "ftrace",
+ .nr_chans = STM_FTRACE_NR_CHANNELS,
+ .link = stm_ftrace_link,
+ .unlink = stm_ftrace_unlink,
+ },
+};
+
+/**
+ * stm_ftrace_write() - write data to STM via 'stm_ftrace' source
+ * @buf: buffer containing the data packet
+ * @len: length of the data packet
+ */
+static void notrace
+stm_ftrace_write(const char *buf, unsigned int len)
+{
+ stm_source_write(&stm_ftrace.data, STM_FTRACE_CHAN, buf, len);
+}
+
+static int stm_ftrace_link(struct stm_source_data *data)
+{
+ struct stm_ftrace *sf = container_of(data, struct stm_ftrace, data);
+
+ strcpy(sf->ftrace.name, "stm_ftrace");
+ sf->ftrace.write = stm_ftrace_write;
+ sf->ftrace.next = NULL;
+
+ return register_trace_export(&sf->ftrace);
+}
+
+static void stm_ftrace_unlink(struct stm_source_data *data)
+{
+ struct stm_ftrace *sc = container_of(data, struct stm_ftrace, data);
+
+ unregister_trace_export(&sc->ftrace);
+}
+
+static int __init stm_ftrace_init(void)
+{
+ int ret;
+
+ ret = stm_source_register_device(NULL, &stm_ftrace.data);
+ if (ret)
+ pr_err("Failed to register stm_source - ftrace.\n");
+
+ return ret;
+}
+
+static void __exit stm_ftrace_exit(void)
+{
+ stm_source_unregister_device(&stm_ftrace.data);
+}
+
+module_init(stm_ftrace_init);
+module_exit(stm_ftrace_exit);
+
+MODULE_LICENSE("GPL v2");
+MODULE_DESCRIPTION("stm_ftrace driver");
+MODULE_AUTHOR("Chunyan Zhang <zhang.chunyan@linaro.org>");
--
2.7.4
[toc] | [prev] | [next] | [standalone]
| From | Chunyan Zhang <zhang.chunyan@linaro.org> |
|---|---|
| Date | 2016-08-09 09:00 +0200 |
| Subject | Re: [PATCH V3 2/3] stm class: ftrace: Add ftrace-export-over-stm driver |
| Message-ID | <s49b3-43i-9@gated-at.bofh.it> |
| In reply to | #1458442 |
Removing maxime.coquelin@st.com since it seems an unreachable address
On Tue, Aug 9, 2016 at 2:32 PM, Chunyan Zhang <zhang.chunyan@linaro.org> wrote:
> This patch adds a driver that models itself as an stm_source and
> registers itself as a trace_export. Once the stm and stm_source
> have been linked via sysfs, everything that is passed to the
> interface from Ftrace subsystem will endup in the STM trace engine.
>
> Signed-off-by: Chunyan Zhang <zhang.chunyan@linaro.org>
> ---
> drivers/hwtracing/stm/Kconfig | 11 ++++++
> drivers/hwtracing/stm/Makefile | 2 +
> drivers/hwtracing/stm/ftrace.c | 87 ++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 100 insertions(+)
> create mode 100644 drivers/hwtracing/stm/ftrace.c
>
> diff --git a/drivers/hwtracing/stm/Kconfig b/drivers/hwtracing/stm/Kconfig
> index 847a39b..b34ea96 100644
> --- a/drivers/hwtracing/stm/Kconfig
> +++ b/drivers/hwtracing/stm/Kconfig
> @@ -39,4 +39,15 @@ config STM_SOURCE_HEARTBEAT
> If you want to send heartbeat messages over STM devices,
> say Y.
>
> +config STM_SOURCE_FTRACE
> + tristate "Copy the output from kernel Ftrace to STM engine"
> + depends on TRACING
> + help
> + This option can be used to copy the output from kernel Ftrace
> + to STM engine. Enabling this option will introduce a slight
> + timing effect.
> +
> + If you want to send kernel Ftrace messages over STM devices,
> + say Y.
> +
> endif
> diff --git a/drivers/hwtracing/stm/Makefile b/drivers/hwtracing/stm/Makefile
> index a9ce3d4..3abd84c 100644
> --- a/drivers/hwtracing/stm/Makefile
> +++ b/drivers/hwtracing/stm/Makefile
> @@ -6,6 +6,8 @@ obj-$(CONFIG_STM_DUMMY) += dummy_stm.o
>
> obj-$(CONFIG_STM_SOURCE_CONSOLE) += stm_console.o
> obj-$(CONFIG_STM_SOURCE_HEARTBEAT) += stm_heartbeat.o
> +obj-$(CONFIG_STM_SOURCE_FTRACE) += stm_ftrace.o
>
> stm_console-y := console.o
> stm_heartbeat-y := heartbeat.o
> +stm_ftrace-y := ftrace.o
> diff --git a/drivers/hwtracing/stm/ftrace.c b/drivers/hwtracing/stm/ftrace.c
> new file mode 100644
> index 0000000..1101f46
> --- /dev/null
> +++ b/drivers/hwtracing/stm/ftrace.c
> @@ -0,0 +1,87 @@
> +/*
> + * Simple kernel driver to link kernel Ftrace and an STM device
> + * Copyright (c) 2016, Linaro Ltd.
> + *
> + * This program is free software; you can redistribute it and/or modify it
> + * under the terms and conditions of the GNU General Public License,
> + * version 2, as published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope it will be useful, but WITHOUT
> + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
> + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
> + * more details.
> + */
> +
> +#include <linux/module.h>
> +#include <linux/stm.h>
> +#include <linux/trace.h>
> +
> +#define STM_FTRACE_NR_CHANNELS 1
> +#define STM_FTRACE_CHAN 0
> +
> +static int stm_ftrace_link(struct stm_source_data *data);
> +static void stm_ftrace_unlink(struct stm_source_data *data);
> +
> +static struct stm_ftrace {
> + struct stm_source_data data;
> + struct trace_export ftrace;
> +} stm_ftrace = {
> + .data = {
> + .name = "ftrace",
> + .nr_chans = STM_FTRACE_NR_CHANNELS,
> + .link = stm_ftrace_link,
> + .unlink = stm_ftrace_unlink,
> + },
> +};
> +
> +/**
> + * stm_ftrace_write() - write data to STM via 'stm_ftrace' source
> + * @buf: buffer containing the data packet
> + * @len: length of the data packet
> + */
> +static void notrace
> +stm_ftrace_write(const char *buf, unsigned int len)
> +{
> + stm_source_write(&stm_ftrace.data, STM_FTRACE_CHAN, buf, len);
> +}
> +
> +static int stm_ftrace_link(struct stm_source_data *data)
> +{
> + struct stm_ftrace *sf = container_of(data, struct stm_ftrace, data);
> +
> + strcpy(sf->ftrace.name, "stm_ftrace");
> + sf->ftrace.write = stm_ftrace_write;
> + sf->ftrace.next = NULL;
> +
> + return register_trace_export(&sf->ftrace);
> +}
> +
> +static void stm_ftrace_unlink(struct stm_source_data *data)
> +{
> + struct stm_ftrace *sc = container_of(data, struct stm_ftrace, data);
> +
> + unregister_trace_export(&sc->ftrace);
> +}
> +
> +static int __init stm_ftrace_init(void)
> +{
> + int ret;
> +
> + ret = stm_source_register_device(NULL, &stm_ftrace.data);
> + if (ret)
> + pr_err("Failed to register stm_source - ftrace.\n");
> +
> + return ret;
> +}
> +
> +static void __exit stm_ftrace_exit(void)
> +{
> + stm_source_unregister_device(&stm_ftrace.data);
> +}
> +
> +module_init(stm_ftrace_init);
> +module_exit(stm_ftrace_exit);
> +
> +MODULE_LICENSE("GPL v2");
> +MODULE_DESCRIPTION("stm_ftrace driver");
> +MODULE_AUTHOR("Chunyan Zhang <zhang.chunyan@linaro.org>");
> --
> 2.7.4
>
[toc] | [prev] | [next] | [standalone]
| From | Chunyan Zhang <zhang.chunyan@linaro.org> |
|---|---|
| Date | 2016-08-09 09:00 +0200 |
| Message-ID | <s49b3-43i-11@gated-at.bofh.it> |
| In reply to | #1458440 |
Removing maxime.coquelin@st.com since it seems an unreachable address On Tue, Aug 9, 2016 at 2:32 PM, Chunyan Zhang <zhang.chunyan@linaro.org> wrote: > IP blocks allowing a variety of trace sources to log debugging > information to a pre-defined area have been introduced on a couple of > architecture [1][2]. These system trace blocks (also known as STM) > typically follow the MIPI STPv2 protocol [3] and provide a system wide > logging facility to any device, running a kernel or not, with access > to the block's log entry port(s). Since each trace message has a > timestamp, it is possible to correlate events happening in the entire > system rather than being confined to the logging facility of a single > entity. > > This patchset is trying to use STM IP blocks to store some function > tracing information produced by Ftrace and I'm taking the Function trace > (TRACE_FN) as the example in this patchset, but other types of traces > also can be supported. > > Logging information generated by the function trace subsystem > and gathered in the coresight sink can be used in conjunction with > trace data from other board components, also collected in the same > trace sink. This example is using ARM coresight STM but the same would > apply to any architecture wishing to do the same. > > In this patchset made many modifications according to the comments on > last patchset, the first two patches of this serial have been midified > completely. This patchset implemented the similar features, but in the > completely different way. > > Comments and advice would be greatly appreciated. > > Thanks, > Chunyan > > [1]. https://lwn.net/Articles/674746/ > [2]. http://lxr.free-electrons.com/source/drivers/hwtracing/intel_th/ > [3]. http://mipi.org/specifications/debug#STP > > Changes v3: > * Rebased on v4.8-rc1. > * Added trace_export class, and make traces can be exported to not only > ring buffer but also other area such as STM. > * Made stm_ftrace as an trace_export. > * More detailed changes are described in change log of each patch. > > Changes v2: > * Addressed comments from Alexander Shishkin: > - Modified some ambiguous change logs. > - Decoupled stm_ftrace and trace_output interface to STM. > - Changed the file name from stm_ftrace.c to stm/ftrace.c. > - Implemented link/unlink hooks for stm_ftrace. > * Removed useless header file include from stm/ftrace.c > * Added Acked-by from Steven Rostedt on 4/4. > > Chunyan Zhang (3): > tracing: add a possibility of exporting function trace to other places > instead of ring buffer only > stm class: ftrace: Add ftrace-export-over-stm driver > stm: Mark the functions of writing buffer with notrace > > drivers/hwtracing/coresight/coresight-stm.c | 2 +- > drivers/hwtracing/intel_th/sth.c | 11 ++- > drivers/hwtracing/stm/Kconfig | 11 +++ > drivers/hwtracing/stm/Makefile | 2 + > drivers/hwtracing/stm/core.c | 7 +- > drivers/hwtracing/stm/dummy_stm.c | 2 +- > drivers/hwtracing/stm/ftrace.c | 87 +++++++++++++++++++ > include/linux/stm.h | 4 +- > include/linux/trace.h | 31 +++++++ > kernel/trace/trace.c | 124 +++++++++++++++++++++++++++- > kernel/trace/trace.h | 31 +++++++ > 11 files changed, 300 insertions(+), 12 deletions(-) > create mode 100644 drivers/hwtracing/stm/ftrace.c > create mode 100644 include/linux/trace.h > > -- > 2.7.4 >
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web