Hi Jiri,

On Fri, Mar 11, 2016 at 07:15:06PM +0100, Jiri Olsa wrote:
> On Fri, Mar 11, 2016 at 11:28:00PM +0900, Namhyung Kim wrote:
> 
> SNIP
> 
> > > @@ -1694,7 +1695,7 @@ static void __ftrace_hash_rec_update(struct 
> > > ftrace_ops *ops,
> > >           if (inc) {
> > >                   rec->flags++;
> > >                   if (FTRACE_WARN_ON(ftrace_rec_count(rec) == 
> > > FTRACE_REF_MAX))
> > > -                         return;
> > > +                         return false;
> > >  
> > >                   /*
> > >                    * If there's only a single callback registered to a
> > > @@ -1720,7 +1721,7 @@ static void __ftrace_hash_rec_update(struct 
> > > ftrace_ops *ops,
> > >                           rec->flags |= FTRACE_FL_REGS;
> > >           } else {
> > >                   if (FTRACE_WARN_ON(ftrace_rec_count(rec) == 0))
> > > -                         return;
> > > +                         return false;
> > >                   rec->flags--;
> > >  
> > >                   /*
> > > @@ -1753,22 +1754,27 @@ static void __ftrace_hash_rec_update(struct 
> > > ftrace_ops *ops,
> > >                    */
> > >           }
> > >           count++;
> > > +
> > > +         update |= ftrace_test_record(rec, 1) != FTRACE_UPDATE_IGNORE;
> > 
> > Shouldn't it use 'inc' instead of 1 for the second argument of
> > the ftrace_test_record()?
> 
> I dont think so, 1 is to update calls (FTRACE_UPDATE_CALLS)
> check ftrace_modify_all_code:
> 
>         if (command & FTRACE_UPDATE_CALLS)
>                 ftrace_replace_code(1);
>         else if (command & FTRACE_DISABLE_CALLS)
>                 ftrace_replace_code(0);
> 
> both ftrace_startup, ftrace_shutdown use FTRACE_UPDATE_CALLS

Ah, ok.  So the second argument of the ftrace_test_record() is not
'enable' actually..  :-/

> 
> you'd use 0 only to disable all, check ftrace_check_record comments:
> 
>         /*
>          * If we are updating calls:
>          *
>          *   If the record has a ref count, then we need to enable it
>          *   because someone is using it.
>          *
>          *   Otherwise we make sure its disabled.
>          *
>          * If we are disabling calls, then disable all records that
>          * are enabled.
>          */
>         if (enable && ftrace_rec_count(rec))
>                 flag = FTRACE_FL_ENABLED;
> 
> 
> used by ftrace_shutdown_sysctl

I got it.  Thank you for the explanation!

Thanks,
Namhyung

Reply via email to