diff options
Diffstat (limited to 'tools/perf/util/machine.h')
| -rw-r--r-- | tools/perf/util/machine.h | 33 | 
1 files changed, 25 insertions, 8 deletions
diff --git a/tools/perf/util/machine.h b/tools/perf/util/machine.h index d551aa80a59b..5ce860b64c74 100644 --- a/tools/perf/util/machine.h +++ b/tools/perf/util/machine.h @@ -7,6 +7,7 @@  #include "map.h"  #include "dso.h"  #include "event.h" +#include "rwsem.h"  struct addr_location;  struct branch_stack; @@ -24,6 +25,17 @@ extern const char *ref_reloc_sym_names[];  struct vdso_info; +#define THREADS__TABLE_BITS	8 +#define THREADS__TABLE_SIZE	(1 << THREADS__TABLE_BITS) + +struct threads { +	struct rb_root	  entries; +	struct rw_semaphore lock; +	unsigned int	  nr; +	struct list_head  dead; +	struct thread	  *last_match; +}; +  struct machine {  	struct rb_node	  rb_node;  	pid_t		  pid; @@ -31,11 +43,7 @@ struct machine {  	bool		  comm_exec;  	bool		  kptr_restrict_warned;  	char		  *root_dir; -	struct rb_root	  threads; -	pthread_rwlock_t  threads_lock; -	unsigned int	  nr_threads; -	struct list_head  dead_threads; -	struct thread	  *last_match; +	struct threads    threads[THREADS__TABLE_SIZE];  	struct vdso_info  *vdso_info;  	struct perf_env   *env;  	struct dsos	  dsos; @@ -49,6 +57,12 @@ struct machine {  	};  }; +static inline struct threads *machine__threads(struct machine *machine, pid_t tid) +{ +	/* Cast it to handle tid == -1 */ +	return &machine->threads[(unsigned int)tid % THREADS__TABLE_SIZE]; +} +  static inline  struct map *__machine__kernel_map(struct machine *machine, enum map_type type)  { @@ -244,15 +258,18 @@ int machines__for_each_thread(struct machines *machines,  int __machine__synthesize_threads(struct machine *machine, struct perf_tool *tool,  				  struct target *target, struct thread_map *threads,  				  perf_event__handler_t process, bool data_mmap, -				  unsigned int proc_map_timeout); +				  unsigned int proc_map_timeout, +				  unsigned int nr_threads_synthesize);  static inline  int machine__synthesize_threads(struct machine *machine, struct target *target,  				struct thread_map *threads, bool data_mmap, -				unsigned int proc_map_timeout) +				unsigned int proc_map_timeout, +				unsigned int nr_threads_synthesize)  {  	return __machine__synthesize_threads(machine, NULL, target, threads,  					     perf_event__process, data_mmap, -					     proc_map_timeout); +					     proc_map_timeout, +					     nr_threads_synthesize);  }  pid_t machine__get_current_tid(struct machine *machine, int cpu);  | 
