Re: [PATCH 4/5] ftrace: Make ftrace_hash_rec_enable return update bool

From: Steven Rostedt
Date: Tue Mar 15 2016 - 15:44:04 EST


On Sat, 12 Mar 2016 17:35:02 +0900
Namhyung Kim <namhyung@xxxxxxxxxx> 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