| 1 |
|
| 2 | #ifndef __PERF_THREADS_H
|
| 3 | #define __PERF_THREADS_H
|
| 4 |
|
| 5 | #include "hashmap.h"
|
| 6 | #include "rwsem.h"
|
| 7 |
|
| 8 | struct thread;
|
| 9 |
|
| 10 | #define THREADS__TABLE_BITS 3
|
| 11 | #define THREADS__TABLE_SIZE (1 << THREADS__TABLE_BITS)
|
| 12 |
|
| 13 | struct threads_table_entry {
|
| 14 |
|
| 15 | struct hashmap shard;
|
| 16 | struct rw_semaphore lock;
|
| 17 | struct thread *last_match;
|
| 18 | };
|
| 19 |
|
| 20 | struct threads {
|
| 21 | struct threads_table_entry table[THREADS__TABLE_SIZE];
|
| 22 | };
|
| 23 |
|
| 24 | void threads__init(struct threads *threads);
|
| 25 | void threads__exit(struct threads *threads);
|
| 26 | size_t threads__nr(struct threads *threads);
|
| 27 | struct thread *threads__find(struct threads *threads, pid_t tid);
|
| 28 | struct thread *threads__findnew(struct threads *threads, pid_t pid, pid_t tid, bool *created);
|
| 29 | void threads__remove_all_threads(struct threads *threads);
|
| 30 | void threads__remove(struct threads *threads, struct thread *thread);
|
| 31 | int threads__for_each_thread(struct threads *threads,
|
| 32 | int (*fn)(struct thread *thread, void *data),
|
| 33 | void *data);
|
| 34 |
|
| 35 | #endif
|