Re: [patch 01/15] Kernel Tracepoints

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: Peter Zijlstra <peterz@...>
Cc: <akpm@...>, Ingo Molnar <mingo@...>, <linux-kernel@...>, Masami Hiramatsu <mhiramat@...>, Frank Ch. Eigler <fche@...>, Hideo AOKI <haoki@...>, Takashi Nishiie <t-nishiie@...>, Steven Rostedt <rostedt@...>, Alexander Viro <viro@...>, Eduard - Gabriel Munteanu <eduard.munteanu@...>
Date: Tuesday, July 15, 2008 - 10:27 am

* Peter Zijlstra (peterz@infradead.org) wrote:

Hrm, you are right, the implementation I just proposed is bogus. (but so
was yours) ;)

func is an iterator on the funcs array. My typing of func is thus wrong,
it should be void **. Otherwise I'm just incrementing the function
address which is plain wrong.

The read barrier is included in rcu_dereference() now. But given that we
have to take a pointer to the array as an iterator, we would have to
rcu_dereference() our iterator multiple times and then have many read
barrier depends, which we don't need. This is why I would go back to a
smp_read_barrier_depends().

Also, I use a NULL entry at the end of the funcs array as an end of
array identifier. However, I cannot use this in the for loop both as a
check for NULL array and check for NULL array element. This is why a if
() test is needed in addition to the for loop test. (this is actually
what is wrong in the implementation you proposed : you treat func both
as a pointer to the function pointer array and as a function pointer)

Something like this seems better :

#define __DO_TRACE(tp, proto, args)                                     \
        do {                                                            \
                void **it_func;                                         \
                                                                        \
                preempt_disable();                                      \
                it_func = (tp)->funcs;                                  \
                if (it_func) {                                          \
                        smp_read_barrier_depends();                     \
                        for (; *it_func; it_func++)                     \
                                ((void(*)(proto))(*it_func))(args);     \
                }                                                       \
                preempt_enable();                                       \
        } while (0)

What do you think ?

Mathieu


-- 
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F  BA06 3F25 A8FE 3BAE 9A68
--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[patch 01/15] Kernel Tracepoints, Mathieu Desnoyers, (Wed Jul 9, 10:59 am)
Re: [patch 01/15] Kernel Tracepoints, Peter Zijlstra, (Tue Jul 15, 3:50 am)
Re: [patch 01/15] Kernel Tracepoints, Mathieu Desnoyers, (Tue Jul 15, 9:25 am)
Re: [patch 01/15] Kernel Tracepoints, Peter Zijlstra, (Tue Jul 15, 10:03 am)
Re: [patch 01/15] Kernel Tracepoints, Mathieu Desnoyers, (Tue Jul 15, 3:02 pm)
Re: [patch 01/15] Kernel Tracepoints, Peter Zijlstra, (Tue Jul 15, 3:52 pm)
Re: [patch 01/15] Kernel Tracepoints, Mathieu Desnoyers, (Tue Jul 15, 10:46 am)
Re: [patch 01/15] Kernel Tracepoints, Peter Zijlstra, (Tue Jul 15, 11:13 am)
Re: [patch 01/15] Kernel Tracepoints, Masami Hiramatsu, (Tue Jul 15, 2:52 pm)
Re: [patch 01/15] Kernel Tracepoints, Mathieu Desnoyers, (Tue Jul 15, 3:08 pm)
Re: [patch 01/15] Kernel Tracepoints, Mathieu Desnoyers, (Tue Jul 15, 2:22 pm)
Re: [patch 01/15] Kernel Tracepoints, Steven Rostedt, (Tue Jul 15, 2:33 pm)
Re: [patch 01/15] Kernel Tracepoints, Peter Zijlstra, (Tue Jul 15, 9:59 am)
Re: [patch 01/15] Kernel Tracepoints, Mathieu Desnoyers, (Tue Jul 15, 10:27 am)
Re: [patch 01/15] Kernel Tracepoints, Peter Zijlstra, (Tue Jul 15, 10:42 am)
Re: [patch 01/15] Kernel Tracepoints, Mathieu Desnoyers, (Tue Jul 15, 11:22 am)
Re: [patch 01/15] Kernel Tracepoints, Peter Zijlstra, (Tue Jul 15, 11:31 am)
Re: [patch 01/15] Kernel Tracepoints, Mathieu Desnoyers, (Tue Jul 15, 1:50 pm)
Re: [patch 01/15] Kernel Tracepoints, Mathieu Desnoyers, (Tue Jul 15, 12:08 pm)
Re: [patch 01/15] Kernel Tracepoints, Paul E. McKenney, (Fri Aug 1, 5:10 pm)
Re: [patch 01/15] Kernel Tracepoints, Mathieu Desnoyers, (Tue Jul 15, 12:26 pm)
Re: [patch 01/15] Kernel Tracepoints, Peter Zijlstra, (Tue Jul 15, 12:25 pm)
Re: [patch 01/15] Kernel Tracepoints, Paul E. McKenney, (Fri Aug 1, 5:10 pm)
Re: [patch 01/15] Kernel Tracepoints, Mathieu Desnoyers, (Tue Jul 15, 12:51 pm)
Re: [patch 01/15] Kernel Tracepoints, Paul E. McKenney, (Fri Aug 1, 5:10 pm)
Re: [patch 01/15] Kernel Tracepoints, Peter Zijlstra, (Fri Aug 1, 8:03 pm)
Re: [patch 01/15] Kernel Tracepoints, Paul E. McKenney, (Fri Aug 1, 8:17 pm)
Re: [patch 01/15] Kernel Tracepoints, Mathieu Desnoyers, (Tue Jul 15, 11:50 am)
Re: [patch 01/15] Kernel Tracepoints, Paul E. McKenney, (Fri Aug 1, 5:10 pm)