opd_sfile.h revision 2b16b5ffd52ea5c0289e5ce794298bce5d941b2b
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 24struct kernel_image; 25struct 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 */ 37struct 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 /** hash table of opened cg sample files */ 66 struct list_head cg_hash[CG_HASH_SIZE]; 67}; 68 69/** a call-graph entry */ 70struct cg_entry { 71 /** where arc is to */ 72 struct sfile to; 73 /** next in the hash slot */ 74 struct list_head hash; 75}; 76 77/** clear any sfiles that are for the kernel */ 78void sfile_clear_kernel(void); 79 80struct anon_mapping; 81 82/** clear any sfiles for the given anon mapping */ 83void sfile_clear_anon(struct anon_mapping *); 84 85/** sync sample files */ 86void sfile_sync_files(void); 87 88/** close sample files */ 89void sfile_close_files(void); 90 91/** clear out a certain amount of LRU entries 92 * return non-zero if the lru is already empty */ 93int sfile_lru_clear(void); 94 95/** remove a sfile from the lru list, protecting it from sfile_lru_clear() */ 96void sfile_get(struct sfile * sf); 97 98/** add this sfile to lru list */ 99void sfile_put(struct sfile * sf); 100 101/** 102 * Find the sfile for the current parameters. Note that is required 103 * that the PC value be set appropriately (needed for kernel images) 104 */ 105struct sfile * sfile_find(struct transient const * trans); 106 107/** Log the sample in a previously located sfile. */ 108void sfile_log_sample(struct transient const * trans); 109 110/** initialise hashes */ 111void sfile_init(void); 112 113#endif /* OPD_SFILE_H */ 114