About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog

Documentation / DocBook / debugobjects.tmpl




Custom Search

Based on kernel version 3.2. Page generated on 2012-01-05 23:28 EST.

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 /sys/kernel/debug/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>
Hide Line Numbers
About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog

Information is copyright its respective author. All material is available from the Linux Kernel Source distributed under a GPL License. This page is provided as a free service by mjmwired.net.