|
@@ -380,8 +380,8 @@ static int add_tracepoint(struct list_head **listp, int *idx,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int add_tracepoint_multi(struct list_head **list, int *idx,
|
|
|
- char *sys_name, char *evt_name)
|
|
|
+static int add_tracepoint_multi_event(struct list_head **list, int *idx,
|
|
|
+ char *sys_name, char *evt_name)
|
|
|
{
|
|
|
char evt_path[MAXPATHLEN];
|
|
|
struct dirent *evt_ent;
|
|
@@ -412,6 +412,46 @@ static int add_tracepoint_multi(struct list_head **list, int *idx,
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+static int add_tracepoint_event(struct list_head **list, int *idx,
|
|
|
+ char *sys_name, char *evt_name)
|
|
|
+{
|
|
|
+ return strpbrk(evt_name, "*?") ?
|
|
|
+ add_tracepoint_multi_event(list, idx, sys_name, evt_name) :
|
|
|
+ add_tracepoint(list, idx, sys_name, evt_name);
|
|
|
+}
|
|
|
+
|
|
|
+static int add_tracepoint_multi_sys(struct list_head **list, int *idx,
|
|
|
+ char *sys_name, char *evt_name)
|
|
|
+{
|
|
|
+ struct dirent *events_ent;
|
|
|
+ DIR *events_dir;
|
|
|
+ int ret = 0;
|
|
|
+
|
|
|
+ events_dir = opendir(tracing_events_path);
|
|
|
+ if (!events_dir) {
|
|
|
+ perror("Can't open event dir");
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ while (!ret && (events_ent = readdir(events_dir))) {
|
|
|
+ if (!strcmp(events_ent->d_name, ".")
|
|
|
+ || !strcmp(events_ent->d_name, "..")
|
|
|
+ || !strcmp(events_ent->d_name, "enable")
|
|
|
+ || !strcmp(events_ent->d_name, "header_event")
|
|
|
+ || !strcmp(events_ent->d_name, "header_page"))
|
|
|
+ continue;
|
|
|
+
|
|
|
+ if (!strglobmatch(events_ent->d_name, sys_name))
|
|
|
+ continue;
|
|
|
+
|
|
|
+ ret = add_tracepoint_event(list, idx, events_ent->d_name,
|
|
|
+ evt_name);
|
|
|
+ }
|
|
|
+
|
|
|
+ closedir(events_dir);
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
int parse_events_add_tracepoint(struct list_head **list, int *idx,
|
|
|
char *sys, char *event)
|
|
|
{
|
|
@@ -421,9 +461,10 @@ int parse_events_add_tracepoint(struct list_head **list, int *idx,
|
|
|
if (ret)
|
|
|
return ret;
|
|
|
|
|
|
- return strpbrk(event, "*?") ?
|
|
|
- add_tracepoint_multi(list, idx, sys, event) :
|
|
|
- add_tracepoint(list, idx, sys, event);
|
|
|
+ if (strpbrk(sys, "*?"))
|
|
|
+ return add_tracepoint_multi_sys(list, idx, sys, event);
|
|
|
+ else
|
|
|
+ return add_tracepoint_event(list, idx, sys, event);
|
|
|
}
|
|
|
|
|
|
static int
|