• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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