1*c39526b7SPramod Gunjikar /*
2*c39526b7SPramod Gunjikar  * CDDL HEADER START
3*c39526b7SPramod Gunjikar  *
4*c39526b7SPramod Gunjikar  * The contents of this file are subject to the terms of the
5*c39526b7SPramod Gunjikar  * Common Development and Distribution License (the "License").
6*c39526b7SPramod Gunjikar  * You may not use this file except in compliance with the License.
7*c39526b7SPramod Gunjikar  *
8*c39526b7SPramod Gunjikar  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*c39526b7SPramod Gunjikar  * or http://www.opensolaris.org/os/licensing.
10*c39526b7SPramod Gunjikar  * See the License for the specific language governing permissions
11*c39526b7SPramod Gunjikar  * and limitations under the License.
12*c39526b7SPramod Gunjikar  *
13*c39526b7SPramod Gunjikar  * When distributing Covered Code, include this CDDL HEADER in each
14*c39526b7SPramod Gunjikar  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*c39526b7SPramod Gunjikar  * If applicable, add the following below this CDDL HEADER, with the
16*c39526b7SPramod Gunjikar  * fields enclosed by brackets "[]" replaced with your own identifying
17*c39526b7SPramod Gunjikar  * information: Portions Copyright [yyyy] [name of copyright owner]
18*c39526b7SPramod Gunjikar  *
19*c39526b7SPramod Gunjikar  * CDDL HEADER END
20*c39526b7SPramod Gunjikar  */
21*c39526b7SPramod Gunjikar 
22*c39526b7SPramod Gunjikar /*
23*c39526b7SPramod Gunjikar  * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
24*c39526b7SPramod Gunjikar  */
25*c39526b7SPramod Gunjikar 
26*c39526b7SPramod Gunjikar /*
27*c39526b7SPramod Gunjikar  * This file is more or less the same as the Solaris IBTL debug
28*c39526b7SPramod Gunjikar  * implementation. The debug functions and conf variables are
29*c39526b7SPramod Gunjikar  * similar. One significant change is :
30*c39526b7SPramod Gunjikar  * 	sol_ofs_supress_above_l2
31*c39526b7SPramod Gunjikar  * This has to be set to 0, in /etc/system to enable debug prints
32*c39526b7SPramod Gunjikar  * above level 2.
33*c39526b7SPramod Gunjikar  */
34*c39526b7SPramod Gunjikar #include <sys/types.h>
35*c39526b7SPramod Gunjikar #include <sys/cmn_err.h>
36*c39526b7SPramod Gunjikar #include <sys/ddi.h>
37*c39526b7SPramod Gunjikar #include <sys/sunddi.h>
38*c39526b7SPramod Gunjikar #include <sys/ib/clients/of/sol_ofs/sol_ofs_common.h>
39*c39526b7SPramod Gunjikar 
40*c39526b7SPramod Gunjikar #define	SOL_OFS_PRINT_BUF_LEN		4096
41*c39526b7SPramod Gunjikar #define	SOL_OFS_DEBUG_BUF_SIZE		0x10000
42*c39526b7SPramod Gunjikar #define	SOL_OFS_DEBUG_EXTRA_SIZE	8
43*c39526b7SPramod Gunjikar #define	SOL_OFS_LOG_L5			5
44*c39526b7SPramod Gunjikar #define	SOL_OFS_LOG_L4			4
45*c39526b7SPramod Gunjikar #define	SOL_OFS_LOG_L3			3
46*c39526b7SPramod Gunjikar #define	SOL_OFS_LOG_L2			2
47*c39526b7SPramod Gunjikar #define	SOL_OFS_LOG_L1			1
48*c39526b7SPramod Gunjikar #define	SOL_OFS_LOG_L0			0
49*c39526b7SPramod Gunjikar 
50*c39526b7SPramod Gunjikar static kmutex_t	sol_ofs_debug_mutex;
51*c39526b7SPramod Gunjikar static char	sol_ofs_print_buf[SOL_OFS_PRINT_BUF_LEN];
52*c39526b7SPramod Gunjikar static char	*sol_ofs_debug_sptr = NULL;
53*c39526b7SPramod Gunjikar static char	*sol_ofs_debug_eptr = NULL;
54*c39526b7SPramod Gunjikar 
55*c39526b7SPramod Gunjikar char	*sol_ofs_debug_buf = NULL;
56*c39526b7SPramod Gunjikar int	sol_ofs_clear_debug_buf_flag = 0;
57*c39526b7SPramod Gunjikar int	sol_ofs_debug_buf_size = SOL_OFS_DEBUG_BUF_SIZE;
58*c39526b7SPramod Gunjikar int	sol_ofs_suppress_dprintf = 0;
59*c39526b7SPramod Gunjikar int	sol_ofs_buffer_dprintf = 1;
60*c39526b7SPramod Gunjikar int	sol_ofs_supress_above_l2 = 1;
61*c39526b7SPramod Gunjikar 
62*c39526b7SPramod Gunjikar int	sol_ucma_errlevel = 2;		/* sol_ucma driver */
63*c39526b7SPramod Gunjikar int	sol_uverbs_errlevel = 2;	/* sol_uverbs driver */
64*c39526b7SPramod Gunjikar int	sol_umad_errlevel = 2;		/* sol_umad driver */
65*c39526b7SPramod Gunjikar 
66*c39526b7SPramod Gunjikar int	sol_rdmacm_errlevel = 2;	/* rdmacm part of sol_ofs */
67*c39526b7SPramod Gunjikar int	sol_kverbs_errlevel = 2;	/* kverbs part of sol_ofs */
68*c39526b7SPramod Gunjikar /* sol_ofs module (except rdmacm and kverbs) */
69*c39526b7SPramod Gunjikar int	sol_ofs_module_errlevel = 2;
70*c39526b7SPramod Gunjikar 
71*c39526b7SPramod Gunjikar /* Global error levels for all OF related modules */
72*c39526b7SPramod Gunjikar int	sol_of_errlevel = 2;
73*c39526b7SPramod Gunjikar 
74*c39526b7SPramod Gunjikar static void
sol_ofs_clear_dbg_buf()75*c39526b7SPramod Gunjikar sol_ofs_clear_dbg_buf()
76*c39526b7SPramod Gunjikar {
77*c39526b7SPramod Gunjikar 	ASSERT(MUTEX_HELD(&sol_ofs_debug_mutex));
78*c39526b7SPramod Gunjikar 	if (sol_ofs_debug_buf) {
79*c39526b7SPramod Gunjikar 		sol_ofs_debug_sptr = sol_ofs_debug_buf;
80*c39526b7SPramod Gunjikar 		sol_ofs_debug_eptr = sol_ofs_debug_buf +
81*c39526b7SPramod Gunjikar 		    sol_ofs_debug_buf_size - SOL_OFS_DEBUG_EXTRA_SIZE;
82*c39526b7SPramod Gunjikar 		bzero(sol_ofs_debug_sptr, sol_ofs_debug_buf_size);
83*c39526b7SPramod Gunjikar 	}
84*c39526b7SPramod Gunjikar }
85*c39526b7SPramod Gunjikar 
86*c39526b7SPramod Gunjikar /*
87*c39526b7SPramod Gunjikar  * sol_ofs_dprintf_init() and sol_ofs_dprintf_fini() must be called
88*c39526b7SPramod Gunjikar  * from the _init of the sol_ofs module.
89*c39526b7SPramod Gunjikar  */
90*c39526b7SPramod Gunjikar void
sol_ofs_dprintf_init()91*c39526b7SPramod Gunjikar sol_ofs_dprintf_init()
92*c39526b7SPramod Gunjikar {
93*c39526b7SPramod Gunjikar 	char	*dbg_buf;
94*c39526b7SPramod Gunjikar 
95*c39526b7SPramod Gunjikar 	mutex_init(&sol_ofs_debug_mutex, NULL, MUTEX_DRIVER, NULL);
96*c39526b7SPramod Gunjikar 
97*c39526b7SPramod Gunjikar 	if (sol_ofs_debug_buf_size < SOL_OFS_DEBUG_EXTRA_SIZE) {
98*c39526b7SPramod Gunjikar #ifdef DEBUG
99*c39526b7SPramod Gunjikar 		cmn_err(CE_NOTE, "sol_ofs:\t debug buf size 0x%x too small, "
100*c39526b7SPramod Gunjikar 		    "setting to 0x%x", sol_ofs_debug_buf_size,
101*c39526b7SPramod Gunjikar 		    SOL_OFS_DEBUG_BUF_SIZE);
102*c39526b7SPramod Gunjikar #endif
103*c39526b7SPramod Gunjikar 		sol_ofs_debug_buf_size = SOL_OFS_DEBUG_BUF_SIZE;
104*c39526b7SPramod Gunjikar 	}
105*c39526b7SPramod Gunjikar 
106*c39526b7SPramod Gunjikar 	dbg_buf = kmem_zalloc(sol_ofs_debug_buf_size, KM_SLEEP);
107*c39526b7SPramod Gunjikar 	mutex_enter(&sol_ofs_debug_mutex);
108*c39526b7SPramod Gunjikar 	sol_ofs_debug_buf = dbg_buf;
109*c39526b7SPramod Gunjikar 	sol_ofs_clear_dbg_buf();
110*c39526b7SPramod Gunjikar 	mutex_exit(&sol_ofs_debug_mutex);
111*c39526b7SPramod Gunjikar }
112*c39526b7SPramod Gunjikar 
113*c39526b7SPramod Gunjikar void
sol_ofs_dprintf_fini()114*c39526b7SPramod Gunjikar sol_ofs_dprintf_fini()
115*c39526b7SPramod Gunjikar {
116*c39526b7SPramod Gunjikar 	char	*dbg_buf;
117*c39526b7SPramod Gunjikar 
118*c39526b7SPramod Gunjikar 	mutex_enter(&sol_ofs_debug_mutex);
119*c39526b7SPramod Gunjikar 	dbg_buf = sol_ofs_debug_buf;
120*c39526b7SPramod Gunjikar 	sol_ofs_debug_buf = NULL;
121*c39526b7SPramod Gunjikar 	mutex_exit(&sol_ofs_debug_mutex);
122*c39526b7SPramod Gunjikar 
123*c39526b7SPramod Gunjikar 	kmem_free(dbg_buf, sol_ofs_debug_buf_size);
124*c39526b7SPramod Gunjikar 	mutex_destroy(&sol_ofs_debug_mutex);
125*c39526b7SPramod Gunjikar }
126*c39526b7SPramod Gunjikar 
127*c39526b7SPramod Gunjikar static void
sol_ofs_dprintf_vlog(char * name,uint_t level,char * fmt,va_list ap)128*c39526b7SPramod Gunjikar sol_ofs_dprintf_vlog(char *name, uint_t level, char *fmt, va_list ap)
129*c39526b7SPramod Gunjikar {
130*c39526b7SPramod Gunjikar 	char	*label = (name == NULL) ? "sol_ofs_ulp" : name;
131*c39526b7SPramod Gunjikar 	char	*msg_ptr;
132*c39526b7SPramod Gunjikar 	size_t	len;
133*c39526b7SPramod Gunjikar 
134*c39526b7SPramod Gunjikar 	mutex_enter(&sol_ofs_debug_mutex);
135*c39526b7SPramod Gunjikar 	/* if not using logging scheme; quit */
136*c39526b7SPramod Gunjikar 	if (sol_ofs_suppress_dprintf || (sol_ofs_debug_buf == NULL)) {
137*c39526b7SPramod Gunjikar 		mutex_exit(&sol_ofs_debug_mutex);
138*c39526b7SPramod Gunjikar 		return;
139*c39526b7SPramod Gunjikar 	}
140*c39526b7SPramod Gunjikar 	/* if level doesn't match, we are done */
141*c39526b7SPramod Gunjikar 	if (level > SOL_OFS_LOG_L5) {
142*c39526b7SPramod Gunjikar 		mutex_exit(&sol_ofs_debug_mutex);
143*c39526b7SPramod Gunjikar 		return;
144*c39526b7SPramod Gunjikar 	}
145*c39526b7SPramod Gunjikar 
146*c39526b7SPramod Gunjikar 	/* If user requests to clear debug buffer, go ahead */
147*c39526b7SPramod Gunjikar 	if (sol_ofs_clear_debug_buf_flag) {
148*c39526b7SPramod Gunjikar 		sol_ofs_clear_dbg_buf();
149*c39526b7SPramod Gunjikar 		sol_ofs_clear_debug_buf_flag = 0;
150*c39526b7SPramod Gunjikar 	}
151*c39526b7SPramod Gunjikar 
152*c39526b7SPramod Gunjikar 	/* Skip printing to buffer, if too small */
153*c39526b7SPramod Gunjikar 	if (sol_ofs_debug_buf_size <= 0) {
154*c39526b7SPramod Gunjikar 		sol_ofs_buffer_dprintf = 0;
155*c39526b7SPramod Gunjikar 	}
156*c39526b7SPramod Gunjikar 
157*c39526b7SPramod Gunjikar 	/* Put label and debug info into buffer */
158*c39526b7SPramod Gunjikar 	len = snprintf((char *)sol_ofs_print_buf, SOL_OFS_DRV_NAME_LEN,
159*c39526b7SPramod Gunjikar 	    "%s:\t", label);
160*c39526b7SPramod Gunjikar 	msg_ptr = (char *)sol_ofs_print_buf + len;
161*c39526b7SPramod Gunjikar 	len += vsnprintf(msg_ptr, SOL_OFS_PRINT_BUF_LEN - len - 2, fmt, ap);
162*c39526b7SPramod Gunjikar 	len = min(len, SOL_OFS_PRINT_BUF_LEN - 2);
163*c39526b7SPramod Gunjikar 	ASSERT(len == strlen(sol_ofs_print_buf));
164*c39526b7SPramod Gunjikar 	sol_ofs_print_buf[len++] = '\n';
165*c39526b7SPramod Gunjikar 	sol_ofs_print_buf[len] = '\0';
166*c39526b7SPramod Gunjikar 
167*c39526b7SPramod Gunjikar 	/* Stuff into debug buffer */
168*c39526b7SPramod Gunjikar 	if (sol_ofs_buffer_dprintf) {
169*c39526b7SPramod Gunjikar 		/*
170*c39526b7SPramod Gunjikar 		 * overwrite >>>> that might be over the end of the
171*c39526b7SPramod Gunjikar 		 * buffer.
172*c39526b7SPramod Gunjikar 		 */
173*c39526b7SPramod Gunjikar 		*sol_ofs_debug_sptr = '\0';
174*c39526b7SPramod Gunjikar 
175*c39526b7SPramod Gunjikar 		if (sol_ofs_debug_sptr + len > sol_ofs_debug_eptr) {
176*c39526b7SPramod Gunjikar 			size_t left;
177*c39526b7SPramod Gunjikar 
178*c39526b7SPramod Gunjikar 			left = sol_ofs_debug_eptr - sol_ofs_debug_sptr;
179*c39526b7SPramod Gunjikar 			bcopy((caddr_t)sol_ofs_print_buf,
180*c39526b7SPramod Gunjikar 			    (caddr_t)sol_ofs_debug_sptr, left);
181*c39526b7SPramod Gunjikar 			bcopy((caddr_t)sol_ofs_print_buf + left,
182*c39526b7SPramod Gunjikar 			    (caddr_t)sol_ofs_debug_buf, len - left);
183*c39526b7SPramod Gunjikar 			sol_ofs_debug_sptr = sol_ofs_debug_buf + len - left;
184*c39526b7SPramod Gunjikar 		} else {
185*c39526b7SPramod Gunjikar 			bcopy((caddr_t)sol_ofs_print_buf,
186*c39526b7SPramod Gunjikar 			    (caddr_t)sol_ofs_debug_sptr, len);
187*c39526b7SPramod Gunjikar 			sol_ofs_debug_sptr += len;
188*c39526b7SPramod Gunjikar 		}
189*c39526b7SPramod Gunjikar 	}
190*c39526b7SPramod Gunjikar 
191*c39526b7SPramod Gunjikar 	/*
192*c39526b7SPramod Gunjikar 	 * L5-L2 message may go to the sol_ofs_debug_buf
193*c39526b7SPramod Gunjikar 	 * L1 messages will go to the log buf in non-debug kernels and
194*c39526b7SPramod Gunjikar 	 * to console and log buf in debug kernels
195*c39526b7SPramod Gunjikar 	 * L0 messages are warnings and will go to console and log buf
196*c39526b7SPramod Gunjikar 	 */
197*c39526b7SPramod Gunjikar 	switch (level) {
198*c39526b7SPramod Gunjikar 	case SOL_OFS_LOG_L5:
199*c39526b7SPramod Gunjikar 	case SOL_OFS_LOG_L4:
200*c39526b7SPramod Gunjikar 	case SOL_OFS_LOG_L3:
201*c39526b7SPramod Gunjikar 	case SOL_OFS_LOG_L2:
202*c39526b7SPramod Gunjikar 		if (!sol_ofs_buffer_dprintf) {
203*c39526b7SPramod Gunjikar 			cmn_err(CE_CONT, "^%s", sol_ofs_print_buf);
204*c39526b7SPramod Gunjikar 		}
205*c39526b7SPramod Gunjikar 		break;
206*c39526b7SPramod Gunjikar 	case SOL_OFS_LOG_L1 :
207*c39526b7SPramod Gunjikar #ifdef	DEBUG
208*c39526b7SPramod Gunjikar 		cmn_err(CE_CONT, "%s", sol_ofs_print_buf);
209*c39526b7SPramod Gunjikar #else
210*c39526b7SPramod Gunjikar 		if (!sol_ofs_buffer_dprintf) {
211*c39526b7SPramod Gunjikar 			cmn_err(CE_CONT, "^%s", sol_ofs_print_buf);
212*c39526b7SPramod Gunjikar 		}
213*c39526b7SPramod Gunjikar #endif
214*c39526b7SPramod Gunjikar 		break;
215*c39526b7SPramod Gunjikar 	case SOL_OFS_LOG_L0 :
216*c39526b7SPramod Gunjikar 		/* Strip the "\n" added earlier */
217*c39526b7SPramod Gunjikar 		if (sol_ofs_print_buf[len - 1] == '\n') {
218*c39526b7SPramod Gunjikar 			sol_ofs_print_buf[len - 1] = '\0';
219*c39526b7SPramod Gunjikar 		}
220*c39526b7SPramod Gunjikar 		if (msg_ptr[len - 1] == '\n') {
221*c39526b7SPramod Gunjikar 			msg_ptr[len - 1] = '\0';
222*c39526b7SPramod Gunjikar 		}
223*c39526b7SPramod Gunjikar 		cmn_err(CE_WARN, sol_ofs_print_buf);
224*c39526b7SPramod Gunjikar 		break;
225*c39526b7SPramod Gunjikar 	}
226*c39526b7SPramod Gunjikar 
227*c39526b7SPramod Gunjikar 	mutex_exit(&sol_ofs_debug_mutex);
228*c39526b7SPramod Gunjikar }
229*c39526b7SPramod Gunjikar 
230*c39526b7SPramod Gunjikar /* Check individual error levels */
231*c39526b7SPramod Gunjikar #define	SOL_OFS_CHECK_ERR_LEVEL(level)			\
232*c39526b7SPramod Gunjikar 	if (!(uint_t)strncmp(name, "sol_ucma", 8)) {	\
233*c39526b7SPramod Gunjikar 		if (sol_ucma_errlevel < level)		\
234*c39526b7SPramod Gunjikar 			return;				\
235*c39526b7SPramod Gunjikar 	} else if (!(uint_t)strncmp(name, "sol_rdmacm", 10)) {	\
236*c39526b7SPramod Gunjikar 		if (sol_rdmacm_errlevel < level)	\
237*c39526b7SPramod Gunjikar 			return;				\
238*c39526b7SPramod Gunjikar 	} else if (!(uint_t)strncmp(name, "sol_uverbs", 10)) {	\
239*c39526b7SPramod Gunjikar 		if (sol_uverbs_errlevel < level)	\
240*c39526b7SPramod Gunjikar 			return;				\
241*c39526b7SPramod Gunjikar 	} else if (!(uint_t)strncmp(name, "sol_umad", 8)) {	\
242*c39526b7SPramod Gunjikar 		if (sol_umad_errlevel < level)		\
243*c39526b7SPramod Gunjikar 			return;				\
244*c39526b7SPramod Gunjikar 	} else if (!(uint_t)strncmp(name, "sol_ofs_mod", 12)) {	\
245*c39526b7SPramod Gunjikar 		if (sol_ofs_module_errlevel < level)	\
246*c39526b7SPramod Gunjikar 			return;				\
247*c39526b7SPramod Gunjikar 	} else if (strncmp(name, "sol_kverbs", 10) == 0) {	\
248*c39526b7SPramod Gunjikar 		if (sol_kverbs_errlevel < level)		\
249*c39526b7SPramod Gunjikar 			return;				\
250*c39526b7SPramod Gunjikar 	} else if (sol_of_errlevel < level)		\
251*c39526b7SPramod Gunjikar 		return;
252*c39526b7SPramod Gunjikar 
253*c39526b7SPramod Gunjikar void
sol_ofs_dprintf_l5(char * name,char * fmt,...)254*c39526b7SPramod Gunjikar sol_ofs_dprintf_l5(char *name, char *fmt, ...)
255*c39526b7SPramod Gunjikar {
256*c39526b7SPramod Gunjikar 	va_list	ap;
257*c39526b7SPramod Gunjikar 
258*c39526b7SPramod Gunjikar 	if (sol_ofs_supress_above_l2)
259*c39526b7SPramod Gunjikar 		return;
260*c39526b7SPramod Gunjikar 	SOL_OFS_CHECK_ERR_LEVEL(SOL_OFS_LOG_L5);
261*c39526b7SPramod Gunjikar 
262*c39526b7SPramod Gunjikar 	va_start(ap, fmt);
263*c39526b7SPramod Gunjikar 	sol_ofs_dprintf_vlog(name, SOL_OFS_LOG_L5, fmt, ap);
264*c39526b7SPramod Gunjikar 	va_end(ap);
265*c39526b7SPramod Gunjikar }
266*c39526b7SPramod Gunjikar 
267*c39526b7SPramod Gunjikar void
sol_ofs_dprintf_l4(char * name,char * fmt,...)268*c39526b7SPramod Gunjikar sol_ofs_dprintf_l4(char *name, char *fmt, ...)
269*c39526b7SPramod Gunjikar {
270*c39526b7SPramod Gunjikar 	va_list	ap;
271*c39526b7SPramod Gunjikar 
272*c39526b7SPramod Gunjikar 	if (sol_ofs_supress_above_l2)
273*c39526b7SPramod Gunjikar 		return;
274*c39526b7SPramod Gunjikar 	SOL_OFS_CHECK_ERR_LEVEL(SOL_OFS_LOG_L4);
275*c39526b7SPramod Gunjikar 
276*c39526b7SPramod Gunjikar 	va_start(ap, fmt);
277*c39526b7SPramod Gunjikar 	sol_ofs_dprintf_vlog(name, SOL_OFS_LOG_L4, fmt, ap);
278*c39526b7SPramod Gunjikar 	va_end(ap);
279*c39526b7SPramod Gunjikar }
280*c39526b7SPramod Gunjikar 
281*c39526b7SPramod Gunjikar void
sol_ofs_dprintf_l3(char * name,char * fmt,...)282*c39526b7SPramod Gunjikar sol_ofs_dprintf_l3(char *name, char *fmt, ...)
283*c39526b7SPramod Gunjikar {
284*c39526b7SPramod Gunjikar 	va_list	ap;
285*c39526b7SPramod Gunjikar 
286*c39526b7SPramod Gunjikar 	if (sol_ofs_supress_above_l2)
287*c39526b7SPramod Gunjikar 		return;
288*c39526b7SPramod Gunjikar 	SOL_OFS_CHECK_ERR_LEVEL(SOL_OFS_LOG_L3);
289*c39526b7SPramod Gunjikar 
290*c39526b7SPramod Gunjikar 	va_start(ap, fmt);
291*c39526b7SPramod Gunjikar 	sol_ofs_dprintf_vlog(name, SOL_OFS_LOG_L3, fmt, ap);
292*c39526b7SPramod Gunjikar 	va_end(ap);
293*c39526b7SPramod Gunjikar }
294*c39526b7SPramod Gunjikar 
295*c39526b7SPramod Gunjikar void
sol_ofs_dprintf_l2(char * name,char * fmt,...)296*c39526b7SPramod Gunjikar sol_ofs_dprintf_l2(char *name, char *fmt, ...)
297*c39526b7SPramod Gunjikar {
298*c39526b7SPramod Gunjikar 	va_list	ap;
299*c39526b7SPramod Gunjikar 
300*c39526b7SPramod Gunjikar 	SOL_OFS_CHECK_ERR_LEVEL(SOL_OFS_LOG_L2);
301*c39526b7SPramod Gunjikar 
302*c39526b7SPramod Gunjikar 	va_start(ap, fmt);
303*c39526b7SPramod Gunjikar 	sol_ofs_dprintf_vlog(name, SOL_OFS_LOG_L2, fmt, ap);
304*c39526b7SPramod Gunjikar 	va_end(ap);
305*c39526b7SPramod Gunjikar }
306*c39526b7SPramod Gunjikar 
307*c39526b7SPramod Gunjikar void
sol_ofs_dprintf_l1(char * name,char * fmt,...)308*c39526b7SPramod Gunjikar sol_ofs_dprintf_l1(char *name, char *fmt, ...)
309*c39526b7SPramod Gunjikar {
310*c39526b7SPramod Gunjikar 	va_list	ap;
311*c39526b7SPramod Gunjikar 
312*c39526b7SPramod Gunjikar 	SOL_OFS_CHECK_ERR_LEVEL(SOL_OFS_LOG_L1);
313*c39526b7SPramod Gunjikar 
314*c39526b7SPramod Gunjikar 	va_start(ap, fmt);
315*c39526b7SPramod Gunjikar 	sol_ofs_dprintf_vlog(name, SOL_OFS_LOG_L1, fmt, ap);
316*c39526b7SPramod Gunjikar 	va_end(ap);
317*c39526b7SPramod Gunjikar }
318*c39526b7SPramod Gunjikar 
319*c39526b7SPramod Gunjikar void
sol_ofs_dprintf_l0(char * name,char * fmt,...)320*c39526b7SPramod Gunjikar sol_ofs_dprintf_l0(char *name, char *fmt, ...)
321*c39526b7SPramod Gunjikar {
322*c39526b7SPramod Gunjikar 	va_list	ap;
323*c39526b7SPramod Gunjikar 
324*c39526b7SPramod Gunjikar 	if (sol_of_errlevel < SOL_OFS_LOG_L0)
325*c39526b7SPramod Gunjikar 		return;
326*c39526b7SPramod Gunjikar 
327*c39526b7SPramod Gunjikar 	va_start(ap, fmt);
328*c39526b7SPramod Gunjikar 	sol_ofs_dprintf_vlog(name, SOL_OFS_LOG_L1, fmt, ap);
329*c39526b7SPramod Gunjikar 	va_end(ap);
330*c39526b7SPramod Gunjikar }
331