summaryrefslogtreecommitdiffstats
path: root/runtime/docs/html/test4_2dtr_8c-source.html
blob: 47241e715c34030f4668c2062f52f0c42c014e24 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>SystemTap: probes/test4/dtr.c Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.1 -->
<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
<div class="nav">
<a class="el" href="dir_000000.html">probes</a>&nbsp;/&nbsp;<a class="el" href="dir_000003.html">test4</a></div>
<h1>dtr.c</h1><div class="fragment"><pre class="fragment">00001 <span class="preprocessor">#define HASH_TABLE_BITS 8</span>
00002 <span class="preprocessor"></span><span class="preprocessor">#define HASH_TABLE_SIZE (1&lt;&lt;HASH_TABLE_BITS)</span>
00003 <span class="preprocessor"></span><span class="preprocessor">#define BUCKETS 16 </span><span class="comment">/* largest histogram width */</span>
00004 
00005 <span class="preprocessor">#include "runtime.h"</span>
00006 <span class="preprocessor">#include "<a class="code" href="io_8c.html">io.c</a>"</span>
00007 <span class="preprocessor">#include "<a class="code" href="map_8c.html">map.c</a>"</span>
00008 <span class="preprocessor">#include "<a class="code" href="probes_8c.html">probes.c</a>"</span>
00009 
00010 MODULE_DESCRIPTION(<span class="stringliteral">"SystemTap probe: test4"</span>);
00011 MODULE_AUTHOR(<span class="stringliteral">"Martin Hunt &lt;hunt@redhat.com&gt;"</span>);
00012 
00013 <a class="code" href="structmap__root.html">MAP</a> opens, reads, writes;
00014 
00015 asmlinkage <span class="keywordtype">long</span> inst_sys_open (<span class="keyword">const</span> <span class="keywordtype">char</span> __user * filename, <span class="keywordtype">int</span> flags, <span class="keywordtype">int</span> mode)
00016 {
00017   <a class="code" href="map_8c.html#a13">_stp_map_key_str</a> (opens, current-&gt;comm);
00018   <a class="code" href="map_8c.html#a18">_stp_map_add_int64</a> (opens, 1);
00019   jprobe_return();
00020   <span class="keywordflow">return</span> 0;
00021 }
00022 
00023 asmlinkage ssize_t inst_sys_read (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> fd, <span class="keywordtype">char</span> __user * buf, size_t count)
00024 {
00025   <a class="code" href="map_8c.html#a13">_stp_map_key_str</a> (reads, current-&gt;comm);
00026   <a class="code" href="map_8c.html#a24">_stp_map_stat_add</a> (reads, count);
00027   jprobe_return();
00028   <span class="keywordflow">return</span> 0;
00029 }
00030 
00031 asmlinkage ssize_t inst_sys_write (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> fd, <span class="keyword">const</span> <span class="keywordtype">char</span> __user * buf, size_t count)
00032 {
00033   <a class="code" href="map_8c.html#a13">_stp_map_key_str</a> (writes, current-&gt;comm);
00034   <a class="code" href="map_8c.html#a24">_stp_map_stat_add</a> (writes, count);
00035   jprobe_return();
00036   <span class="keywordflow">return</span> 0;
00037 }
00038 
00039 <span class="keyword">static</span> <span class="keyword">struct </span>jprobe dtr_probes[] = {
00040   {
00041     .kp.addr = (kprobe_opcode_t *)<span class="stringliteral">"sys_open"</span>,
00042     .entry = (kprobe_opcode_t *) inst_sys_open
00043   },
00044   {
00045     .kp.addr = (kprobe_opcode_t *)<span class="stringliteral">"sys_read"</span>,
00046     .entry = (kprobe_opcode_t *) inst_sys_read
00047   },
00048   {
00049     .kp.addr = (kprobe_opcode_t *)<span class="stringliteral">"sys_write"</span>,
00050     .entry = (kprobe_opcode_t *) inst_sys_write
00051   },
00052 };
00053 
00054 <span class="preprocessor">#define MAX_DTR_ROUTINE (sizeof(dtr_probes)/sizeof(struct jprobe))</span>
00055 <span class="preprocessor"></span>
00056 <span class="keyword">static</span> <span class="keywordtype">int</span> init_dtr(<span class="keywordtype">void</span>)
00057 {
00058   <span class="keywordtype">int</span> ret;
00059   
00060   opens = <a class="code" href="map_8c.html#a3">_stp_map_new</a> (1000, INT64);
00061   reads = <a class="code" href="map_8c.html#a3">_stp_map_new</a> (1000, STAT);
00062   writes = <a class="code" href="map_8c.html#a3">_stp_map_new</a> (1000, STAT);
00063 
00064   ret = <a class="code" href="probes_8c.html#a2">_stp_register_jprobes</a> (dtr_probes, MAX_DTR_ROUTINE);
00065 
00066   <a class="code" href="io_8c.html#a4">dlog</a>(<span class="stringliteral">"instrumentation is enabled...\n"</span>);
00067   <span class="keywordflow">return</span> ret;
00068 
00069 }
00070 
00071 <span class="keyword">static</span> <span class="keywordtype">void</span> cleanup_dtr(<span class="keywordtype">void</span>)
00072 {
00073   <span class="keyword">struct </span><a class="code" href="structmap__node__stat.html">map_node_stat</a> *st;
00074   <span class="keyword">struct </span><a class="code" href="structmap__node__int64.html">map_node_int64</a> *ptr;
00075 
00076   <a class="code" href="probes_8c.html#a1">_stp_unregister_jprobes</a> (dtr_probes, MAX_DTR_ROUTINE);
00077 
00078   <span class="keywordflow">for</span> (ptr = (<span class="keyword">struct</span> <a class="code" href="structmap__node__int64.html">map_node_int64</a> *)<a class="code" href="map_8c.html#a6">_stp_map_start</a>(opens); ptr; 
00079        ptr = (<span class="keyword">struct</span> <a class="code" href="structmap__node__int64.html">map_node_int64</a> *)_stp_map_iter (opens,(<span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *)ptr))
00080     dlog ("opens[%s] = %lld\n", key1str(ptr), ptr-&gt;val); 
00081   dlog ("\n");
00082 
00083   for (st = (struct <a class="code" href="structmap__node__stat.html">map_node_stat</a> *)_stp_map_start(reads); st; 
00084        st = (struct <a class="code" href="structmap__node__stat.html">map_node_stat</a> *)_stp_map_iter (reads,(struct <a class="code" href="structmap__node.html">map_node</a> *)st))
00085     dlog ("reads[%s] = [count=%lld  sum=%lld   min=%lld   max=%lld]\n", key1str(st), st-&gt;stats.count, st-&gt;stats.sum,
00086             st-&gt;stats.min, st-&gt;stats.max);
00087   dlog ("\n");
00088 
00089   for (st = (struct <a class="code" href="structmap__node__stat.html">map_node_stat</a> *)_stp_map_start(writes); st; 
00090        st = (struct <a class="code" href="structmap__node__stat.html">map_node_stat</a> *)_stp_map_iter (writes,(struct <a class="code" href="structmap__node.html">map_node</a> *)st))
00091     dlog ("writes[%s] = [count=%lld  sum=%lld   min=%lld   max=%lld]\n", key1str(st), st-&gt;stats.count, st-&gt;stats.sum,
00092             st-&gt;stats.min, st-&gt;stats.max);
00093   dlog ("\n");
00094 
00095   _stp_map_del (opens);
00096   _stp_map_del (reads);
00097   _stp_map_del (writes);
00098 
00099   dlog("EXIT\n");
00100 }
00101 
00102 module_init(init_dtr);
00103 module_exit(cleanup_dtr);
00104 MODULE_LICENSE("GPL");
00105 
</pre></div><hr size="1"><address style="align: right;"><small>
Generated on Tue Mar 22 10:27:36 2005 for SystemTap.</small></body>
</html>