xref: /dflybsd-src/sys/net/altq/altq_rmclass_debug.h (revision 86d7f5d305c6adaa56ff4582ece9859d73106103)
1*86d7f5d3SJohn Marino /*	$KAME: altq_rmclass_debug.h,v 1.3 2002/11/29 04:36:24 kjc Exp $	*/
2*86d7f5d3SJohn Marino /*	$DragonFly: src/sys/net/altq/altq_rmclass_debug.h,v 1.3 2005/06/03 18:20:36 swildner Exp $ */
3*86d7f5d3SJohn Marino 
4*86d7f5d3SJohn Marino /*
5*86d7f5d3SJohn Marino  * Copyright (c) Sun Microsystems, Inc. 1998 All rights reserved.
6*86d7f5d3SJohn Marino  *
7*86d7f5d3SJohn Marino  * Redistribution and use in source and binary forms, with or without
8*86d7f5d3SJohn Marino  * modification, are permitted provided that the following conditions
9*86d7f5d3SJohn Marino  * are met:
10*86d7f5d3SJohn Marino  *
11*86d7f5d3SJohn Marino  * 1. Redistributions of source code must retain the above copyright
12*86d7f5d3SJohn Marino  *    notice, this list of conditions and the following disclaimer.
13*86d7f5d3SJohn Marino  *
14*86d7f5d3SJohn Marino  * 2. Redistributions in binary form must reproduce the above copyright
15*86d7f5d3SJohn Marino  *    notice, this list of conditions and the following disclaimer in the
16*86d7f5d3SJohn Marino  *    documentation and/or other materials provided with the distribution.
17*86d7f5d3SJohn Marino  *
18*86d7f5d3SJohn Marino  * 3. All advertising materials mentioning features or use of this software
19*86d7f5d3SJohn Marino  *    must display the following acknowledgement:
20*86d7f5d3SJohn Marino  *      This product includes software developed by the SMCC Technology
21*86d7f5d3SJohn Marino  *      Development Group at Sun Microsystems, Inc.
22*86d7f5d3SJohn Marino  *
23*86d7f5d3SJohn Marino  * 4. The name of the Sun Microsystems, Inc nor may not be used to endorse or
24*86d7f5d3SJohn Marino  *      promote products derived from this software without specific prior
25*86d7f5d3SJohn Marino  *      written permission.
26*86d7f5d3SJohn Marino  *
27*86d7f5d3SJohn Marino  * SUN MICROSYSTEMS DOES NOT CLAIM MERCHANTABILITY OF THIS SOFTWARE OR THE
28*86d7f5d3SJohn Marino  * SUITABILITY OF THIS SOFTWARE FOR ANY PARTICULAR PURPOSE.  The software is
29*86d7f5d3SJohn Marino  * provided "as is" without express or implied warranty of any kind.
30*86d7f5d3SJohn Marino  *
31*86d7f5d3SJohn Marino  * These notices must be retained in any copies of any part of this software.
32*86d7f5d3SJohn Marino  */
33*86d7f5d3SJohn Marino 
34*86d7f5d3SJohn Marino #ifndef _ALTQ_ALTQ_RMCLASS_DEBUG_H_
35*86d7f5d3SJohn Marino #define	_ALTQ_ALTQ_RMCLASS_DEBUG_H_
36*86d7f5d3SJohn Marino 
37*86d7f5d3SJohn Marino #ifdef _KERNEL
38*86d7f5d3SJohn Marino #include <sys/thread2.h>
39*86d7f5d3SJohn Marino #endif
40*86d7f5d3SJohn Marino 
41*86d7f5d3SJohn Marino /* #pragma ident	"@(#)rm_class_debug.h	1.7	98/05/04 SMI" */
42*86d7f5d3SJohn Marino 
43*86d7f5d3SJohn Marino /*
44*86d7f5d3SJohn Marino  * Cbq debugging macros
45*86d7f5d3SJohn Marino  */
46*86d7f5d3SJohn Marino 
47*86d7f5d3SJohn Marino #ifdef	CBQ_TRACE
48*86d7f5d3SJohn Marino #ifndef NCBQTRACE
49*86d7f5d3SJohn Marino #define	NCBQTRACE (16 * 1024)
50*86d7f5d3SJohn Marino #endif
51*86d7f5d3SJohn Marino 
52*86d7f5d3SJohn Marino /*
53*86d7f5d3SJohn Marino  * To view the trace output, using adb, type:
54*86d7f5d3SJohn Marino  *	adb -k /dev/ksyms /dev/mem <cr>, then type
55*86d7f5d3SJohn Marino  *	cbqtrace_count/D to get the count, then type
56*86d7f5d3SJohn Marino  *	cbqtrace_buffer,0tcount/Dp4C" "Xn
57*86d7f5d3SJohn Marino  *	This will dump the trace buffer from 0 to count.
58*86d7f5d3SJohn Marino  */
59*86d7f5d3SJohn Marino /*
60*86d7f5d3SJohn Marino  * in ALTQ, "call cbqtrace_dump(N)" from DDB to display 20 events
61*86d7f5d3SJohn Marino  * from Nth event in the circular buffer.
62*86d7f5d3SJohn Marino  */
63*86d7f5d3SJohn Marino 
64*86d7f5d3SJohn Marino struct cbqtrace {
65*86d7f5d3SJohn Marino 	int count;
66*86d7f5d3SJohn Marino 	int function;		/* address of function */
67*86d7f5d3SJohn Marino 	int trace_action;	/* descriptive 4 characters */
68*86d7f5d3SJohn Marino 	int object;		/* object operated on */
69*86d7f5d3SJohn Marino };
70*86d7f5d3SJohn Marino 
71*86d7f5d3SJohn Marino #define	CBQTRACEINIT() {				\
72*86d7f5d3SJohn Marino 	if (cbqtrace_ptr == NULL)		\
73*86d7f5d3SJohn Marino 		cbqtrace_ptr = cbqtrace_buffer; \
74*86d7f5d3SJohn Marino 	else { \
75*86d7f5d3SJohn Marino 		cbqtrace_ptr = cbqtrace_buffer; \
76*86d7f5d3SJohn Marino 		bzero((void *)cbqtrace_ptr, sizeof(cbqtrace_buffer)); \
77*86d7f5d3SJohn Marino 		cbqtrace_count = 0; \
78*86d7f5d3SJohn Marino 	} \
79*86d7f5d3SJohn Marino }
80*86d7f5d3SJohn Marino 
81*86d7f5d3SJohn Marino #define	LOCK_TRACE()	crit_enter();
82*86d7f5d3SJohn Marino #define	UNLOCK_TRACE()	crit_exit();
83*86d7f5d3SJohn Marino 
84*86d7f5d3SJohn Marino #define	CBQTRACE(func, act, obj) {		\
85*86d7f5d3SJohn Marino 	LOCK_TRACE();				\
86*86d7f5d3SJohn Marino 	int *_p = &cbqtrace_ptr->count;	\
87*86d7f5d3SJohn Marino 	*_p++ = ++cbqtrace_count;		\
88*86d7f5d3SJohn Marino 	*_p++ = (int)(func);			\
89*86d7f5d3SJohn Marino 	*_p++ = (int)(act);			\
90*86d7f5d3SJohn Marino 	*_p++ = (int)(obj);			\
91*86d7f5d3SJohn Marino 	if ((struct cbqtrace *)(void *)_p >= &cbqtrace_buffer[NCBQTRACE])\
92*86d7f5d3SJohn Marino 		cbqtrace_ptr = cbqtrace_buffer; \
93*86d7f5d3SJohn Marino 	else					\
94*86d7f5d3SJohn Marino 		cbqtrace_ptr = (struct cbqtrace *)(void *)_p; \
95*86d7f5d3SJohn Marino 	UNLOCK_TRACE();				\
96*86d7f5d3SJohn Marino 	}
97*86d7f5d3SJohn Marino #else
98*86d7f5d3SJohn Marino 
99*86d7f5d3SJohn Marino /* If no tracing, define no-ops */
100*86d7f5d3SJohn Marino #define	CBQTRACEINIT()
101*86d7f5d3SJohn Marino #define	CBQTRACE(a, b, c)
102*86d7f5d3SJohn Marino 
103*86d7f5d3SJohn Marino #endif	/* !CBQ_TRACE */
104*86d7f5d3SJohn Marino 
105*86d7f5d3SJohn Marino #endif	/* _ALTQ_ALTQ_RMCLASS_DEBUG_H_ */
106