1 /** 2 * @file daemon/opd_sfile.h 3 * Management of sample files 4 * 5 * @remark Copyright 2002 OProfile authors 6 * @remark Read the file COPYING 7 * 8 * @author John Levon 9 * @author Philippe Elie 10 */ 11 12 #ifndef OPD_SFILE_H 13 #define OPD_SFILE_H 14 15 #include "opd_cookie.h" 16 17 #include "odb.h" 18 #include "op_hw_config.h" 19 #include "op_types.h" 20 #include "op_list.h" 21 22 #include <sys/types.h> 23 24 struct kernel_image; 25 struct transient; 26 27 #define CG_HASH_SIZE 16 28 #define UNUSED_EMBEDDED_OFFSET ~0LLU 29 30 /** 31 * Each set of sample files (where a set is over the physical counter 32 * types) will have one of these for it. We match against the 33 * descriptions here to find which sample DB file we need to modify. 34 * 35 * cg files are stored in the hash. 36 */ 37 struct sfile { 38 /** hash value for this sfile */ 39 unsigned long hashval; 40 /** cookie value for the binary profiled */ 41 cookie_t cookie; 42 /** cookie value for the application owner, INVALID_COOKIE if not set */ 43 cookie_t app_cookie; 44 /** thread ID, -1 if not set */ 45 pid_t tid; 46 /** thread group ID, -1 if not set */ 47 pid_t tgid; 48 /** CPU number */ 49 unsigned int cpu; 50 /** kernel image if applicable */ 51 struct kernel_image * kernel; 52 /** anonymous mapping */ 53 struct anon_mapping * anon; 54 /** embedded offset for Cell BE SPU */ 55 uint64_t embedded_offset; 56 57 /** hash table link */ 58 struct list_head hash; 59 /** lru list */ 60 struct list_head lru; 61 /** true if this file should be ignored in profiles */ 62 int ignored; 63 /** opened sample files */ 64 odb_t files[OP_MAX_COUNTERS]; 65 /** extended sample files */ 66 odb_t * ext_files; 67 /** hash table of opened cg sample files */ 68 struct list_head cg_hash[CG_HASH_SIZE]; 69 }; 70 71 /** a call-graph entry */ 72 struct cg_entry { 73 /** where arc is to */ 74 struct sfile to; 75 /** next in the hash slot */ 76 struct list_head hash; 77 }; 78 79 /** clear any sfiles that are for the kernel */ 80 void sfile_clear_kernel(void); 81 82 struct anon_mapping; 83 84 /** clear any sfiles for the given anon mapping */ 85 void sfile_clear_anon(struct anon_mapping *); 86 87 /** sync sample files */ 88 void sfile_sync_files(void); 89 90 /** close sample files */ 91 void sfile_close_files(void); 92 93 /** clear out a certain amount of LRU entries 94 * return non-zero if the lru is already empty */ 95 int sfile_lru_clear(void); 96 97 /** remove a sfile from the lru list, protecting it from sfile_lru_clear() */ 98 void sfile_get(struct sfile * sf); 99 100 /** add this sfile to lru list */ 101 void sfile_put(struct sfile * sf); 102 103 /** 104 * Find the sfile for the current parameters. Note that is required 105 * that the PC value be set appropriately (needed for kernel images) 106 */ 107 struct sfile * sfile_find(struct transient const * trans); 108 109 /** Log the sample in a previously located sfile. */ 110 void sfile_log_sample(struct transient const * trans); 111 112 /** Log the event/cycle count in a previously located sfile */ 113 void sfile_log_sample_count(struct transient const * trans, 114 unsigned long int count); 115 116 /** initialise hashes */ 117 void sfile_init(void); 118 119 #endif /* OPD_SFILE_H */ 120