perf thread_map: Add method to map all threads in the system
tip-bot for Arnaldo Carvalho de Melo
merge botCommit-ID: 8d3cd4c3d3ab5f4f9edd5c593b7743f7fbd3526d Gitweb: https://git.kernel.org/tip/8d3cd4c3d3ab5f4f9edd5c593b7743f7fbd3526d Author: Arnaldo Carvalho de Melo <[email protected]> AuthorDate: Fri, 1 Dec 2017 11:44:30 -0300 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Tue, 5 Dec 2017 10:24:32 -0300
perf thread_map: Add method to map all threads in the system
Reusing the thread_map__new_by_uid() proc scanning already in place to return a map with all threads in the system.
Based-on-a-patch-by Jin Yao <[email protected]>
Acked-by Jiri Olsa <[email protected]>
Cc Alexander Shishkin <[email protected]>
Cc Andi Kleen <[email protected]>
Cc Kan Liang <[email protected]>
Cc Peter Zijlstra <[email protected]>
Signed-off-by Arnaldo Carvalho de Melo <[email protected]>
--- tools/perf/util/thread_map.c | 22 ++++++++++++++++------ tools/perf/util/thread_map.h | 1 + 2 files changed, 17 insertions(+), 6 deletions(-)
tools/perf/util/thread_map.c +16 -6
@@ -92,7 +92,7 @@ struct thread_map *thread_map__new_by_tid(pid_t tid)return threads; } -struct thread_map *thread_map__new_by_uid (uid_t uid) +static struct thread_map *__thread_map__new_all_cpus (uid_t uid) {DIR *proc;int max_threads =32 , items, i;
@@ -113,7 +113,6 @@ struct thread_map *thread_map__new_by_uid(uid_t uid)while ((dirent =readdir (proc)) !=NULL ) {char *end;bool grow = false; -struct stat st;pid_t pid =strtol (dirent->d_name, &end,10 );if (*end)/* only interested in proper numerical dirents */
@@ -121,11 +120,12 @@ struct thread_map *thread_map__new_by_uid(uid_t uid)snprintf (path,sizeof (path),"/proc/%s" , dirent->d_name); -if (stat (path, &st) !=0 ) -continue ; +if (uid !=UINT_MAX ) { +struct stat st; -if (st.st_uid != uid) -continue ; +if (stat (path, &st) !=0 || st.st_uid != uid) +continue ; + }snprintf (path,sizeof (path),"/proc/%d/task" , pid); items =scandir (path, &namelist, filter,NULL );
@@ -178,6 +178,16 @@ out_free_closedir: goto out_closedir; } +struct thread_map *thread_map__new_all_cpus (void ) +{ +return __thread_map__new_all_cpus (UINT_MAX ); +} + +struct thread_map *thread_map__new_by_uid (uid_t uid) +{ +return __thread_map__new_all_cpus (uid); +} +struct thread_map *thread_map__new (pid_t pid,pid_t tid,uid_t uid) {if (pid !=-1 )
tools/perf/util/thread_map.h +1 -0
@@ -23,6 +23,7 @@ struct thread_map *thread_map__new_dummy(void);struct thread_map *thread_map__new_by_pid (pid_t pid);struct thread_map *thread_map__new_by_tid (pid_t tid);struct thread_map *thread_map__new_by_uid (uid_t uid); +struct thread_map *thread_map__new_all_cpus (void );struct thread_map *thread_map__new (pid_t pid,pid_t tid,uid_t uid);struct thread_map *thread_map__new_event (struct thread_map_event *event);