On Wed, Jul 15, 2015 at 06:15:30PM +0900, Masami Hiramatsu wrote:
> Allow user to set group name for adding new event.
> Note that this can easily shot yourself in the foot.
> E.g. Existing group name can conflict with other events.
> Especially, using the group name reserved for kernel
> modules can break something when loading/unloading
> modules.

Yes, I agree that this can be dangerous.  How about enforcing
[ku]probes to make the directory of dynamic events safely?  I think
it'd be better putting all dynamic events in a single directory -
e.g. $tracefs/events/probe/.  Any events lack group name are created
in the directory.  Any events have group name create subdirectories as
group name under the directory.  The perf tools (and others too)
should be changed to lookup the directory after the usual location.

What do you think?


> 
> Signed-off-by: Masami Hiramatsu <masami.hiramatsu...@hitachi.com>
> ---
>  tools/perf/util/probe-event.c |   23 ++++++++++++++---------
>  1 file changed, 14 insertions(+), 9 deletions(-)
> 
> diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
> index 262f9d3..c19a380 100644
> --- a/tools/perf/util/probe-event.c
> +++ b/tools/perf/util/probe-event.c
> @@ -1141,10 +1141,8 @@ static int parse_perf_probe_point(char *arg, struct 
> perf_probe_event *pev)
>       bool file_spec = false;
>       /*
>        * <Syntax>
> -      * perf probe [EVENT=]SRC[:LN|;PTN]
> -      * perf probe [EVENT=]FUNC[@SRC][+OFFS|%return|:LN|;PAT]
> -      *
> -      * TODO:Group name support
> +      * perf probe [GRP:][EVENT=]SRC[:LN|;PTN]

Shouldn't it be
                      [[GRP:]EVENT=]

?

> +      * perf probe [GRP:][EVENT=]FUNC[@SRC][+OFFS|%return|:LN|;PAT]

Ditto.

Thanks,
Namhyung


>        */
>       if (!arg)
>               return -EINVAL;
> @@ -1153,11 +1151,19 @@ static int parse_perf_probe_point(char *arg, struct 
> perf_probe_event *pev)
>       if (ptr && *ptr == '=') {       /* Event name */
>               *ptr = '\0';
>               tmp = ptr + 1;
> -             if (strchr(arg, ':')) {
> -                     semantic_error("Group name is not supported yet.\n");
> -                     return -ENOTSUP;
> -             }
> +             ptr = strchr(arg, ':');
> +             if (ptr) {
> +                     *ptr = '\0';
> +                     if (!is_c_func_name(arg))
> +                             goto not_fname;
> +                     pev->group = strdup(arg);
> +                     if (!pev->group)
> +                             return -ENOMEM;
> +                     arg = ptr + 1;
> +             } else
> +                     pev->group = NULL;
>               if (!is_c_func_name(arg)) {
> +not_fname:
>                       semantic_error("%s is bad for event name -it must "
>                                      "follow C symbol-naming rule.\n", arg);
>                       return -EINVAL;
> @@ -1165,7 +1171,6 @@ static int parse_perf_probe_point(char *arg, struct 
> perf_probe_event *pev)
>               pev->event = strdup(arg);
>               if (pev->event == NULL)
>                       return -ENOMEM;
> -             pev->group = NULL;
>               arg = tmp;
>       }
>  
> 
> 
--
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