* [RFC]Sample module for Kernel access to Ftrace instances. @ 2019-09-20 23:59 Divya Indi 2019-09-20 23:59 ` [PATCH] tracing: Sample module to demonstrate kernel " Divya Indi 0 siblings, 1 reply; 4+ messages in thread From: Divya Indi @ 2019-09-20 23:59 UTC (permalink / raw) To: Steven Rostedt, linux-kernel Cc: Divya Indi, Joe Jin, Srinivas Eeda, Aruna Ramakrishna, Manjunath Patil [PATCH] tracing: Sample module to demonstrate kernel access to Ftrace Hi, This patch is for a sample module to demonstrate the use of APIs that were introduced/exported in order to access Ftrace instances from within the kernel. Please Note: This module is dependent on - - commit: f45d122 tracing: Kernel access to Ftrace instances - Patches pending review: https://lore.kernel.org/lkml/1565805327-579-1-git-send-email-divya.indi@oracle.com/ The sample module creates/lookup a trace array called sample-instance on module load time. We then start a kernel thread(simple-thread) to - 1) Enable tracing for event "sample_event" to buffer associated with the trace array - "sample-instance". 2) Start a timer that will disable tracing to this buffer after 5 sec. (Tracing disabled after 5 sec ie at count=4) 3) Write to the buffer using trace_array_printk() 4) Stop the kernel thread and destroy the buffer during module unload. A sample output for the same - # tracer: nop # # entries-in-buffer/entries-written: 16/16 #P:4 # # _-----=> irqs-off # / _----=> need-resched # | / _---=> hardirq/softirq # || / _--=> preempt-depth # ||| / delay # TASK-PID CPU# |||| TIMESTAMP FUNCTION # | | | |||| | | sample-instance-26797 [003] .... 955180.489833: simple_thread: trace_array_printk: count=0 sample-instance-26797 [003] .... 955180.489836: sample_event: count value=0 at jiffies=5249940864 sample-instance-26797 [003] .... 955181.513722: simple_thread: trace_array_printk: count=1 sample-instance-26797 [003] .... 955181.513724: sample_event: count value=1 at jiffies=5249941888 sample-instance-26797 [003] .... 955182.537629: simple_thread: trace_array_printk: count=2 sample-instance-26797 [003] .... 955182.537631: sample_event: count value=2 at jiffies=5249942912 sample-instance-26797 [003] .... 955183.561516: simple_thread: trace_array_printk: count=3 sample-instance-26797 [003] .... 955183.561518: sample_event: count value=3 at jiffies=5249943936 sample-instance-26797 [003] .... 955184.585423: simple_thread: trace_array_printk: count=4 sample-instance-26797 [003] .... 955184.585427: sample_event: count value=4 at jiffies=5249944960 sample-instance-26797 [003] .... 955185.609344: simple_thread: trace_array_printk: count=5 sample-instance-26797 [003] .... 955186.633241: simple_thread: trace_array_printk: count=6 sample-instance-26797 [003] .... 955187.657157: simple_thread: trace_array_printk: count=7 sample-instance-26797 [003] .... 955188.681039: simple_thread: trace_array_printk: count=8 sample-instance-26797 [003] .... 955189.704937: simple_thread: trace_array_printk: count=9 sample-instance-26797 [003] .... 955190.728840: simple_thread: trace_array_printk: count=10 Let me know if you have any questions. Thanks, Divya ^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH] tracing: Sample module to demonstrate kernel access to Ftrace instances. 2019-09-20 23:59 [RFC]Sample module for Kernel access to Ftrace instances Divya Indi @ 2019-09-20 23:59 ` Divya Indi 2019-10-15 17:05 ` Steven Rostedt 0 siblings, 1 reply; 4+ messages in thread From: Divya Indi @ 2019-09-20 23:59 UTC (permalink / raw) To: Steven Rostedt, linux-kernel Cc: Divya Indi, Joe Jin, Srinivas Eeda, Aruna Ramakrishna, Manjunath Patil This is a sample module to demostrate the use of the newly introduced and exported APIs to access Ftrace instances from within the kernel. Newly introduced APIs used here - 1. Create a new trace array if it does not exist. struct trace_array *trace_array_create(const char *name) 2. Destroy/Remove a trace array. int trace_array_destroy(struct trace_array *tr) 3. Lookup a trace array, given its name. struct trace_array *trace_array_lookup(const char *name) 4. Enable/Disable trace events: int trace_array_set_clr_event(struct trace_array *tr, const char *system, const char *event, int set); Exported APIs - 1. trace_printk equivalent for instances. int trace_array_printk(struct trace_array *tr, unsigned long ip, const char *fmt, ...); 2. Helper function. void trace_printk_init_buffers(void); 3. To decrement the reference counter. void trace_array_put(struct trace_array *tr) Signed-off-by: Divya Indi <divya.indi@oracle.com> Reviewed-by: Manjunath Patil <manjunath.b.patil@oracle.com> Reviewed-by: Joe Jin <joe.jin@oracle.com> --- samples/Kconfig | 7 ++ samples/Makefile | 1 + samples/ftrace_instance/Makefile | 6 ++ samples/ftrace_instance/sample-trace-array.c | 134 +++++++++++++++++++++++++++ samples/ftrace_instance/sample-trace-array.h | 84 +++++++++++++++++ 5 files changed, 232 insertions(+) create mode 100644 samples/ftrace_instance/Makefile create mode 100644 samples/ftrace_instance/sample-trace-array.c create mode 100644 samples/ftrace_instance/sample-trace-array.h diff --git a/samples/Kconfig b/samples/Kconfig index d63cc8a..1c7864b 100644 --- a/samples/Kconfig +++ b/samples/Kconfig @@ -20,6 +20,13 @@ config SAMPLE_TRACE_PRINTK This builds a module that calls trace_printk() and can be used to test various trace_printk() calls from a module. +config SAMPLE_TRACE_ARRAY + tristate "Build sample module for kernel access to Ftrace instancess" + depends on EVENT_TRACING && m + help + This builds a module that demonstrates the use of various APIs to + access Ftrace instances from within the kernel. + config SAMPLE_KOBJECT tristate "Build kobject examples" help diff --git a/samples/Makefile b/samples/Makefile index debf892..02c444e 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -17,6 +17,7 @@ obj-$(CONFIG_SAMPLE_RPMSG_CLIENT) += rpmsg/ subdir-$(CONFIG_SAMPLE_SECCOMP) += seccomp obj-$(CONFIG_SAMPLE_TRACE_EVENTS) += trace_events/ obj-$(CONFIG_SAMPLE_TRACE_PRINTK) += trace_printk/ +obj-$(CONFIG_SAMPLE_TRACE_ARRAY) += ftrace_instance/ obj-$(CONFIG_VIDEO_PCI_SKELETON) += v4l/ obj-y += vfio-mdev/ subdir-$(CONFIG_SAMPLE_VFS) += vfs diff --git a/samples/ftrace_instance/Makefile b/samples/ftrace_instance/Makefile new file mode 100644 index 0000000..3603b13 --- /dev/null +++ b/samples/ftrace_instance/Makefile @@ -0,0 +1,6 @@ +# Builds a module that calls various routines to access Ftrace instances. +# To use(as root): insmod sample-trace-array.ko + +CFLAGS_sample-trace-array.o := -I$(src) + +obj-$(CONFIG_SAMPLE_TRACE_ARRAY) += sample-trace-array.o diff --git a/samples/ftrace_instance/sample-trace-array.c b/samples/ftrace_instance/sample-trace-array.c new file mode 100644 index 0000000..0595bc7 --- /dev/null +++ b/samples/ftrace_instance/sample-trace-array.c @@ -0,0 +1,134 @@ +// SPDX-License-Identifier: GPL-2.0-only +#include <linux/module.h> +#include <linux/kthread.h> +#include <linux/trace.h> +#include <linux/trace_events.h> +#include <linux/timer.h> +#include <linux/err.h> +#include <linux/jiffies.h> + +/* + * Any file that uses trace points, must include the header. + * But only one file, must include the header by defining + * CREATE_TRACE_POINTS first. This will make the C code that + * creates the handles for the trace points. + */ +#define CREATE_TRACE_POINTS +#include "sample-trace-array.h" + +struct trace_array *tr; +static void mytimer_handler(struct timer_list *unused); +static struct task_struct *simple_tsk; + +/* + * mytimer: Timer setup to disable tracing for event "sample_event". This + * timer is only for the purposes of the sample module to demonstrate access of + * Ftrace instances from within kernel. + */ +static DEFINE_TIMER(mytimer, mytimer_handler); + +static void mytimer_handler(struct timer_list *unused) +{ + /* + * Disable tracing for event "sample_event". + */ + trace_array_set_clr_event(tr, "sample-subsystem", "sample_event", 0); +} + +static void simple_thread_func(int count) +{ + set_current_state(TASK_INTERRUPTIBLE); + schedule_timeout(HZ); + + /* + * Printing count value using trace_array_printk() - trace_printk() + * equivalent for the instance buffers. + */ + trace_array_printk(tr, _THIS_IP_, "trace_array_printk: count=%d\n", + count); + /* + * Tracepoint for event "sample_event". This will print the + * current value of count and current jiffies. + */ + trace_sample_event(count, jiffies); +} + +static int simple_thread(void *arg) +{ + int count = 0; + unsigned long delay = msecs_to_jiffies(5000); + + /* + * Enable tracing for "sample_event". + */ + trace_array_set_clr_event(tr, "sample-subsystem", "sample_event", 1); + + /* + * Adding timer - mytimer. This timer will disable tracing after + * delay seconds. + * + */ + add_timer(&mytimer); + mod_timer(&mytimer, jiffies+delay); + + while (!kthread_should_stop()) + simple_thread_func(count++); + + del_timer(&mytimer); + + /* + * trace_array_put() decrements the reference counter associated with + * the trace array - "tr". We are done using the trace array, hence + * decrement the reference counter so that it can be destroyed using + * trace_array_destroy(). + */ + trace_array_put(tr); + + return 0; +} + +static int __init sample_trace_array_init(void) +{ + /* + * If a trace array with name "sample-instance" already exists, get a + * handle to it via trace_array_lookup. Else, create one using + * trace_array_create(). + * + * NOTE: Both these functions increment the reference counter + * associated with the trace array - "tr". + */ + tr = trace_array_lookup("sample-instance"); + if (!tr) + tr = trace_array_create("sample-instance"); + + if (IS_ERR(tr)) + return PTR_ERR(tr); + + /* + * If context specific per-cpu buffers havent already been allocated. + */ + trace_printk_init_buffers(); + + simple_tsk = kthread_run(simple_thread, NULL, "sample-instance"); + if (IS_ERR(simple_tsk)) + return -1; + return 0; +} + +static void __exit sample_trace_array_exit(void) +{ + kthread_stop(simple_tsk); + + /* + * We are unloading our module and no longer require the trace array. + * Remove/destroy "tr" using trace_array_destroy() + */ + trace_array_destroy(tr); +} + +module_init(sample_trace_array_init); +module_exit(sample_trace_array_exit); + +MODULE_AUTHOR("Divya Indi"); +MODULE_DESCRIPTION("Sample module for kernel access to Ftrace instances"); +MODULE_LICENSE("GPL"); diff --git a/samples/ftrace_instance/sample-trace-array.h b/samples/ftrace_instance/sample-trace-array.h new file mode 100644 index 0000000..547ad56 --- /dev/null +++ b/samples/ftrace_instance/sample-trace-array.h @@ -0,0 +1,84 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +/* + * If TRACE_SYSTEM is defined, that will be the directory created + * in the ftrace directory under /sys/kernel/tracing/events/<system> + * + * The define_trace.h below will also look for a file name of + * TRACE_SYSTEM.h where TRACE_SYSTEM is what is defined here. + * In this case, it would look for sample-trace.h + * + * If the header name will be different than the system name + * (as in this case), then you can override the header name that + * define_trace.h will look up by defining TRACE_INCLUDE_FILE + * + * This file is called sample-trace-array.h but we want the system + * to be called "sample-subsystem". Therefore we must define the name of this + * file: + * + * #define TRACE_INCLUDE_FILE sample-trace-array + * + * As we do in the bottom of this file. + * + * Notice that TRACE_SYSTEM should be defined outside of #if + * protection, just like TRACE_INCLUDE_FILE. + */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM sample-subsystem + +/* + * TRACE_SYSTEM is expected to be a C valid variable (alpha-numeric + * and underscore), although it may start with numbers. If for some + * reason it is not, you need to add the following lines: + */ +#undef TRACE_SYSTEM_VAR +#define TRACE_SYSTEM_VAR sample_subsystem + +/* + * But the above is only needed if TRACE_SYSTEM is not alpha-numeric + * and underscored. By default, TRACE_SYSTEM_VAR will be equal to + * TRACE_SYSTEM. As TRACE_SYSTEM_VAR must be alpha-numeric, if + * TRACE_SYSTEM is not, then TRACE_SYSTEM_VAR must be defined with + * only alpha-numeric and underscores. + * + * The TRACE_SYSTEM_VAR is only used internally and not visible to + * user space. + */ + +/* + * Notice that this file is not protected like a normal header. + * We also must allow for rereading of this file. The + * + * || defined(TRACE_HEADER_MULTI_READ) + * + * serves this purpose. + */ +#if !defined(_SAMPLE_TRACE_ARRAY_H) || defined(TRACE_HEADER_MULTI_READ) +#define _SAMPLE_TRACE_ARRAY_H + +#include <linux/tracepoint.h> +TRACE_EVENT(sample_event, + + TP_PROTO(int count, unsigned long time), + + TP_ARGS(count, time), + + TP_STRUCT__entry( + __field( int, count ) + __field( unsigned long, time ) + ), + + TP_fast_assign( + __entry->count = count; + __entry->time = time; + ), + + TP_printk("count value=%d at jiffies=%lu", __entry->count, + __entry->time) + ); +#endif + +#undef TRACE_INCLUDE_PATH +#define TRACE_INCLUDE_PATH . +#define TRACE_INCLUDE_FILE sample-trace-array +#include <trace/define_trace.h> -- 1.8.3.1 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] tracing: Sample module to demonstrate kernel access to Ftrace instances. 2019-09-20 23:59 ` [PATCH] tracing: Sample module to demonstrate kernel " Divya Indi @ 2019-10-15 17:05 ` Steven Rostedt 2019-10-15 19:53 ` Divya Indi 0 siblings, 1 reply; 4+ messages in thread From: Steven Rostedt @ 2019-10-15 17:05 UTC (permalink / raw) To: Divya Indi Cc: linux-kernel, Joe Jin, Srinivas Eeda, Aruna Ramakrishna, Manjunath Patil On Fri, 20 Sep 2019 16:59:26 -0700 Divya Indi <divya.indi@oracle.com> wrote: > This is a sample module to demostrate the use of the newly introduced and > exported APIs to access Ftrace instances from within the kernel. > > Newly introduced APIs used here - > > 1. Create a new trace array if it does not exist. > struct trace_array *trace_array_create(const char *name) > > 2. Destroy/Remove a trace array. > int trace_array_destroy(struct trace_array *tr) > > 3. Lookup a trace array, given its name. > struct trace_array *trace_array_lookup(const char *name) > > 4. Enable/Disable trace events: > int trace_array_set_clr_event(struct trace_array *tr, const char *system, > const char *event, int set); > > Exported APIs - > 1. trace_printk equivalent for instances. > int trace_array_printk(struct trace_array *tr, > unsigned long ip, const char *fmt, ...); > > 2. Helper function. > void trace_printk_init_buffers(void); > > 3. To decrement the reference counter. > void trace_array_put(struct trace_array *tr) > > Signed-off-by: Divya Indi <divya.indi@oracle.com> > Reviewed-by: Manjunath Patil <manjunath.b.patil@oracle.com> > Reviewed-by: Joe Jin <joe.jin@oracle.com> > --- > samples/Kconfig | 7 ++ > samples/Makefile | 1 + > samples/ftrace_instance/Makefile | 6 ++ > samples/ftrace_instance/sample-trace-array.c | 134 +++++++++++++++++++++++++++ > samples/ftrace_instance/sample-trace-array.h | 84 +++++++++++++++++ > 5 files changed, 232 insertions(+) > create mode 100644 samples/ftrace_instance/Makefile > create mode 100644 samples/ftrace_instance/sample-trace-array.c > create mode 100644 samples/ftrace_instance/sample-trace-array.h > I applied this patch but get this: /work/git/linux-trace.git/samples/ftrace_instance/sample-trace-array.c: In function ‘mytimer_handler’: /work/git/linux-trace.git/samples/ftrace_instance/sample-trace-array.c:35:2: error: implicit declaration of function ‘trace_array_set_clr_event’; did you mean ‘trace_set_clr_event’? [-Werror=implicit-function-declaration] trace_array_set_clr_event(tr, "sample-subsystem", "sample_event", 0); ^~~~~~~~~~~~~~~~~~~~~~~~~ trace_set_clr_event /work/git/linux-trace.git/samples/ftrace_instance/sample-trace-array.c: In function ‘simple_thread_func’: /work/git/linux-trace.git/samples/ftrace_instance/sample-trace-array.c:47:2: error: implicit declaration of function ‘trace_array_printk’; did you mean ‘trace_seq_printf’? [-Werror=implicit-function-declaration] trace_array_printk(tr, _THIS_IP_, "trace_array_printk: count=%d\n", ^~~~~~~~~~~~~~~~~~ trace_seq_printf /work/git/linux-trace.git/samples/ftrace_instance/sample-trace-array.c: In function ‘simple_thread’: /work/git/linux-trace.git/samples/ftrace_instance/sample-trace-array.c:85:2: error: implicit declaration of function ‘trace_array_put’; did you mean ‘trace_seq_putc’? [-Werror=implicit-function-declaration] trace_array_put(tr); ^~~~~~~~~~~~~~~ trace_seq_putc /work/git/linux-trace.git/samples/ftrace_instance/sample-trace-array.c: In function ‘sample_trace_array_init’: /work/git/linux-trace.git/samples/ftrace_instance/sample-trace-array.c:100:7: error: implicit declaration of function ‘trace_array_lookup’; did you mean ‘radix_tree_lookup’? [-Werror=implicit-function-declaration] tr = trace_array_lookup("sample-instance"); ^~~~~~~~~~~~~~~~~~ radix_tree_lookup /work/git/linux-trace.git/samples/ftrace_instance/sample-trace-array.c:100:5: warning: assignment to ‘struct trace_array *’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion] tr = trace_array_lookup("sample-instance"); ^ /work/git/linux-trace.git/samples/ftrace_instance/sample-trace-array.c:102:8: error: implicit declaration of function ‘trace_array_create’; did you mean ‘ftrace_force_update’? [-Werror=implicit-function-declaration] tr = trace_array_create("sample-instance"); ^~~~~~~~~~~~~~~~~~ ftrace_force_update /work/git/linux-trace.git/samples/ftrace_instance/sample-trace-array.c:102:6: warning: assignment to ‘struct trace_array *’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion] tr = trace_array_create("sample-instance"); ^ /work/git/linux-trace.git/samples/ftrace_instance/sample-trace-array.c:110:2: error: implicit declaration of function ‘trace_printk_init_buffers’; did you mean ‘trace_event_get_offsets’? [-Werror=implicit-function-declaration] trace_printk_init_buffers(); ^~~~~~~~~~~~~~~~~~~~~~~~~ trace_event_get_offsets /work/git/linux-trace.git/samples/ftrace_instance/sample-trace-array.c: In function ‘sample_trace_array_exit’: /work/git/linux-trace.git/samples/ftrace_instance/sample-trace-array.c:126:2: error: implicit declaration of function ‘trace_array_destroy’; did you mean ‘assoc_array_destroy’? [-Werror=implicit-function-declaration] trace_array_destroy(tr); ^~~~~~~~~~~~~~~~~~~ assoc_array_destroy cc1: some warnings being treated as errors make[3]: *** [/work/git/linux-trace.git/scripts/Makefile.build:266: samples/ftrace_instance/sample-trace-array.o] Error 1 make[2]: *** [/work/git/linux-trace.git/scripts/Makefile.build:509: samples/ftrace_instance] Error 2 make[1]: *** [/work/git/linux-trace.git/Makefile:1650: samples] Error 2 make[1]: *** Waiting for unfinished jobs.... -- Steve ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] tracing: Sample module to demonstrate kernel access to Ftrace instances. 2019-10-15 17:05 ` Steven Rostedt @ 2019-10-15 19:53 ` Divya Indi 0 siblings, 0 replies; 4+ messages in thread From: Divya Indi @ 2019-10-15 19:53 UTC (permalink / raw) To: Steven Rostedt Cc: linux-kernel, Joe Jin, Srinivas Eeda, Aruna Ramakrishna, Manjunath Patil [Apologies for multiple resends, formatting issue] Hi Steven, Thanks for taking a look. This sample module is dependent on - - commit: f45d122 tracing: Kernel access to Ftrace instances - Patches pending review: https://lore.kernel.org/lkml/1565805327-579-1-git-send-email-divya.indi@oracle.com/ I mentioned it in the cover page, but will add to this patch as well to avoid confusion. So, I think the messages you are seeing is due to the absence of Patches pending review: https://lore.kernel.org/lkml/1565805327-579-1-git-send-email-divya.indi@oracle.com/ Let me know if you prefer to have the sample module and this patch-set (pending review) as part of one patch set. For reference, adding the cover page details here - ------------------------------------------------------------------------------------------------------------------ This patch is for a sample module to demonstrate the use of APIs that were introduced/exported in order to access Ftrace instances from within the kernel. Please Note: This module is dependent on - - commit: f45d122 tracing: Kernel access to Ftrace instances - Patches pending review: https://lore.kernel.org/lkml/1565805327-579-1-git-send-email-divya.indi@oracle.com/ The sample module creates/lookup a trace array called sample-instance on module load time. We then start a kernel thread(simple-thread) to - 1) Enable tracing for event "sample_event" to buffer associated with the trace array - "sample-instance". 2) Start a timer that will disable tracing to this buffer after 5 sec. (Tracing disabled after 5 sec ie at count=4) 3) Write to the buffer using trace_array_printk() 4) Stop the kernel thread and destroy the buffer during module unload. A sample output for the same - # tracer: nop # # entries-in-buffer/entries-written: 16/16 #P:4 # # _-----=> irqs-off # / _----=> need-resched # | / _---=> hardirq/softirq # || / _--=> preempt-depth # ||| / delay # TASK-PID CPU# |||| TIMESTAMP FUNCTION # | | | |||| | | sample-instance-26797 [003] .... 955180.489833: simple_thread: trace_array_printk: count=0 sample-instance-26797 [003] .... 955180.489836: sample_event: count value=0 at jiffies=5249940864 sample-instance-26797 [003] .... 955181.513722: simple_thread: trace_array_printk: count=1 sample-instance-26797 [003] .... 955181.513724: sample_event: count value=1 at jiffies=5249941888 sample-instance-26797 [003] .... 955182.537629: simple_thread: trace_array_printk: count=2 sample-instance-26797 [003] .... 955182.537631: sample_event: count value=2 at jiffies=5249942912 sample-instance-26797 [003] .... 955183.561516: simple_thread: trace_array_printk: count=3 sample-instance-26797 [003] .... 955183.561518: sample_event: count value=3 at jiffies=5249943936 sample-instance-26797 [003] .... 955184.585423: simple_thread: trace_array_printk: count=4 sample-instance-26797 [003] .... 955184.585427: sample_event: count value=4 at jiffies=5249944960 sample-instance-26797 [003] .... 955185.609344: simple_thread: trace_array_printk: count=5 sample-instance-26797 [003] .... 955186.633241: simple_thread: trace_array_printk: count=6 sample-instance-26797 [003] .... 955187.657157: simple_thread: trace_array_printk: count=7 sample-instance-26797 [003] .... 955188.681039: simple_thread: trace_array_printk: count=8 sample-instance-26797 [003] .... 955189.704937: simple_thread: trace_array_printk: count=9 sample-instance-26797 [003] .... 955190.728840: simple_thread: trace_array_printk: count=10 -------------------------------------------------------------------------------------------------------------------- Thanks, Divya On 10/15/19 10:05 AM, Steven Rostedt wrote: > On Fri, 20 Sep 2019 16:59:26 -0700 > Divya Indi <divya.indi@oracle.com> wrote: > >> This is a sample module to demostrate the use of the newly introduced and >> exported APIs to access Ftrace instances from within the kernel. >> >> Newly introduced APIs used here - >> >> 1. Create a new trace array if it does not exist. >> struct trace_array *trace_array_create(const char *name) >> >> 2. Destroy/Remove a trace array. >> int trace_array_destroy(struct trace_array *tr) >> >> 3. Lookup a trace array, given its name. >> struct trace_array *trace_array_lookup(const char *name) >> >> 4. Enable/Disable trace events: >> int trace_array_set_clr_event(struct trace_array *tr, const char *system, >> const char *event, int set); >> >> Exported APIs - >> 1. trace_printk equivalent for instances. >> int trace_array_printk(struct trace_array *tr, >> unsigned long ip, const char *fmt, ...); >> >> 2. Helper function. >> void trace_printk_init_buffers(void); >> >> 3. To decrement the reference counter. >> void trace_array_put(struct trace_array *tr) >> >> Signed-off-by: Divya Indi <divya.indi@oracle.com> >> Reviewed-by: Manjunath Patil <manjunath.b.patil@oracle.com> >> Reviewed-by: Joe Jin <joe.jin@oracle.com> >> --- >> samples/Kconfig | 7 ++ >> samples/Makefile | 1 + >> samples/ftrace_instance/Makefile | 6 ++ >> samples/ftrace_instance/sample-trace-array.c | 134 +++++++++++++++++++++++++++ >> samples/ftrace_instance/sample-trace-array.h | 84 +++++++++++++++++ >> 5 files changed, 232 insertions(+) >> create mode 100644 samples/ftrace_instance/Makefile >> create mode 100644 samples/ftrace_instance/sample-trace-array.c >> create mode 100644 samples/ftrace_instance/sample-trace-array.h >> > I applied this patch but get this: > > /work/git/linux-trace.git/samples/ftrace_instance/sample-trace-array.c: In function ‘mytimer_handler’: > /work/git/linux-trace.git/samples/ftrace_instance/sample-trace-array.c:35:2: error: implicit declaration of function ‘trace_array_set_clr_event’; did you mean ‘trace_set_clr_event’? [-Werror=implicit-function-declaration] > trace_array_set_clr_event(tr, "sample-subsystem", "sample_event", 0); > ^~~~~~~~~~~~~~~~~~~~~~~~~ > trace_set_clr_event > /work/git/linux-trace.git/samples/ftrace_instance/sample-trace-array.c: In function ‘simple_thread_func’: > /work/git/linux-trace.git/samples/ftrace_instance/sample-trace-array.c:47:2: error: implicit declaration of function ‘trace_array_printk’; did you mean ‘trace_seq_printf’? [-Werror=implicit-function-declaration] > trace_array_printk(tr, _THIS_IP_, "trace_array_printk: count=%d\n", > ^~~~~~~~~~~~~~~~~~ > trace_seq_printf > /work/git/linux-trace.git/samples/ftrace_instance/sample-trace-array.c: In function ‘simple_thread’: > /work/git/linux-trace.git/samples/ftrace_instance/sample-trace-array.c:85:2: error: implicit declaration of function ‘trace_array_put’; did you mean ‘trace_seq_putc’? [-Werror=implicit-function-declaration] > trace_array_put(tr); > ^~~~~~~~~~~~~~~ > trace_seq_putc > /work/git/linux-trace.git/samples/ftrace_instance/sample-trace-array.c: In function ‘sample_trace_array_init’: > /work/git/linux-trace.git/samples/ftrace_instance/sample-trace-array.c:100:7: error: implicit declaration of function ‘trace_array_lookup’; did you mean ‘radix_tree_lookup’? [-Werror=implicit-function-declaration] > tr = trace_array_lookup("sample-instance"); > ^~~~~~~~~~~~~~~~~~ > radix_tree_lookup > /work/git/linux-trace.git/samples/ftrace_instance/sample-trace-array.c:100:5: warning: assignment to ‘struct trace_array *’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion] > tr = trace_array_lookup("sample-instance"); > ^ > /work/git/linux-trace.git/samples/ftrace_instance/sample-trace-array.c:102:8: error: implicit declaration of function ‘trace_array_create’; did you mean ‘ftrace_force_update’? [-Werror=implicit-function-declaration] > tr = trace_array_create("sample-instance"); > ^~~~~~~~~~~~~~~~~~ > ftrace_force_update > /work/git/linux-trace.git/samples/ftrace_instance/sample-trace-array.c:102:6: warning: assignment to ‘struct trace_array *’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion] > tr = trace_array_create("sample-instance"); > ^ > /work/git/linux-trace.git/samples/ftrace_instance/sample-trace-array.c:110:2: error: implicit declaration of function ‘trace_printk_init_buffers’; did you mean ‘trace_event_get_offsets’? [-Werror=implicit-function-declaration] > trace_printk_init_buffers(); > ^~~~~~~~~~~~~~~~~~~~~~~~~ > trace_event_get_offsets > /work/git/linux-trace.git/samples/ftrace_instance/sample-trace-array.c: In function ‘sample_trace_array_exit’: > /work/git/linux-trace.git/samples/ftrace_instance/sample-trace-array.c:126:2: error: implicit declaration of function ‘trace_array_destroy’; did you mean ‘assoc_array_destroy’? [-Werror=implicit-function-declaration] > trace_array_destroy(tr); > ^~~~~~~~~~~~~~~~~~~ > assoc_array_destroy > cc1: some warnings being treated as errors > make[3]: *** [/work/git/linux-trace.git/scripts/Makefile.build:266: samples/ftrace_instance/sample-trace-array.o] Error 1 > make[2]: *** [/work/git/linux-trace.git/scripts/Makefile.build:509: samples/ftrace_instance] Error 2 > make[1]: *** [/work/git/linux-trace.git/Makefile:1650: samples] Error 2 > make[1]: *** Waiting for unfinished jobs.... > > > -- Steve ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2019-10-15 19:54 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2019-09-20 23:59 [RFC]Sample module for Kernel access to Ftrace instances Divya Indi 2019-09-20 23:59 ` [PATCH] tracing: Sample module to demonstrate kernel " Divya Indi 2019-10-15 17:05 ` Steven Rostedt 2019-10-15 19:53 ` Divya Indi
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).