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