xref: /dflybsd-src/sys/net/altq/altq_rmclass_debug.h (revision 86d7f5d305c6adaa56ff4582ece9859d73106103)
186d7f5d3SJohn Marino /*	$KAME: altq_rmclass_debug.h,v 1.3 2002/11/29 04:36:24 kjc Exp $	*/
286d7f5d3SJohn Marino /*	$DragonFly: src/sys/net/altq/altq_rmclass_debug.h,v 1.3 2005/06/03 18:20:36 swildner Exp $ */
386d7f5d3SJohn Marino 
486d7f5d3SJohn Marino /*
586d7f5d3SJohn Marino  * Copyright (c) Sun Microsystems, Inc. 1998 All rights reserved.
686d7f5d3SJohn Marino  *
786d7f5d3SJohn Marino  * Redistribution and use in source and binary forms, with or without
886d7f5d3SJohn Marino  * modification, are permitted provided that the following conditions
986d7f5d3SJohn Marino  * are met:
1086d7f5d3SJohn Marino  *
1186d7f5d3SJohn Marino  * 1. Redistributions of source code must retain the above copyright
1286d7f5d3SJohn Marino  *    notice, this list of conditions and the following disclaimer.
1386d7f5d3SJohn Marino  *
1486d7f5d3SJohn Marino  * 2. Redistributions in binary form must reproduce the above copyright
1586d7f5d3SJohn Marino  *    notice, this list of conditions and the following disclaimer in the
1686d7f5d3SJohn Marino  *    documentation and/or other materials provided with the distribution.
1786d7f5d3SJohn Marino  *
1886d7f5d3SJohn Marino  * 3. All advertising materials mentioning features or use of this software
1986d7f5d3SJohn Marino  *    must display the following acknowledgement:
2086d7f5d3SJohn Marino  *      This product includes software developed by the SMCC Technology
2186d7f5d3SJohn Marino  *      Development Group at Sun Microsystems, Inc.
2286d7f5d3SJohn Marino  *
2386d7f5d3SJohn Marino  * 4. The name of the Sun Microsystems, Inc nor may not be used to endorse or
2486d7f5d3SJohn Marino  *      promote products derived from this software without specific prior
2586d7f5d3SJohn Marino  *      written permission.
2686d7f5d3SJohn Marino  *
2786d7f5d3SJohn Marino  * SUN MICROSYSTEMS DOES NOT CLAIM MERCHANTABILITY OF THIS SOFTWARE OR THE
2886d7f5d3SJohn Marino  * SUITABILITY OF THIS SOFTWARE FOR ANY PARTICULAR PURPOSE.  The software is
2986d7f5d3SJohn Marino  * provided "as is" without express or implied warranty of any kind.
3086d7f5d3SJohn Marino  *
3186d7f5d3SJohn Marino  * These notices must be retained in any copies of any part of this software.
3286d7f5d3SJohn Marino  */
3386d7f5d3SJohn Marino 
3486d7f5d3SJohn Marino #ifndef _ALTQ_ALTQ_RMCLASS_DEBUG_H_
3586d7f5d3SJohn Marino #define	_ALTQ_ALTQ_RMCLASS_DEBUG_H_
3686d7f5d3SJohn Marino 
3786d7f5d3SJohn Marino #ifdef _KERNEL
3886d7f5d3SJohn Marino #include <sys/thread2.h>
3986d7f5d3SJohn Marino #endif
4086d7f5d3SJohn Marino 
4186d7f5d3SJohn Marino /* #pragma ident	"@(#)rm_class_debug.h	1.7	98/05/04 SMI" */
4286d7f5d3SJohn Marino 
4386d7f5d3SJohn Marino /*
4486d7f5d3SJohn Marino  * Cbq debugging macros
4586d7f5d3SJohn Marino  */
4686d7f5d3SJohn Marino 
4786d7f5d3SJohn Marino #ifdef	CBQ_TRACE
4886d7f5d3SJohn Marino #ifndef NCBQTRACE
4986d7f5d3SJohn Marino #define	NCBQTRACE (16 * 1024)
5086d7f5d3SJohn Marino #endif
5186d7f5d3SJohn Marino 
5286d7f5d3SJohn Marino /*
5386d7f5d3SJohn Marino  * To view the trace output, using adb, type:
5486d7f5d3SJohn Marino  *	adb -k /dev/ksyms /dev/mem <cr>, then type
5586d7f5d3SJohn Marino  *	cbqtrace_count/D to get the count, then type
5686d7f5d3SJohn Marino  *	cbqtrace_buffer,0tcount/Dp4C" "Xn
5786d7f5d3SJohn Marino  *	This will dump the trace buffer from 0 to count.
5886d7f5d3SJohn Marino  */
5986d7f5d3SJohn Marino /*
6086d7f5d3SJohn Marino  * in ALTQ, "call cbqtrace_dump(N)" from DDB to display 20 events
6186d7f5d3SJohn Marino  * from Nth event in the circular buffer.
6286d7f5d3SJohn Marino  */
6386d7f5d3SJohn Marino 
6486d7f5d3SJohn Marino struct cbqtrace {
6586d7f5d3SJohn Marino 	int count;
6686d7f5d3SJohn Marino 	int function;		/* address of function */
6786d7f5d3SJohn Marino 	int trace_action;	/* descriptive 4 characters */
6886d7f5d3SJohn Marino 	int object;		/* object operated on */
6986d7f5d3SJohn Marino };
7086d7f5d3SJohn Marino 
7186d7f5d3SJohn Marino #define	CBQTRACEINIT() {				\
7286d7f5d3SJohn Marino 	if (cbqtrace_ptr == NULL)		\
7386d7f5d3SJohn Marino 		cbqtrace_ptr = cbqtrace_buffer; \
7486d7f5d3SJohn Marino 	else { \
7586d7f5d3SJohn Marino 		cbqtrace_ptr = cbqtrace_buffer; \
7686d7f5d3SJohn Marino 		bzero((void *)cbqtrace_ptr, sizeof(cbqtrace_buffer)); \
7786d7f5d3SJohn Marino 		cbqtrace_count = 0; \
7886d7f5d3SJohn Marino 	} \
7986d7f5d3SJohn Marino }
8086d7f5d3SJohn Marino 
8186d7f5d3SJohn Marino #define	LOCK_TRACE()	crit_enter();
8286d7f5d3SJohn Marino #define	UNLOCK_TRACE()	crit_exit();
8386d7f5d3SJohn Marino 
8486d7f5d3SJohn Marino #define	CBQTRACE(func, act, obj) {		\
8586d7f5d3SJohn Marino 	LOCK_TRACE();				\
8686d7f5d3SJohn Marino 	int *_p = &cbqtrace_ptr->count;	\
8786d7f5d3SJohn Marino 	*_p++ = ++cbqtrace_count;		\
8886d7f5d3SJohn Marino 	*_p++ = (int)(func);			\
8986d7f5d3SJohn Marino 	*_p++ = (int)(act);			\
9086d7f5d3SJohn Marino 	*_p++ = (int)(obj);			\
9186d7f5d3SJohn Marino 	if ((struct cbqtrace *)(void *)_p >= &cbqtrace_buffer[NCBQTRACE])\
9286d7f5d3SJohn Marino 		cbqtrace_ptr = cbqtrace_buffer; \
9386d7f5d3SJohn Marino 	else					\
9486d7f5d3SJohn Marino 		cbqtrace_ptr = (struct cbqtrace *)(void *)_p; \
9586d7f5d3SJohn Marino 	UNLOCK_TRACE();				\
9686d7f5d3SJohn Marino 	}
9786d7f5d3SJohn Marino #else
9886d7f5d3SJohn Marino 
9986d7f5d3SJohn Marino /* If no tracing, define no-ops */
10086d7f5d3SJohn Marino #define	CBQTRACEINIT()
10186d7f5d3SJohn Marino #define	CBQTRACE(a, b, c)
10286d7f5d3SJohn Marino 
10386d7f5d3SJohn Marino #endif	/* !CBQ_TRACE */
10486d7f5d3SJohn Marino 
10586d7f5d3SJohn Marino #endif	/* _ALTQ_ALTQ_RMCLASS_DEBUG_H_ */
106