On Sat, 12 Mar 2016 17:35:02 +0900
Namhyung Kim <[email protected]> wrote:

> 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;  

Yeah, this is confusing. Mind adding a comment above this:

        /* Must match FTRACE_UPDATE_CALLS in ftrace_modify_all_code() */

That way others will know why this is a '1'.

-- Steve

> > > 
> > > 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