[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAJNi4rMVUzfZJPge=ncaULD87wLQ4TwWS=oKDuC1hZMoWi0OjA@mail.gmail.com>
Date: Fri, 21 Oct 2022 09:43:14 +0800
From: richard clark <richard.xnu.clark@...il.com>
To: Steven Rostedt <rostedt@...dmis.org>
Cc: bristot@...nel.org, linux-trace-devel@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: Re: Question about 'for_each_kernel_tracepoint(...)' function
On Thu, Oct 20, 2022 at 11:14 PM Steven Rostedt <rostedt@...dmis.org> wrote:
>
> On Thu, 20 Oct 2022 17:32:57 +0800
> richard clark <richard.xnu.clark@...il.com> wrote:
>
> > Hi,
> > Can this function only find the trace points defined in the kernel
>
> It should find all tracepoints.
I defined an event trace point in module B(in the header file):
...
#define TRACE_SYSTEM cus_tp
...
TRACE_EVENT(function_event_a,
/* all the data struct parameter is in form of pointer instead
of object */
TP_PROTO(enum event ev),
TP_ARGS(ev),
...
);
After the module B inserted, the output is:
root@...otics:/sys/kernel/debug/tracing# cat available_events | grep func
cus_tp:function_event_a
Then I inserted module A with below code snippet:
void fc(struct tracepoint *ktp, void *priv)
{
pr_info("events: %s\n", ktp->name);
}
static int module_A_init(void)
{
for_each_kernel_tracepoint(fc, NULL);
return 0;
}
Then I insert the module A into the system with module B is inserted,
the dmesg shows:
root@ robotics:/home/robotics/evt-tp# dmesg | grep func
[149421.718576] events: call_function_entry
[149421.718578] events: call_function_exit
[149421.718579] events: call_function_single_entry
[149421.718581] events: call_function_single_exit
So Steve you can see that the 'for_each_kernel_tracepoint' doesn't
find the event tp defined in module B, but that tp indeed shows in
/sys/kernel/debug/tracing/available_events.
Any comments about that?
>
> > image? I want to define a trace event in my kernel module A, then B
> > module to register a probe callback function for that event TP in A. I
> > want to kick off a timer in A and call the traced function
> > periodically, thus I can monitor the events happening in A from B.
>
> You could also export the tracepoint from A and reference it directly in B.
>
> >
> > Can I do that, is it possible?
> >
>
> Try it and find out. Why ask?
Ah, as you can see that I did it, but the result is not what I
expected :-). Help?
Richard
>
> -- Steve
Powered by blists - more mailing lists