2014-04-22 14:23:19

by Drew Richardson

[permalink] [raw]
Subject: [PATCH] Export sched tracepoints for use by kernel modules

After commit de7b2973903c6cc50b31ee5682a69b2219b9919d ("tracepoint:
Use struct pointer instead of name hash for reg/unreg tracepoints"),
any tracepoints used in a kernel module must be exported.

Signed-off-by: Drew Richardson <[email protected]>
Acked-by: Pawel Moll <[email protected]>
---
kernel/sched/core.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)

diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 268a45ea238c..cdb8e92ff24a 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -90,6 +90,31 @@
#define CREATE_TRACE_POINTS
#include <trace/events/sched.h>

+EXPORT_TRACEPOINT_SYMBOL_GPL(sched_kthread_stop);
+EXPORT_TRACEPOINT_SYMBOL_GPL(sched_kthread_stop_ret);
+EXPORT_TRACEPOINT_SYMBOL_GPL(sched_wakeup);
+EXPORT_TRACEPOINT_SYMBOL_GPL(sched_wakeup_new);
+EXPORT_TRACEPOINT_SYMBOL_GPL(sched_switch);
+EXPORT_TRACEPOINT_SYMBOL_GPL(sched_migrate_task);
+EXPORT_TRACEPOINT_SYMBOL_GPL(sched_process_free);
+EXPORT_TRACEPOINT_SYMBOL_GPL(sched_process_exit);
+EXPORT_TRACEPOINT_SYMBOL_GPL(sched_wait_task);
+EXPORT_TRACEPOINT_SYMBOL_GPL(sched_process_wait);
+EXPORT_TRACEPOINT_SYMBOL_GPL(sched_process_fork);
+EXPORT_TRACEPOINT_SYMBOL_GPL(sched_process_exec);
+EXPORT_TRACEPOINT_SYMBOL_GPL(sched_stat_wait);
+EXPORT_TRACEPOINT_SYMBOL_GPL(sched_stat_sleep);
+EXPORT_TRACEPOINT_SYMBOL_GPL(sched_stat_iowait);
+EXPORT_TRACEPOINT_SYMBOL_GPL(sched_stat_blocked);
+EXPORT_TRACEPOINT_SYMBOL_GPL(sched_stat_runtime);
+EXPORT_TRACEPOINT_SYMBOL_GPL(sched_pi_setprio);
+#ifdef CONFIG_DETECT_HUNG_TASK
+EXPORT_TRACEPOINT_SYMBOL_GPL(sched_process_hang);
+#endif /* CONFIG_DETECT_HUNG_TASK */
+EXPORT_TRACEPOINT_SYMBOL_GPL(sched_move_numa);
+EXPORT_TRACEPOINT_SYMBOL_GPL(sched_stick_numa);
+EXPORT_TRACEPOINT_SYMBOL_GPL(sched_swap_numa);
+
void start_bandwidth_timer(struct hrtimer *period_timer, ktime_t period)
{
unsigned long delta;
--
1.8.3.2


2014-04-22 14:45:11

by Ingo Molnar

[permalink] [raw]
Subject: Re: [PATCH] Export sched tracepoints for use by kernel modules


* Drew Richardson <[email protected]> wrote:

> After commit de7b2973903c6cc50b31ee5682a69b2219b9919d ("tracepoint:
> Use struct pointer instead of name hash for reg/unreg tracepoints"),
> any tracepoints used in a kernel module must be exported.
>
> Signed-off-by: Drew Richardson <[email protected]>
> Acked-by: Pawel Moll <[email protected]>
> ---
> kernel/sched/core.c | 25 +++++++++++++++++++++++++
> 1 file changed, 25 insertions(+)
>
> diff --git a/kernel/sched/core.c b/kernel/sched/core.c
> index 268a45ea238c..cdb8e92ff24a 100644
> --- a/kernel/sched/core.c
> +++ b/kernel/sched/core.c
> @@ -90,6 +90,31 @@
> #define CREATE_TRACE_POINTS
> #include <trace/events/sched.h>
>
> +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_kthread_stop);
> +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_kthread_stop_ret);
> +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_wakeup);
> +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_wakeup_new);
> +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_switch);
> +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_migrate_task);
> +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_process_free);
> +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_process_exit);
> +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_wait_task);
> +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_process_wait);
> +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_process_fork);
> +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_process_exec);
> +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_stat_wait);
> +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_stat_sleep);
> +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_stat_iowait);
> +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_stat_blocked);
> +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_stat_runtime);
> +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_pi_setprio);
> +#ifdef CONFIG_DETECT_HUNG_TASK
> +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_process_hang);
> +#endif /* CONFIG_DETECT_HUNG_TASK */
> +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_move_numa);
> +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_stick_numa);
> +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_swap_numa);

