perf list: Fix the output to not include tracepoints without an id
Stop perf list from displaying tracepoints without an id file, those are special tracepoints that are not interfaced to perfcounters so listing them is erroneous and passing them as events will produce no output. Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Acked-by: Jason Baron <jbaron@redhat.com> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Chris Mason <chris.mason@oracle.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
f36a1a133a
commit
ae07b63f4b
|
@ -121,13 +121,29 @@ static unsigned long hw_cache_stat[C(MAX)] = {
|
|||
(strcmp(sys_dirent.d_name, ".")) && \
|
||||
(strcmp(sys_dirent.d_name, "..")))
|
||||
|
||||
static int tp_event_has_id(struct dirent *sys_dir, struct dirent *evt_dir)
|
||||
{
|
||||
char evt_path[MAXPATHLEN];
|
||||
int fd;
|
||||
|
||||
snprintf(evt_path, MAXPATHLEN, "%s/%s/%s/id", debugfs_path,
|
||||
sys_dir->d_name, evt_dir->d_name);
|
||||
fd = open(evt_path, O_RDONLY);
|
||||
if (fd < 0)
|
||||
return -EINVAL;
|
||||
close(fd);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define for_each_event(sys_dirent, evt_dir, evt_dirent, evt_next, file, st) \
|
||||
while (!readdir_r(evt_dir, &evt_dirent, &evt_next) && evt_next) \
|
||||
if (snprintf(file, MAXPATHLEN, "%s/%s/%s", debugfs_path, \
|
||||
sys_dirent.d_name, evt_dirent.d_name) && \
|
||||
(!stat(file, &st)) && (S_ISDIR(st.st_mode)) && \
|
||||
(strcmp(evt_dirent.d_name, ".")) && \
|
||||
(strcmp(evt_dirent.d_name, "..")))
|
||||
(strcmp(evt_dirent.d_name, "..")) && \
|
||||
(!tp_event_has_id(&sys_dirent, &evt_dirent)))
|
||||
|
||||
#define MAX_EVENT_LENGTH 30
|
||||
|
||||
|
|
Loading…
Reference in New Issue