2012-10-06 22:43:20 +04:00
# ifndef __PERF_MACHINE_H
# define __PERF_MACHINE_H
# include <sys/types.h>
2012-11-09 18:32:52 +04:00
# include <linux/rbtree.h>
# include "map.h"
2012-10-06 22:43:20 +04:00
2012-12-07 09:48:05 +04:00
struct addr_location ;
2012-11-09 18:32:52 +04:00
struct branch_stack ;
struct perf_evsel ;
struct perf_sample ;
struct symbol ;
2012-10-06 22:43:20 +04:00
struct thread ;
2012-10-06 23:26:02 +04:00
union perf_event ;
2012-10-06 22:43:20 +04:00
2012-11-09 18:32:52 +04:00
/* Native host kernel uses -1 as pid index in machine */
# define HOST_KERNEL_ID (-1)
# define DEFAULT_GUEST_KERNEL_ID (0)
struct machine {
struct rb_node rb_node ;
pid_t pid ;
u16 id_hdr_size ;
char * root_dir ;
struct rb_root threads ;
struct list_head dead_threads ;
struct thread * last_match ;
struct list_head user_dsos ;
struct list_head kernel_dsos ;
struct map_groups kmaps ;
struct map * vmlinux_maps [ MAP__NR_TYPES ] ;
} ;
static inline
struct map * machine__kernel_map ( struct machine * machine , enum map_type type )
{
return machine - > vmlinux_maps [ type ] ;
}
2013-07-04 17:20:31 +04:00
struct thread * machine__find_thread ( struct machine * machine , pid_t tid ) ;
2012-10-06 22:43:20 +04:00
2012-10-06 23:26:02 +04:00
int machine__process_comm_event ( struct machine * machine , union perf_event * event ) ;
int machine__process_exit_event ( struct machine * machine , union perf_event * event ) ;
int machine__process_fork_event ( struct machine * machine , union perf_event * event ) ;
int machine__process_lost_event ( struct machine * machine , union perf_event * event ) ;
int machine__process_mmap_event ( struct machine * machine , union perf_event * event ) ;
int machine__process_event ( struct machine * machine , union perf_event * event ) ;
2012-11-09 18:32:52 +04:00
typedef void ( * machine__process_t ) ( struct machine * machine , void * data ) ;
2012-12-19 02:15:48 +04:00
struct machines {
struct machine host ;
struct rb_root guests ;
} ;
void machines__init ( struct machines * machines ) ;
void machines__exit ( struct machines * machines ) ;
void machines__process_guests ( struct machines * machines ,
machine__process_t process , void * data ) ;
2012-11-09 18:32:52 +04:00
2012-12-19 02:15:48 +04:00
struct machine * machines__add ( struct machines * machines , pid_t pid ,
2012-11-09 18:32:52 +04:00
const char * root_dir ) ;
2012-12-19 02:15:48 +04:00
struct machine * machines__find_host ( struct machines * machines ) ;
struct machine * machines__find ( struct machines * machines , pid_t pid ) ;
struct machine * machines__findnew ( struct machines * machines , pid_t pid ) ;
2012-11-09 18:32:52 +04:00
2012-12-19 02:15:48 +04:00
void machines__set_id_hdr_size ( struct machines * machines , u16 id_hdr_size ) ;
2012-11-09 18:32:52 +04:00
char * machine__mmap_name ( struct machine * machine , char * bf , size_t size ) ;
int machine__init ( struct machine * machine , const char * root_dir , pid_t pid ) ;
void machine__exit ( struct machine * machine ) ;
2012-12-08 00:39:39 +04:00
void machine__delete_dead_threads ( struct machine * machine ) ;
void machine__delete_threads ( struct machine * machine ) ;
2012-11-09 18:32:52 +04:00
void machine__delete ( struct machine * machine ) ;
struct branch_info * machine__resolve_bstack ( struct machine * machine ,
struct thread * thread ,
struct branch_stack * bs ) ;
2013-01-24 19:10:35 +04:00
struct mem_info * machine__resolve_mem ( struct machine * machine ,
struct thread * thread ,
struct perf_sample * sample , u8 cpumode ) ;
2012-11-09 18:32:52 +04:00
int machine__resolve_callchain ( struct machine * machine ,
struct perf_evsel * evsel ,
struct thread * thread ,
struct perf_sample * sample ,
2012-12-07 09:48:05 +04:00
struct symbol * * parent ,
struct addr_location * root_al ) ;
2012-11-09 18:32:52 +04:00
/*
* Default guest kernel is defined by parameter - - guestkallsyms
* and - - guestmodules
*/
static inline bool machine__is_default_guest ( struct machine * machine )
{
return machine ? machine - > pid = = DEFAULT_GUEST_KERNEL_ID : false ;
}
static inline bool machine__is_host ( struct machine * machine )
{
return machine ? machine - > pid = = HOST_KERNEL_ID : false ;
}
2013-07-04 17:20:31 +04:00
struct thread * machine__findnew_thread ( struct machine * machine , pid_t tid ) ;
2012-11-09 18:32:52 +04:00
size_t machine__fprintf ( struct machine * machine , FILE * fp ) ;
static inline
struct symbol * machine__find_kernel_symbol ( struct machine * machine ,
enum map_type type , u64 addr ,
struct map * * mapp ,
symbol_filter_t filter )
{
return map_groups__find_symbol ( & machine - > kmaps , type , addr ,
mapp , filter ) ;
}
static inline
struct symbol * machine__find_kernel_function ( struct machine * machine , u64 addr ,
struct map * * mapp ,
symbol_filter_t filter )
{
return machine__find_kernel_symbol ( machine , MAP__FUNCTION , addr ,
mapp , filter ) ;
}
static inline
struct symbol * machine__find_kernel_function_by_name ( struct machine * machine ,
const char * name ,
struct map * * mapp ,
symbol_filter_t filter )
{
return map_groups__find_function_by_name ( & machine - > kmaps , name , mapp ,
filter ) ;
}
struct map * machine__new_module ( struct machine * machine , u64 start ,
const char * filename ) ;
int machine__load_kallsyms ( struct machine * machine , const char * filename ,
enum map_type type , symbol_filter_t filter ) ;
int machine__load_vmlinux_path ( struct machine * machine , enum map_type type ,
symbol_filter_t filter ) ;
2012-12-07 16:53:58 +04:00
size_t machine__fprintf_dsos_buildid ( struct machine * machine , FILE * fp ,
bool ( skip ) ( struct dso * dso , int parm ) , int parm ) ;
2012-12-19 02:15:48 +04:00
size_t machines__fprintf_dsos ( struct machines * machines , FILE * fp ) ;
size_t machines__fprintf_dsos_buildid ( struct machines * machines , FILE * fp ,
2012-12-07 16:53:58 +04:00
bool ( skip ) ( struct dso * dso , int parm ) , int parm ) ;
2012-11-09 18:32:52 +04:00
void machine__destroy_kernel_maps ( struct machine * machine ) ;
int __machine__create_kernel_maps ( struct machine * machine , struct dso * kernel ) ;
int machine__create_kernel_maps ( struct machine * machine ) ;
2012-12-19 02:15:48 +04:00
int machines__create_kernel_maps ( struct machines * machines , pid_t pid ) ;
int machines__create_guest_kernel_maps ( struct machines * machines ) ;
void machines__destroy_kernel_maps ( struct machines * machines ) ;
2012-11-09 18:32:52 +04:00
size_t machine__fprintf_vmlinux_path ( struct machine * machine , FILE * fp ) ;
2012-10-06 22:43:20 +04:00
# endif /* __PERF_MACHINE_H */