]> pilppa.org Git - linux-2.6-omap-h63xx.git/blob - Documentation/DocBook/debugobjects.tmpl
Merge branch 'linux-next' of git://git.infradead.org/~dedekind/ubi-2.6
[linux-2.6-omap-h63xx.git] / Documentation / DocBook / debugobjects.tmpl
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
3         "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" []>
4
5 <book id="debug-objects-guide">
6  <bookinfo>
7   <title>Debug objects life time</title>
8
9   <authorgroup>
10    <author>
11     <firstname>Thomas</firstname>
12     <surname>Gleixner</surname>
13     <affiliation>
14      <address>
15       <email>tglx@linutronix.de</email>
16      </address>
17     </affiliation>
18    </author>
19   </authorgroup>
20
21   <copyright>
22    <year>2008</year>
23    <holder>Thomas Gleixner</holder>
24   </copyright>
25
26   <legalnotice>
27    <para>
28      This documentation is free software; you can redistribute
29      it and/or modify it under the terms of the GNU General Public
30      License version 2 as published by the Free Software Foundation.
31    </para>
32
33    <para>
34      This program is distributed in the hope that it will be
35      useful, but WITHOUT ANY WARRANTY; without even the implied
36      warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
37      See the GNU General Public License for more details.
38    </para>
39
40    <para>
41      You should have received a copy of the GNU General Public
42      License along with this program; if not, write to the Free
43      Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
44      MA 02111-1307 USA
45    </para>
46
47    <para>
48      For more details see the file COPYING in the source
49      distribution of Linux.
50    </para>
51   </legalnotice>
52  </bookinfo>
53
54 <toc></toc>
55
56   <chapter id="intro">
57     <title>Introduction</title>
58     <para>
59       debugobjects is a generic infrastructure to track the life time
60       of kernel objects and validate the operations on those.
61     </para>
62     <para>
63       debugobjects is useful to check for the following error patterns:
64         <itemizedlist>
65           <listitem><para>Activation of uninitialized objects</para></listitem>
66           <listitem><para>Initialization of active objects</para></listitem>
67           <listitem><para>Usage of freed/destroyed objects</para></listitem>
68         </itemizedlist>
69     </para>
70     <para>
71       debugobjects is not changing the data structure of the real
72       object so it can be compiled in with a minimal runtime impact
73       and enabled on demand with a kernel command line option.
74     </para>
75   </chapter>
76
77   <chapter id="howto">
78     <title>Howto use debugobjects</title>
79     <para>
80       A kernel subsystem needs to provide a data structure which
81       describes the object type and add calls into the debug code at
82       appropriate places. The data structure to describe the object
83       type needs at minimum the name of the object type. Optional
84       functions can and should be provided to fixup detected problems
85       so the kernel can continue to work and the debug information can
86       be retrieved from a live system instead of hard core debugging
87       with serial consoles and stack trace transcripts from the
88       monitor.
89     </para>
90     <para>
91       The debug calls provided by debugobjects are:
92       <itemizedlist>
93         <listitem><para>debug_object_init</para></listitem>
94         <listitem><para>debug_object_init_on_stack</para></listitem>
95         <listitem><para>debug_object_activate</para></listitem>
96         <listitem><para>debug_object_deactivate</para></listitem>
97         <listitem><para>debug_object_destroy</para></listitem>
98         <listitem><para>debug_object_free</para></listitem>
99       </itemizedlist>
100       Each of these functions takes the address of the real object and
101       a pointer to the object type specific debug description
102       structure.
103     </para>
104     <para>
105       Each detected error is reported in the statistics and a limited
106       number of errors are printk'ed including a full stack trace.
107     </para>
108     <para>
109       The statistics are available via debugfs/debug_objects/stats.
110       They provide information about the number of warnings and the
111       number of successful fixups along with information about the
112       usage of the internal tracking objects and the state of the
113       internal tracking objects pool.
114     </para>
115   </chapter>
116   <chapter id="debugfunctions">
117     <title>Debug functions</title>
118     <sect1 id="prototypes">
119       <title>Debug object function reference</title>
120 !Elib/debugobjects.c
121     </sect1>
122     <sect1 id="debug_object_init">
123       <title>debug_object_init</title>
124       <para>
125         This function is called whenever the initialization function
126         of a real object is called.
127       </para>
128       <para>
129         When the real object is already tracked by debugobjects it is
130         checked, whether the object can be initialized.  Initializing
131         is not allowed for active and destroyed objects. When
132         debugobjects detects an error, then it calls the fixup_init
133         function of the object type description structure if provided
134         by the caller. The fixup function can correct the problem
135         before the real initialization of the object happens. E.g. it
136         can deactivate an active object in order to prevent damage to
137         the subsystem.
138       </para>
139       <para>
140         When the real object is not yet tracked by debugobjects,
141         debugobjects allocates a tracker object for the real object
142         and sets the tracker object state to ODEBUG_STATE_INIT. It
143         verifies that the object is not on the callers stack. If it is
144         on the callers stack then a limited number of warnings
145         including a full stack trace is printk'ed. The calling code
146         must use debug_object_init_on_stack() and remove the object
147         before leaving the function which allocated it. See next
148         section.
149       </para>
150     </sect1>
151
152     <sect1 id="debug_object_init_on_stack">
153       <title>debug_object_init_on_stack</title>
154       <para>
155         This function is called whenever the initialization function
156         of a real object which resides on the stack is called.
157       </para>
158       <para>
159         When the real object is already tracked by debugobjects it is
160         checked, whether the object can be initialized. Initializing
161         is not allowed for active and destroyed objects. When
162         debugobjects detects an error, then it calls the fixup_init
163         function of the object type description structure if provided
164         by the caller. The fixup function can correct the problem
165         before the real initialization of the object happens. E.g. it
166         can deactivate an active object in order to prevent damage to
167         the subsystem.
168       </para>
169       <para>
170         When the real object is not yet tracked by debugobjects
171         debugobjects allocates a tracker object for the real object
172         and sets the tracker object state to ODEBUG_STATE_INIT. It
173         verifies that the object is on the callers stack.
174       </para>
175       <para>
176         An object which is on the stack must be removed from the
177         tracker by calling debug_object_free() before the function
178         which allocates the object returns. Otherwise we keep track of
179         stale objects.
180       </para>
181     </sect1>
182
183     <sect1 id="debug_object_activate">
184       <title>debug_object_activate</title>
185       <para>
186         This function is called whenever the activation function of a
187         real object is called.
188       </para>
189       <para>
190         When the real object is already tracked by debugobjects it is
191         checked, whether the object can be activated.  Activating is
192         not allowed for active and destroyed objects. When
193         debugobjects detects an error, then it calls the
194         fixup_activate function of the object type description
195         structure if provided by the caller. The fixup function can
196         correct the problem before the real activation of the object
197         happens. E.g. it can deactivate an active object in order to
198         prevent damage to the subsystem.
199       </para>
200       <para>
201         When the real object is not yet tracked by debugobjects then
202         the fixup_activate function is called if available. This is
203         necessary to allow the legitimate activation of statically
204         allocated and initialized objects. The fixup function checks
205         whether the object is valid and calls the debug_objects_init()
206         function to initialize the tracking of this object.
207       </para>
208       <para>
209         When the activation is legitimate, then the state of the
210         associated tracker object is set to ODEBUG_STATE_ACTIVE.
211       </para>
212     </sect1>
213
214     <sect1 id="debug_object_deactivate">
215       <title>debug_object_deactivate</title>
216       <para>
217         This function is called whenever the deactivation function of
218         a real object is called.
219       </para>
220       <para>
221         When the real object is tracked by debugobjects it is checked,
222         whether the object can be deactivated. Deactivating is not
223         allowed for untracked or destroyed objects.
224       </para>
225       <para>
226         When the deactivation is legitimate, then the state of the
227         associated tracker object is set to ODEBUG_STATE_INACTIVE.
228       </para>
229     </sect1>
230
231     <sect1 id="debug_object_destroy">
232       <title>debug_object_destroy</title>
233       <para>
234         This function is called to mark an object destroyed. This is
235         useful to prevent the usage of invalid objects, which are
236         still available in memory: either statically allocated objects
237         or objects which are freed later.
238       </para>
239       <para>
240         When the real object is tracked by debugobjects it is checked,
241         whether the object can be destroyed. Destruction is not
242         allowed for active and destroyed objects. When debugobjects
243         detects an error, then it calls the fixup_destroy function of
244         the object type description structure if provided by the
245         caller. The fixup function can correct the problem before the
246         real destruction of the object happens. E.g. it can deactivate
247         an active object in order to prevent damage to the subsystem.
248       </para>
249       <para>
250         When the destruction is legitimate, then the state of the
251         associated tracker object is set to ODEBUG_STATE_DESTROYED.
252       </para>
253     </sect1>
254
255     <sect1 id="debug_object_free">
256       <title>debug_object_free</title>
257       <para>
258         This function is called before an object is freed.
259       </para>
260       <para>
261         When the real object is tracked by debugobjects it is checked,
262         whether the object can be freed. Free is not allowed for
263         active objects. When debugobjects detects an error, then it
264         calls the fixup_free function of the object type description
265         structure if provided by the caller. The fixup function can
266         correct the problem before the real free of the object
267         happens. E.g. it can deactivate an active object in order to
268         prevent damage to the subsystem.
269       </para>
270       <para>
271         Note that debug_object_free removes the object from the
272         tracker. Later usage of the object is detected by the other
273         debug checks.
274       </para>
275     </sect1>
276   </chapter>
277   <chapter id="fixupfunctions">
278     <title>Fixup functions</title>
279     <sect1 id="debug_obj_descr">
280       <title>Debug object type description structure</title>
281 !Iinclude/linux/debugobjects.h
282     </sect1>
283     <sect1 id="fixup_init">
284       <title>fixup_init</title>
285       <para>
286         This function is called from the debug code whenever a problem
287         in debug_object_init is detected. The function takes the
288         address of the object and the state which is currently
289         recorded in the tracker.
290       </para>
291       <para>
292         Called from debug_object_init when the object state is:
293         <itemizedlist>
294           <listitem><para>ODEBUG_STATE_ACTIVE</para></listitem>
295         </itemizedlist>
296       </para>
297       <para>
298         The function returns 1 when the fixup was successful,
299         otherwise 0. The return value is used to update the
300         statistics.
301       </para>
302       <para>
303         Note, that the function needs to call the debug_object_init()
304         function again, after the damage has been repaired in order to
305         keep the state consistent.
306       </para>
307     </sect1>
308
309     <sect1 id="fixup_activate">
310       <title>fixup_activate</title>
311       <para>
312         This function is called from the debug code whenever a problem
313         in debug_object_activate is detected.
314       </para>
315       <para>
316         Called from debug_object_activate when the object state is:
317         <itemizedlist>
318           <listitem><para>ODEBUG_STATE_NOTAVAILABLE</para></listitem>
319           <listitem><para>ODEBUG_STATE_ACTIVE</para></listitem>
320         </itemizedlist>
321       </para>
322       <para>
323         The function returns 1 when the fixup was successful,
324         otherwise 0. The return value is used to update the
325         statistics.
326       </para>
327       <para>
328         Note that the function needs to call the debug_object_activate()
329         function again after the damage has been repaired in order to
330         keep the state consistent.
331       </para>
332       <para>
333         The activation of statically initialized objects is a special
334         case. When debug_object_activate() has no tracked object for
335         this object address then fixup_activate() is called with
336         object state ODEBUG_STATE_NOTAVAILABLE. The fixup function
337         needs to check whether this is a legitimate case of a
338         statically initialized object or not. In case it is it calls
339         debug_object_init() and debug_object_activate() to make the
340         object known to the tracker and marked active. In this case
341         the function should return 0 because this is not a real fixup.
342       </para>
343     </sect1>
344
345     <sect1 id="fixup_destroy">
346       <title>fixup_destroy</title>
347       <para>
348         This function is called from the debug code whenever a problem
349         in debug_object_destroy is detected.
350       </para>
351       <para>
352         Called from debug_object_destroy when the object state is:
353         <itemizedlist>
354           <listitem><para>ODEBUG_STATE_ACTIVE</para></listitem>
355         </itemizedlist>
356       </para>
357       <para>
358         The function returns 1 when the fixup was successful,
359         otherwise 0. The return value is used to update the
360         statistics.
361       </para>
362     </sect1>
363     <sect1 id="fixup_free">
364       <title>fixup_free</title>
365       <para>
366         This function is called from the debug code whenever a problem
367         in debug_object_free is detected. Further it can be called
368         from the debug checks in kfree/vfree, when an active object is
369         detected from the debug_check_no_obj_freed() sanity checks.
370       </para>
371       <para>
372         Called from debug_object_free() or debug_check_no_obj_freed()
373         when the object state is:
374         <itemizedlist>
375           <listitem><para>ODEBUG_STATE_ACTIVE</para></listitem>
376         </itemizedlist>
377       </para>
378       <para>
379         The function returns 1 when the fixup was successful,
380         otherwise 0. The return value is used to update the
381         statistics.
382       </para>
383     </sect1>
384   </chapter>
385   <chapter id="bugs">
386     <title>Known Bugs And Assumptions</title>
387     <para>
388         None (knock on wood).
389     </para>
390   </chapter>
391 </book>