Linux Perf
thread.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __PERF_THREAD_H
3 #define __PERF_THREAD_H
4 
5 #include <linux/refcount.h>
6 #include <linux/rbtree.h>
7 #include <linux/list.h>
8 #include <unistd.h>
9 #include <sys/types.h>
10 #include "symbol.h"
11 #include <strlist.h>
12 #include <intlist.h>
13 #include "rwsem.h"
14 
15 struct thread_stack;
17 
18 struct thread {
19  union {
20  struct rb_node rb_node;
21  struct list_head node;
22  };
23  struct map_groups *mg;
24  pid_t pid_; /* Not all tools update this */
25  pid_t tid;
26  pid_t ppid;
27  int cpu;
28  refcount_t refcnt;
29  bool comm_set;
30  int comm_len;
31  bool dead; /* if set thread has exited */
32  struct list_head namespaces_list;
34  struct list_head comm_list;
36  u64 db_id;
37 
38  void *priv;
39  struct thread_stack *ts;
40  struct nsinfo *nsinfo;
41 #ifdef HAVE_LIBUNWIND_SUPPORT
42  void *addr_space;
44 #endif
45 };
46 
47 struct machine;
48 struct namespaces;
49 struct comm;
50 
51 struct thread *thread__new(pid_t pid, pid_t tid);
53 void thread__delete(struct thread *thread);
54 
55 struct thread *thread__get(struct thread *thread);
56 void thread__put(struct thread *thread);
57 
58 static inline void __thread__zput(struct thread **thread)
59 {
60  thread__put(*thread);
61  *thread = NULL;
62 }
63 
64 #define thread__zput(thread) __thread__zput(&thread)
65 
66 static inline void thread__exited(struct thread *thread)
67 {
68  thread->dead = true;
69 }
70 
71 struct namespaces *thread__namespaces(const struct thread *thread);
72 int thread__set_namespaces(struct thread *thread, u64 timestamp,
73  struct namespaces_event *event);
74 
75 int __thread__set_comm(struct thread *thread, const char *comm, u64 timestamp,
76  bool exec);
77 static inline int thread__set_comm(struct thread *thread, const char *comm,
78  u64 timestamp)
79 {
80  return __thread__set_comm(thread, comm, timestamp, false);
81 }
82 
83 int thread__set_comm_from_proc(struct thread *thread);
84 
85 int thread__comm_len(struct thread *thread);
86 struct comm *thread__comm(const struct thread *thread);
87 struct comm *thread__exec_comm(const struct thread *thread);
88 const char *thread__comm_str(const struct thread *thread);
89 int thread__insert_map(struct thread *thread, struct map *map);
90 int thread__fork(struct thread *thread, struct thread *parent, u64 timestamp);
91 size_t thread__fprintf(struct thread *thread, FILE *fp);
92 
93 struct thread *thread__main_thread(struct machine *machine, struct thread *thread);
94 
95 struct map *thread__find_map(struct thread *thread, u8 cpumode, u64 addr,
96  struct addr_location *al);
97 
98 struct symbol *thread__find_symbol(struct thread *thread, u8 cpumode,
99  u64 addr, struct addr_location *al);
100 
101 void thread__find_cpumode_addr_location(struct thread *thread, u64 addr,
102  struct addr_location *al);
103 
104 static inline void *thread__priv(struct thread *thread)
105 {
106  return thread->priv;
107 }
108 
109 static inline void thread__set_priv(struct thread *thread, void *p)
110 {
111  thread->priv = p;
112 }
113 
114 static inline bool thread__is_filtered(struct thread *thread)
115 {
116  if (symbol_conf.comm_list &&
118  return true;
119  }
120 
121  if (symbol_conf.pid_list &&
123  return true;
124  }
125 
126  if (symbol_conf.tid_list &&
128  return true;
129  }
130 
131  return false;
132 }
133 
134 #endif /* __PERF_THREAD_H */
static bool thread__is_filtered(struct thread *thread)
Definition: thread.h:114
struct map_groups * mg
Definition: thread.h:23
Definition: mem2node.c:7
static void thread__exited(struct thread *thread)
Definition: thread.h:66
int thread__set_comm_from_proc(struct thread *thread)
Definition: thread.c:231
struct strlist * comm_list
Definition: symbol.h:138
pid_t pid_
Definition: thread.h:24
bool dead
Definition: thread.h:31
struct intlist * pid_list
Definition: symbol.h:146
static void __thread__zput(struct thread **thread)
Definition: thread.h:58
struct map * thread__find_map(struct thread *thread, u8 cpumode, u64 addr, struct addr_location *al)
Definition: event.c:1511
pid_t ppid
Definition: thread.h:26
struct list_head comm_list
Definition: thread.h:34
const char * thread__comm_str(const struct thread *thread)
Definition: thread.c:258
bool comm_set
Definition: thread.h:29
struct rb_node rb_node
Definition: thread.h:20
struct namespaces * thread__namespaces(const struct thread *thread)
Definition: thread.c:131
struct thread_stack * ts
Definition: thread.h:39
size_t thread__fprintf(struct thread *thread, FILE *fp)
Definition: thread.c:282
void thread__find_cpumode_addr_location(struct thread *thread, u64 addr, struct addr_location *al)
Definition: thread.c:368
Definition: comm.h:11
void * priv
Definition: thread.h:38
int thread__comm_len(struct thread *thread)
Definition: thread.c:270
struct rw_semaphore namespaces_lock
Definition: thread.h:33
static bool intlist__has_entry(struct intlist *ilist, int i)
Definition: intlist.h:30
int thread__set_namespaces(struct thread *thread, u64 timestamp, struct namespaces_event *event)
Definition: thread.c:163
Definition: thread.h:18
int comm_len
Definition: thread.h:30
refcount_t refcnt
Definition: thread.h:28
int cpu
Definition: thread.h:27
struct rw_semaphore comm_lock
Definition: thread.h:35
pid_t tid
Definition: thread.h:25
struct thread * thread__main_thread(struct machine *machine, struct thread *thread)
Definition: thread.c:386
void thread__delete(struct thread *thread)
Definition: thread.c:76
struct thread * thread__new(pid_t pid, pid_t tid)
Definition: thread.c:36
#define event
struct symbol * thread__find_symbol(struct thread *thread, u8 cpumode, u64 addr, struct addr_location *al)
Definition: event.c:1588
Definition: map.h:63
struct comm * thread__exec_comm(const struct thread *thread)
Definition: thread.c:182
int __thread__set_comm(struct thread *thread, const char *comm, u64 timestamp, bool exec)
Definition: thread.c:220
u32 pid
Definition: hists_common.c:15
static int thread__set_comm(struct thread *thread, const char *comm, u64 timestamp)
Definition: thread.h:77
u64 db_id
Definition: thread.h:36
Definition: jevents.c:228
int thread__init_map_groups(struct thread *thread, struct machine *machine)
Definition: thread.c:19
struct comm * thread__comm(const struct thread *thread)
Definition: thread.c:174
int thread__fork(struct thread *thread, struct thread *parent, u64 timestamp)
Definition: thread.c:352
int thread__insert_map(struct thread *thread, struct map *map)
Definition: thread.c:288
struct thread * thread__get(struct thread *thread)
Definition: thread.c:112
static void thread__set_priv(struct thread *thread, void *p)
Definition: thread.h:109
Definition: symbol.h:55
struct intlist * tid_list
Definition: symbol.h:146
struct list_head namespaces_list
Definition: thread.h:32
struct nsinfo * nsinfo
Definition: thread.h:40
void thread__put(struct thread *thread)
Definition: thread.c:119
static bool strlist__has_entry(struct strlist *slist, const char *entry)
Definition: strlist.h:42
static void * thread__priv(struct thread *thread)
Definition: thread.h:104