On Mon, Feb 04, 2013 at 01:36:13PM -0500, Steven Rostedt wrote:
> On Mon, 2013-02-04 at 08:59 -0800, Paul E. McKenney wrote:
> > On Mon, Feb 04, 2013 at 10:52:21AM -0500, Steven Rostedt wrote:
> > > The rcu torture test uses trace_clock, and requires that it be built
> > > into the kernel. If it is not, then we get the following build error:
> > > 
> > > ERROR: "trace_clock_local" [kernel/rcutorture.ko] undefined!
> > > 
> > > Reported-by: Tetsuo Handa <penguin-ker...@i-love.sakura.ne.jp>
> > > Signed-off-by: Steven Rostedt <rost...@goodmis.org>
> > 
> > This would work, but would unnecessarily force trace_clock_local()
> > to be defined when RCU tracing is disabled.  So, would the alternative
> > patch I posted work for you?
> > 
> 
> Unfortunately the other patch wasn't Cc'd to LKML (I hate private
> emails).
> 
> I would suggest the following to be complete, why keep that extra divide
> around?

Good point, queued!

                                                        Thanx, Paul

> -- Steve
> 
> I started with your patch:
> 
> 
> rcu: Allow rcutorture to be built at low optimization levels
> 
> The uses of trace_clock_local() are dead code when CONFIG_RCU_TRACE=n,
> but some compilers might nevertheless generate code calling this function.
> This commit therefore ensures that trace_clock_local() is invoked only
> when CONFIG_RCU_TRACE=y.
> 
> Reported-by: Tetsuo Handa <penguin-ker...@i-love.sakura.ne.jp>
> Signed-off-by: Paul E. McKenney <paul...@linux.vnet.ibm.com>
> Signed-off-by: Steven Rostedt <rost...@goodmis.org>
> 
> Index: linux-trace.git/kernel/rcutorture.c
> ===================================================================
> --- linux-trace.git.orig/kernel/rcutorture.c
> +++ linux-trace.git/kernel/rcutorture.c
> @@ -208,6 +208,20 @@ MODULE_PARM_DESC(rcutorture_runnable, "S
>  #define rcu_can_boost() 0
>  #endif /* #else #if defined(CONFIG_RCU_BOOST) && 
> !defined(CONFIG_HOTPLUG_CPU) */
> 
> +#ifdef CONFIG_RCU_TRACE
> +static u64 notrace rcu_trace_clock_local(void)
> +{
> +     u64 ts = trace_clock_local();
> +     unsigned long __maybe_unused ts_rem = do_div(ts, NSEC_PER_USEC);
> +     return ts;
> +}
> +#else /* #ifdef CONFIG_RCU_TRACE */
> +static u64 notrace rcu_trace_clock_local(void)
> +{
> +     return 0ULL;
> +}
> +#endif /* #else #ifdef CONFIG_RCU_TRACE */
> +
>  static unsigned long shutdown_time;  /* jiffies to system shutdown. */
>  static unsigned long boost_starttime;        /* jiffies of next boost test 
> start. */
>  DEFINE_MUTEX(boost_mutex);           /* protect setting boost_starttime */
> @@ -1051,7 +1065,7 @@ static void rcu_torture_timer(unsigned l
> 
>       idx = cur_ops->readlock();
>       completed = cur_ops->completed();
> -     ts = trace_clock_local();
> +     ts = rcu_trace_clock_local();
>       p = rcu_dereference_check(rcu_torture_current,
>                                 rcu_read_lock_bh_held() ||
>                                 rcu_read_lock_sched_held() ||
> @@ -1075,8 +1089,6 @@ static void rcu_torture_timer(unsigned l
>       }
>       completed_end = cur_ops->completed();
>       if (pipe_count > 1) {
> -             unsigned long __maybe_unused ts_rem = do_div(ts, NSEC_PER_USEC);
> -
>               do_trace_rcu_torture_read(cur_ops->name, &p->rtort_rcu, ts,
>                                         completed, completed_end);
>               rcutorture_trace_dump();
> @@ -1122,7 +1134,7 @@ rcu_torture_reader(void *arg)
>               }
>               idx = cur_ops->readlock();
>               completed = cur_ops->completed();
> -             ts = trace_clock_local();
> +             ts = rcu_trace_clock_local();
>               p = rcu_dereference_check(rcu_torture_current,
>                                         rcu_read_lock_bh_held() ||
>                                         rcu_read_lock_sched_held() ||
> @@ -1144,9 +1156,6 @@ rcu_torture_reader(void *arg)
>               }
>               completed_end = cur_ops->completed();
>               if (pipe_count > 1) {
> -                     unsigned long __maybe_unused ts_rem =
> -                                     do_div(ts, NSEC_PER_USEC);
> -
>                       do_trace_rcu_torture_read(cur_ops->name, &p->rtort_rcu,
>                                                 ts, completed, completed_end);
>                       rcutorture_trace_dump();
> 
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to