Probe points are defined by following syntax.
 
     1) Define event based on function name
-     [EVENT=]FUNC[@SRC][:RLN|+OFFS|%return|;PTN] [ARG ...]
+     [[GROUP:]EVENT=]FUNC[@SRC][:RLN|+OFFS|%return|;PTN] [ARG ...]
 
     2) Define event based on source file with line number
-     [EVENT=]SRC:ALN [ARG ...]
+     [[GROUP:]EVENT=]SRC:ALN [ARG ...]
 
     3) Define event based on source file with lazy pattern
-     [EVENT=]SRC;PTN [ARG ...]
+     [[GROUP:]EVENT=]SRC;PTN [ARG ...]
 
 
-'EVENT' specifies the name of new event, if omitted, it will be set the name of the probed function. Currently, event group name is set as 'probe'.
+'EVENT' specifies the name of new event, if omitted, it will be set the name of the probed function. You can also specify a group name by 'GROUP', if omitted, set 'probe' is used for kprobe and 'probe_<bin>' is used for uprobe.
+Note that using existing group name can conflict with other events. Especially, using the group name reserved for kernel modules can hide embedded events in the
+modules.
 'FUNC' specifies a probed function name, and it may have one of the following options; '+OFFS' is the offset from function entry address in bytes, ':RLN' is the relative-line number from function entry line, and '%return' means that it probes function return. And ';PTN' means lazy matching pattern (see LAZY MATCHING). Note that ';PTN' must be the end of the probe point definition.  In addition, '@SRC' specifies a source file which has that function.
 It is also possible to specify a probe point by the source line number or lazy matching by using 'SRC:ALN' or 'SRC;PTN' syntax, where 'SRC' is the source file path, ':ALN' is the line number and ';PTN' is the lazy matching pattern.
 'ARG' specifies the arguments of this probe point, (see PROBE ARGUMENT).
 
        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]
+        * perf probe [GRP:][EVENT=]FUNC[@SRC][+OFFS|%return|:LN|;PAT]
         */
        if (!arg)
                return -EINVAL;
        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;
                pev->event = strdup(arg);
                if (pev->event == NULL)
                        return -ENOMEM;
-               pev->group = NULL;
                arg = tmp;
        }