Which in-tree kernel module is using these?

Thanks,

Ingo

2014-04-22 14:54:16

by Drew Richardson

[permalink] [raw]
Subject: Re: [PATCH] Export sched tracepoints for use by kernel modules

On Tue, Apr 22, 2014 at 03:45:04PM +0100, Ingo Molnar wrote:
>
> * Drew Richardson <[email protected]> wrote:
>
> > After commit de7b2973903c6cc50b31ee5682a69b2219b9919d ("tracepoint:
> > Use struct pointer instead of name hash for reg/unreg tracepoints"),
> > any tracepoints used in a kernel module must be exported.
> >
> > Signed-off-by: Drew Richardson <[email protected]>
> > Acked-by: Pawel Moll <[email protected]>
> > ---
> > kernel/sched/core.c | 25 +++++++++++++++++++++++++
> > 1 file changed, 25 insertions(+)
> >
> > diff --git a/kernel/sched/core.c b/kernel/sched/core.c
> > index 268a45ea238c..cdb8e92ff24a 100644
> > --- a/kernel/sched/core.c
> > +++ b/kernel/sched/core.c
> > @@ -90,6 +90,31 @@
> > #define CREATE_TRACE_POINTS
> > #include <trace/events/sched.h>
> >
> > +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_kthread_stop);
> > +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_kthread_stop_ret);
> > +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_wakeup);
> > +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_wakeup_new);
> > +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_switch);
> > +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_migrate_task);
> > +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_process_free);
> > +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_process_exit);
> > +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_wait_task);
> > +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_process_wait);
> > +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_process_fork);
> > +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_process_exec);
> > +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_stat_wait);
> > +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_stat_sleep);
> > +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_stat_iowait);
> > +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_stat_blocked);
> > +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_stat_runtime);
> > +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_pi_setprio);
> > +#ifdef CONFIG_DETECT_HUNG_TASK
> > +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_process_hang);
> > +#endif /* CONFIG_DETECT_HUNG_TASK */
> > +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_move_numa);
> > +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_stick_numa);
> > +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_swap_numa);
>
> Which in-tree kernel module is using these?
>
> Thanks,
>
> Ingo
>

Gator (http://git.linaro.org/arm/ds5/gator.git), an out of tree kernel
module, uses sched_process_fork, sched_switch and
sched_process_free. Along with exporting those tracepoints I thought
it would be helpful to export all the tracepoints from
trace/events/sched.h.

Thanks,

Drew

2014-04-22 18:26:20

by Ingo Molnar

[permalink] [raw]
Subject: Re: [PATCH] Export sched tracepoints for use by kernel modules


* Drew Richardson <[email protected]> wrote:

> > > +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_stat_sleep);
> > > +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_stat_iowait);
> > > +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_stat_blocked);
> > > +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_stat_runtime);
> > > +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_pi_setprio);
> > > +#ifdef CONFIG_DETECT_HUNG_TASK
> > > +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_process_hang);
> > > +#endif /* CONFIG_DETECT_HUNG_TASK */
> > > +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_move_numa);
> > > +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_stick_numa);
> > > +EXPORT_TRACEPOINT_SYMBOL_GPL(sched_swap_numa);
> >
> > Which in-tree kernel module is using these?
> >
> > Thanks,
> >
> > Ingo
> >
>
> Gator (http://git.linaro.org/arm/ds5/gator.git), an out of tree
> kernel module, uses sched_process_fork, sched_switch and
> sched_process_free. Along with exporting those tracepoints I thought
> it would be helpful to export all the tracepoints from
> trace/events/sched.h.

So, 'Gator' seems to be a rather ugly out of tree driver, ABI and
daemon slapped on top of perf events, duplicating part of perf events
functionality for no apparent good technical reason, just to enable a
binary-only profiler called 'ARM Streamline Analyzer'.

What does the 'gator' driver offer that perf events does not offer in
itself? If there's any sensible feature in there then it should be
added to the mainline kernel not as an add on driver and filesystem,
but as part of perf events subsystem itself.

Thanks,

Ingo