xref: /linux/tools/perf/util/thread.h (revision 273b281fa22c293963ee3e6eec418f5dda2dbc83)
1 #ifndef __PERF_THREAD_H
2 #define __PERF_THREAD_H
3 
4 #include <linux/rbtree.h>
5 #include <unistd.h>
6 #include "symbol.h"
7 
8 struct thread {
9 	struct rb_node		rb_node;
10 	struct rb_root		maps[MAP__NR_TYPES];
11 	struct list_head	removed_maps[MAP__NR_TYPES];
12 	pid_t			pid;
13 	bool			use_modules;
14 	char			shortname[3];
15 	char			*comm;
16 	int			comm_len;
17 };
18 
19 void thread__init(struct thread *self, pid_t pid);
20 int thread__set_comm(struct thread *self, const char *comm);
21 int thread__comm_len(struct thread *self);
22 struct thread *threads__findnew(pid_t pid);
23 struct thread *register_idle_thread(void);
24 void thread__insert_map(struct thread *self, struct map *map);
25 int thread__fork(struct thread *self, struct thread *parent);
26 size_t thread__fprintf_maps(struct thread *self, FILE *fp);
27 size_t threads__fprintf(FILE *fp);
28 
29 void maps__insert(struct rb_root *maps, struct map *map);
30 struct map *maps__find(struct rb_root *maps, u64 addr);
31 
32 static inline struct map *thread__find_map(struct thread *self,
33 					   enum map_type type, u64 addr)
34 {
35 	return self ? maps__find(&self->maps[type], addr) : NULL;
36 }
37 
38 static inline void __thread__insert_map(struct thread *self, struct map *map)
39 {
40 	 maps__insert(&self->maps[map->type], map);
41 }
42 
43 void thread__find_addr_location(struct thread *self, u8 cpumode,
44 				enum map_type type, u64 addr,
45 				struct addr_location *al,
46 				symbol_filter_t filter);
47 struct symbol *thread__find_symbol(struct thread *self,
48 				   enum map_type type, u64 addr,
49 				   symbol_filter_t filter);
50 
51 static inline struct symbol *
52 thread__find_function(struct thread *self, u64 addr, symbol_filter_t filter)
53 {
54 	return thread__find_symbol(self, MAP__FUNCTION, addr, filter);
55 }
56 #endif	/* __PERF_THREAD_H */
57