Hi Masami,

Thanks for taking the time to look at those changes.

On Thu, Jan 25, 2024 at 12:11:49AM +0900, Masami Hiramatsu wrote:
> On Tue, 23 Jan 2024 11:07:54 +0000
> Vincent Donnefort <vdonnef...@google.com> wrote:
> 
> [...]
> > @@ -6592,8 +6641,11 @@ int tracing_set_tracer(struct trace_array *tr, const 
> > char *buf)
> >  
> >     if (t->init) {
> >             ret = tracer_init(t, tr);
> > -           if (ret)
> > +           if (ret) {
> > +                   if (t->use_max_tr)
> > +                           tracing_disarm_snapshot_locked(tr);
> 
> This part is out of CONFIG_TRACER_MAX_TRACE, so it may cause a compile error
> if CONFIG_TRACER_MAX_TRACE is not set.

Duh, yes it must depends on TRACER_MAX_TRACE :-\

> 
> >                     goto out;
> > +           }
> >     }
> >  
> >     tr->current_trace = t;
> [...]
> > diff --git a/kernel/trace/trace_events_trigger.c 
> > b/kernel/trace/trace_events_trigger.c
> > index 46439e3bcec4..d41bf64741e2 100644
> > --- a/kernel/trace/trace_events_trigger.c
> > +++ b/kernel/trace/trace_events_trigger.c
> > @@ -597,20 +597,9 @@ static int register_trigger(char *glob,
> >     return ret;
> >  }
> >  
> > -/**
> > - * unregister_trigger - Generic event_command @unreg implementation
> > - * @glob: The raw string used to register the trigger
> > - * @test: Trigger-specific data used to find the trigger to remove
> > - * @file: The trace_event_file associated with the event
> > - *
> > - * Common implementation for event trigger unregistration.
> > - *
> > - * Usually used directly as the @unreg method in event command
> > - * implementations.
> > - */
> > -static void unregister_trigger(char *glob,
> > -                          struct event_trigger_data *test,
> > -                          struct trace_event_file *file)
> 
> OK, so __unregister_trigger returns true if data exists, but
> unregister_trigger() ignores results. (I want some comment here)

Will add something for the __unregister_trigger flavour.

> 
> > +static bool __unregister_trigger(char *glob,
> > +                            struct event_trigger_data *test,
> > +                            struct trace_event_file *file)
> >  {
> >     struct event_trigger_data *data = NULL, *iter;
> >  
> > @@ -626,8 +615,32 @@ static void unregister_trigger(char *glob,
> >             }
> >     }
> >  
> > -   if (data && data->ops->free)
> > -           data->ops->free(data);
> > +   if (data) {
> > +           if (data->ops->free)
> > +                   data->ops->free(data);
> > +
> > +           return true;
> > +   }
> > +
> > +   return false;
> > +}
> > +
> > +/**
> > + * unregister_trigger - Generic event_command @unreg implementation
> > + * @glob: The raw string used to register the trigger
> > + * @test: Trigger-specific data used to find the trigger to remove
> > + * @file: The trace_event_file associated with the event
> > + *
> > + * Common implementation for event trigger unregistration.
> > + *
> > + * Usually used directly as the @unreg method in event command
> > + * implementations.
> > + */
> > +static void unregister_trigger(char *glob,
> > +                          struct event_trigger_data *test,
> > +                          struct trace_event_file *file)
> > +{
> > +   __unregister_trigger(glob, test, file);
> >  }
> >  
> >  /*
> > @@ -1470,12 +1483,20 @@ register_snapshot_trigger(char *glob,
> >                       struct event_trigger_data *data,
> >                       struct trace_event_file *file)
> >  {
> > -   if (tracing_alloc_snapshot_instance(file->tr) != 0)
> > +   if (tracing_arm_snapshot(file->tr))
> >             return 0;
> 
> BTW, is this return value correct? It seems that the register_*_trigger()
> will return error code when it fails.

It should indeed be 

 ret = tracing_arm_snapshot()
 if (ret)
     return ret;

> 
> Thanks,
> 
> >  
> >     return register_trigger(glob, data, file);
> >  }
> >  
> > +static void unregister_snapshot_trigger(char *glob,
> > +                                   struct event_trigger_data *data,
> > +                                   struct trace_event_file *file)
> > +{
> > +   if (__unregister_trigger(glob, data, file))
> > +           tracing_disarm_snapshot(file->tr);
> > +}
> > +
> >  static int
> >  snapshot_trigger_print(struct seq_file *m, struct event_trigger_data *data)
> >  {
> > @@ -1508,7 +1529,7 @@ static struct event_command trigger_snapshot_cmd = {
> >     .trigger_type           = ETT_SNAPSHOT,
> >     .parse                  = event_trigger_parse,
> >     .reg                    = register_snapshot_trigger,
> > -   .unreg                  = unregister_trigger,
> > +   .unreg                  = unregister_snapshot_trigger,
> >     .get_trigger_ops        = snapshot_get_trigger_ops,
> >     .set_filter             = set_trigger_filter,
> >  };
> > -- 
> > 2.43.0.429.g432eaa2c6b-goog
> > 
> 
> 
> -- 
> Masami Hiramatsu (Google) <mhira...@kernel.org>

Reply via email to