xref: /onnv-gate/usr/src/uts/common/io/ib/clients/eoib/eib_log.c (revision 13101:da7b13ec3a28)
1*13101SVenki.Rajagopalan@Sun.COM /*
2*13101SVenki.Rajagopalan@Sun.COM  * CDDL HEADER START
3*13101SVenki.Rajagopalan@Sun.COM  *
4*13101SVenki.Rajagopalan@Sun.COM  * The contents of this file are subject to the terms of the
5*13101SVenki.Rajagopalan@Sun.COM  * Common Development and Distribution License (the "License").
6*13101SVenki.Rajagopalan@Sun.COM  * You may not use this file except in compliance with the License.
7*13101SVenki.Rajagopalan@Sun.COM  *
8*13101SVenki.Rajagopalan@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*13101SVenki.Rajagopalan@Sun.COM  * or http://www.opensolaris.org/os/licensing.
10*13101SVenki.Rajagopalan@Sun.COM  * See the License for the specific language governing permissions
11*13101SVenki.Rajagopalan@Sun.COM  * and limitations under the License.
12*13101SVenki.Rajagopalan@Sun.COM  *
13*13101SVenki.Rajagopalan@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
14*13101SVenki.Rajagopalan@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*13101SVenki.Rajagopalan@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
16*13101SVenki.Rajagopalan@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
17*13101SVenki.Rajagopalan@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
18*13101SVenki.Rajagopalan@Sun.COM  *
19*13101SVenki.Rajagopalan@Sun.COM  * CDDL HEADER END
20*13101SVenki.Rajagopalan@Sun.COM  */
21*13101SVenki.Rajagopalan@Sun.COM 
22*13101SVenki.Rajagopalan@Sun.COM /*
23*13101SVenki.Rajagopalan@Sun.COM  * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
24*13101SVenki.Rajagopalan@Sun.COM  */
25*13101SVenki.Rajagopalan@Sun.COM 
26*13101SVenki.Rajagopalan@Sun.COM #include <sys/types.h>
27*13101SVenki.Rajagopalan@Sun.COM #include <sys/kmem.h>
28*13101SVenki.Rajagopalan@Sun.COM #include <sys/cmn_err.h>
29*13101SVenki.Rajagopalan@Sun.COM #include <sys/conf.h>
30*13101SVenki.Rajagopalan@Sun.COM #include <sys/ddi.h>
31*13101SVenki.Rajagopalan@Sun.COM #include <sys/sunddi.h>
32*13101SVenki.Rajagopalan@Sun.COM #include <sys/ksynch.h>
33*13101SVenki.Rajagopalan@Sun.COM #include <sys/varargs.h>
34*13101SVenki.Rajagopalan@Sun.COM 
35*13101SVenki.Rajagopalan@Sun.COM #include <sys/ib/clients/eoib/eib_impl.h>
36*13101SVenki.Rajagopalan@Sun.COM 
37*13101SVenki.Rajagopalan@Sun.COM /*
38*13101SVenki.Rajagopalan@Sun.COM  * Defaults
39*13101SVenki.Rajagopalan@Sun.COM  */
40*13101SVenki.Rajagopalan@Sun.COM uint_t eib_log_size = EIB_LOGSZ_DEFAULT;
41*13101SVenki.Rajagopalan@Sun.COM int eib_log_level = EIB_MSGS_DEFAULT | EIB_MSGS_DEBUG;
42*13101SVenki.Rajagopalan@Sun.COM int eib_log_timestamps = 0;
43*13101SVenki.Rajagopalan@Sun.COM 
44*13101SVenki.Rajagopalan@Sun.COM /*
45*13101SVenki.Rajagopalan@Sun.COM  * Debug variables, should not be tunables so allocated debug buffer
46*13101SVenki.Rajagopalan@Sun.COM  * and its size remain consistent.
47*13101SVenki.Rajagopalan@Sun.COM  */
48*13101SVenki.Rajagopalan@Sun.COM static kmutex_t eib_debug_buf_lock;
49*13101SVenki.Rajagopalan@Sun.COM static uint8_t *eib_debug_buf;
50*13101SVenki.Rajagopalan@Sun.COM static uint32_t eib_debug_buf_ndx;
51*13101SVenki.Rajagopalan@Sun.COM static uint_t eib_debug_buf_sz = 0;
52*13101SVenki.Rajagopalan@Sun.COM 
53*13101SVenki.Rajagopalan@Sun.COM /*
54*13101SVenki.Rajagopalan@Sun.COM  * Local declarations
55*13101SVenki.Rajagopalan@Sun.COM  */
56*13101SVenki.Rajagopalan@Sun.COM static void eib_log(char *);
57*13101SVenki.Rajagopalan@Sun.COM 
58*13101SVenki.Rajagopalan@Sun.COM void
eib_debug_init(void)59*13101SVenki.Rajagopalan@Sun.COM eib_debug_init(void)
60*13101SVenki.Rajagopalan@Sun.COM {
61*13101SVenki.Rajagopalan@Sun.COM 	eib_debug_buf_ndx = 0;
62*13101SVenki.Rajagopalan@Sun.COM 	eib_debug_buf_sz = eib_log_size;
63*13101SVenki.Rajagopalan@Sun.COM 	eib_debug_buf = kmem_zalloc(eib_debug_buf_sz, KM_SLEEP);
64*13101SVenki.Rajagopalan@Sun.COM 
65*13101SVenki.Rajagopalan@Sun.COM 	mutex_init(&eib_debug_buf_lock, NULL, MUTEX_DRIVER, NULL);
66*13101SVenki.Rajagopalan@Sun.COM }
67*13101SVenki.Rajagopalan@Sun.COM 
68*13101SVenki.Rajagopalan@Sun.COM void
eib_debug_fini(void)69*13101SVenki.Rajagopalan@Sun.COM eib_debug_fini(void)
70*13101SVenki.Rajagopalan@Sun.COM {
71*13101SVenki.Rajagopalan@Sun.COM 	mutex_destroy(&eib_debug_buf_lock);
72*13101SVenki.Rajagopalan@Sun.COM 
73*13101SVenki.Rajagopalan@Sun.COM 	if (eib_debug_buf && eib_debug_buf_sz) {
74*13101SVenki.Rajagopalan@Sun.COM 		kmem_free(eib_debug_buf, eib_debug_buf_sz);
75*13101SVenki.Rajagopalan@Sun.COM 		eib_debug_buf = NULL;
76*13101SVenki.Rajagopalan@Sun.COM 	}
77*13101SVenki.Rajagopalan@Sun.COM 	eib_debug_buf_sz = 0;
78*13101SVenki.Rajagopalan@Sun.COM 	eib_debug_buf_ndx = 0;
79*13101SVenki.Rajagopalan@Sun.COM }
80*13101SVenki.Rajagopalan@Sun.COM 
81*13101SVenki.Rajagopalan@Sun.COM void
eib_log(char * msg)82*13101SVenki.Rajagopalan@Sun.COM eib_log(char *msg)
83*13101SVenki.Rajagopalan@Sun.COM {
84*13101SVenki.Rajagopalan@Sun.COM 	uint32_t off;
85*13101SVenki.Rajagopalan@Sun.COM 	int msglen;
86*13101SVenki.Rajagopalan@Sun.COM 	char msgbuf[EIB_MAX_LINE];
87*13101SVenki.Rajagopalan@Sun.COM 
88*13101SVenki.Rajagopalan@Sun.COM 	if (eib_debug_buf == NULL)
89*13101SVenki.Rajagopalan@Sun.COM 		return;
90*13101SVenki.Rajagopalan@Sun.COM 
91*13101SVenki.Rajagopalan@Sun.COM 	if (eib_log_timestamps) {
92*13101SVenki.Rajagopalan@Sun.COM 		msglen = snprintf(msgbuf, EIB_MAX_LINE, "%llx: %s",
93*13101SVenki.Rajagopalan@Sun.COM 		    (unsigned long long)ddi_get_lbolt64(), msg);
94*13101SVenki.Rajagopalan@Sun.COM 	} else {
95*13101SVenki.Rajagopalan@Sun.COM 		msglen = snprintf(msgbuf, EIB_MAX_LINE, "%s", msg);
96*13101SVenki.Rajagopalan@Sun.COM 	}
97*13101SVenki.Rajagopalan@Sun.COM 
98*13101SVenki.Rajagopalan@Sun.COM 	if (msglen < 0)
99*13101SVenki.Rajagopalan@Sun.COM 		return;
100*13101SVenki.Rajagopalan@Sun.COM 	else if (msglen >= EIB_MAX_LINE)
101*13101SVenki.Rajagopalan@Sun.COM 		msglen = EIB_MAX_LINE - 1;
102*13101SVenki.Rajagopalan@Sun.COM 
103*13101SVenki.Rajagopalan@Sun.COM 	mutex_enter(&eib_debug_buf_lock);
104*13101SVenki.Rajagopalan@Sun.COM 	if ((eib_debug_buf_ndx == 0) ||
105*13101SVenki.Rajagopalan@Sun.COM 	    (eib_debug_buf[eib_debug_buf_ndx-1] != '\n')) {
106*13101SVenki.Rajagopalan@Sun.COM 		eib_debug_buf[eib_debug_buf_ndx] = '\n';
107*13101SVenki.Rajagopalan@Sun.COM 		eib_debug_buf_ndx++;
108*13101SVenki.Rajagopalan@Sun.COM 	}
109*13101SVenki.Rajagopalan@Sun.COM 
110*13101SVenki.Rajagopalan@Sun.COM 	off = eib_debug_buf_ndx;	/* current msg should go here */
111*13101SVenki.Rajagopalan@Sun.COM 
112*13101SVenki.Rajagopalan@Sun.COM 	eib_debug_buf_ndx += msglen;	/* next msg should start here */
113*13101SVenki.Rajagopalan@Sun.COM 	eib_debug_buf[eib_debug_buf_ndx] = 0;	/* terminate current msg */
114*13101SVenki.Rajagopalan@Sun.COM 
115*13101SVenki.Rajagopalan@Sun.COM 	if (eib_debug_buf_ndx >= (eib_debug_buf_sz - 2 * EIB_MAX_LINE))
116*13101SVenki.Rajagopalan@Sun.COM 		eib_debug_buf_ndx = 0;
117*13101SVenki.Rajagopalan@Sun.COM 
118*13101SVenki.Rajagopalan@Sun.COM 	mutex_exit(&eib_debug_buf_lock);
119*13101SVenki.Rajagopalan@Sun.COM 
120*13101SVenki.Rajagopalan@Sun.COM 	bcopy(msgbuf, eib_debug_buf+off, msglen);    /* no lock needed */
121*13101SVenki.Rajagopalan@Sun.COM }
122*13101SVenki.Rajagopalan@Sun.COM 
123*13101SVenki.Rajagopalan@Sun.COM #ifdef EIB_DEBUG
124*13101SVenki.Rajagopalan@Sun.COM void
eib_dprintf_verbose(int inst,const char * fmt,...)125*13101SVenki.Rajagopalan@Sun.COM eib_dprintf_verbose(int inst, const char *fmt, ...)
126*13101SVenki.Rajagopalan@Sun.COM {
127*13101SVenki.Rajagopalan@Sun.COM 	va_list ap;
128*13101SVenki.Rajagopalan@Sun.COM 	int msglen;
129*13101SVenki.Rajagopalan@Sun.COM 	char msgbuf[EIB_MAX_LINE];
130*13101SVenki.Rajagopalan@Sun.COM 	char newfmt[EIB_MAX_LINE];
131*13101SVenki.Rajagopalan@Sun.COM 
132*13101SVenki.Rajagopalan@Sun.COM 	if ((eib_log_level & EIB_MSGS_VERBOSE) != EIB_MSGS_VERBOSE)
133*13101SVenki.Rajagopalan@Sun.COM 		return;
134*13101SVenki.Rajagopalan@Sun.COM 
135*13101SVenki.Rajagopalan@Sun.COM 	(void) snprintf(newfmt, EIB_MAX_LINE, "eoib%d__%s", inst, fmt);
136*13101SVenki.Rajagopalan@Sun.COM 
137*13101SVenki.Rajagopalan@Sun.COM 	va_start(ap, fmt);
138*13101SVenki.Rajagopalan@Sun.COM 	msglen = vsnprintf(msgbuf, EIB_MAX_LINE, newfmt, ap);
139*13101SVenki.Rajagopalan@Sun.COM 	va_end(ap);
140*13101SVenki.Rajagopalan@Sun.COM 
141*13101SVenki.Rajagopalan@Sun.COM 	if (msglen > 0) {
142*13101SVenki.Rajagopalan@Sun.COM 		eib_log(msgbuf);
143*13101SVenki.Rajagopalan@Sun.COM 	}
144*13101SVenki.Rajagopalan@Sun.COM }
145*13101SVenki.Rajagopalan@Sun.COM 
146*13101SVenki.Rajagopalan@Sun.COM void
eib_dprintf_pkt(int inst,uint8_t * pkt,uint_t sz)147*13101SVenki.Rajagopalan@Sun.COM eib_dprintf_pkt(int inst, uint8_t *pkt, uint_t sz)
148*13101SVenki.Rajagopalan@Sun.COM {
149*13101SVenki.Rajagopalan@Sun.COM 	char msgbuf[EIB_MAX_LINE];
150*13101SVenki.Rajagopalan@Sun.COM 	char *bufp;
151*13101SVenki.Rajagopalan@Sun.COM 	uint8_t *p = pkt;
152*13101SVenki.Rajagopalan@Sun.COM 	uint_t len;
153*13101SVenki.Rajagopalan@Sun.COM 	uint_t i;
154*13101SVenki.Rajagopalan@Sun.COM 
155*13101SVenki.Rajagopalan@Sun.COM 	if ((eib_log_level & EIB_MSGS_PKT) != EIB_MSGS_PKT)
156*13101SVenki.Rajagopalan@Sun.COM 		return;
157*13101SVenki.Rajagopalan@Sun.COM 
158*13101SVenki.Rajagopalan@Sun.COM 	while (sz >= 16) {
159*13101SVenki.Rajagopalan@Sun.COM 		(void) snprintf(msgbuf, EIB_MAX_LINE,
160*13101SVenki.Rajagopalan@Sun.COM 		    "eoib%02d__%02x %02x %02x %02x %02x %02x %02x %02x "
161*13101SVenki.Rajagopalan@Sun.COM 		    "%02x %02x %02x %02x %02x %02x %02x %02x\n", inst,
162*13101SVenki.Rajagopalan@Sun.COM 		    p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7],
163*13101SVenki.Rajagopalan@Sun.COM 		    p[8], p[9], p[10], p[11], p[12], p[13], p[14], p[15]);
164*13101SVenki.Rajagopalan@Sun.COM 
165*13101SVenki.Rajagopalan@Sun.COM 		eib_log(msgbuf);
166*13101SVenki.Rajagopalan@Sun.COM 
167*13101SVenki.Rajagopalan@Sun.COM 		p += 16;
168*13101SVenki.Rajagopalan@Sun.COM 		sz -= 16;
169*13101SVenki.Rajagopalan@Sun.COM 	}
170*13101SVenki.Rajagopalan@Sun.COM 
171*13101SVenki.Rajagopalan@Sun.COM 	len = EIB_MAX_LINE;
172*13101SVenki.Rajagopalan@Sun.COM 	bufp = msgbuf;
173*13101SVenki.Rajagopalan@Sun.COM 	for (i = 0; i < sz; i++) {
174*13101SVenki.Rajagopalan@Sun.COM 		if (i == 0) {
175*13101SVenki.Rajagopalan@Sun.COM 			(void) snprintf(bufp, len, "eoib%02d__%02x ",
176*13101SVenki.Rajagopalan@Sun.COM 			    inst, p[i]);
177*13101SVenki.Rajagopalan@Sun.COM 			len -= 11;
178*13101SVenki.Rajagopalan@Sun.COM 			bufp += 11;
179*13101SVenki.Rajagopalan@Sun.COM 		} else if (i < (sz - 1)) {
180*13101SVenki.Rajagopalan@Sun.COM 			(void) snprintf(bufp, len, "%02x ", p[i]);
181*13101SVenki.Rajagopalan@Sun.COM 			len -= 3;
182*13101SVenki.Rajagopalan@Sun.COM 			bufp += 3;
183*13101SVenki.Rajagopalan@Sun.COM 		} else {
184*13101SVenki.Rajagopalan@Sun.COM 			(void) snprintf(bufp, len, "%02x\n", p[i]);
185*13101SVenki.Rajagopalan@Sun.COM 			len -= 3;
186*13101SVenki.Rajagopalan@Sun.COM 			bufp += 3;
187*13101SVenki.Rajagopalan@Sun.COM 		}
188*13101SVenki.Rajagopalan@Sun.COM 	}
189*13101SVenki.Rajagopalan@Sun.COM 
190*13101SVenki.Rajagopalan@Sun.COM 	eib_log(msgbuf);
191*13101SVenki.Rajagopalan@Sun.COM }
192*13101SVenki.Rajagopalan@Sun.COM 
193*13101SVenki.Rajagopalan@Sun.COM void
eib_dprintf_args(int inst,const char * fmt,...)194*13101SVenki.Rajagopalan@Sun.COM eib_dprintf_args(int inst, const char *fmt, ...)
195*13101SVenki.Rajagopalan@Sun.COM {
196*13101SVenki.Rajagopalan@Sun.COM 	va_list ap;
197*13101SVenki.Rajagopalan@Sun.COM 	int msglen;
198*13101SVenki.Rajagopalan@Sun.COM 	char msgbuf[EIB_MAX_LINE];
199*13101SVenki.Rajagopalan@Sun.COM 	char newfmt[EIB_MAX_LINE];
200*13101SVenki.Rajagopalan@Sun.COM 
201*13101SVenki.Rajagopalan@Sun.COM 	if ((eib_log_level & EIB_MSGS_ARGS) != EIB_MSGS_ARGS)
202*13101SVenki.Rajagopalan@Sun.COM 		return;
203*13101SVenki.Rajagopalan@Sun.COM 
204*13101SVenki.Rajagopalan@Sun.COM 	(void) snprintf(newfmt, EIB_MAX_LINE, "eoib%d__%s", inst, fmt);
205*13101SVenki.Rajagopalan@Sun.COM 
206*13101SVenki.Rajagopalan@Sun.COM 	va_start(ap, fmt);
207*13101SVenki.Rajagopalan@Sun.COM 	msglen = vsnprintf(msgbuf, EIB_MAX_LINE, newfmt, ap);
208*13101SVenki.Rajagopalan@Sun.COM 	va_end(ap);
209*13101SVenki.Rajagopalan@Sun.COM 
210*13101SVenki.Rajagopalan@Sun.COM 	if (msglen > 0) {
211*13101SVenki.Rajagopalan@Sun.COM 		eib_log(msgbuf);
212*13101SVenki.Rajagopalan@Sun.COM 	}
213*13101SVenki.Rajagopalan@Sun.COM }
214*13101SVenki.Rajagopalan@Sun.COM 
215*13101SVenki.Rajagopalan@Sun.COM void
eib_dprintf_debug(int inst,const char * fmt,...)216*13101SVenki.Rajagopalan@Sun.COM eib_dprintf_debug(int inst, const char *fmt, ...)
217*13101SVenki.Rajagopalan@Sun.COM {
218*13101SVenki.Rajagopalan@Sun.COM 	va_list ap;
219*13101SVenki.Rajagopalan@Sun.COM 	int msglen;
220*13101SVenki.Rajagopalan@Sun.COM 	char msgbuf[EIB_MAX_LINE];
221*13101SVenki.Rajagopalan@Sun.COM 	char newfmt[EIB_MAX_LINE];
222*13101SVenki.Rajagopalan@Sun.COM 
223*13101SVenki.Rajagopalan@Sun.COM 	if ((eib_log_level & EIB_MSGS_DEBUG) != EIB_MSGS_DEBUG)
224*13101SVenki.Rajagopalan@Sun.COM 		return;
225*13101SVenki.Rajagopalan@Sun.COM 
226*13101SVenki.Rajagopalan@Sun.COM 	(void) snprintf(newfmt, EIB_MAX_LINE, "eoib%d__%s", inst, fmt);
227*13101SVenki.Rajagopalan@Sun.COM 
228*13101SVenki.Rajagopalan@Sun.COM 	va_start(ap, fmt);
229*13101SVenki.Rajagopalan@Sun.COM 	msglen = vsnprintf(msgbuf, EIB_MAX_LINE, newfmt, ap);
230*13101SVenki.Rajagopalan@Sun.COM 	va_end(ap);
231*13101SVenki.Rajagopalan@Sun.COM 
232*13101SVenki.Rajagopalan@Sun.COM 	if (msglen > 0) {
233*13101SVenki.Rajagopalan@Sun.COM 		eib_log(msgbuf);
234*13101SVenki.Rajagopalan@Sun.COM 	}
235*13101SVenki.Rajagopalan@Sun.COM }
236*13101SVenki.Rajagopalan@Sun.COM #endif
237*13101SVenki.Rajagopalan@Sun.COM 
238*13101SVenki.Rajagopalan@Sun.COM void
eib_dprintf_warn(int inst,const char * fmt,...)239*13101SVenki.Rajagopalan@Sun.COM eib_dprintf_warn(int inst, const char *fmt, ...)
240*13101SVenki.Rajagopalan@Sun.COM {
241*13101SVenki.Rajagopalan@Sun.COM 	va_list ap;
242*13101SVenki.Rajagopalan@Sun.COM 	int msglen;
243*13101SVenki.Rajagopalan@Sun.COM 	char msgbuf[EIB_MAX_LINE];
244*13101SVenki.Rajagopalan@Sun.COM 	char newfmt[EIB_MAX_LINE];
245*13101SVenki.Rajagopalan@Sun.COM 
246*13101SVenki.Rajagopalan@Sun.COM 	if ((eib_log_level & EIB_MSGS_WARN) != EIB_MSGS_WARN)
247*13101SVenki.Rajagopalan@Sun.COM 		return;
248*13101SVenki.Rajagopalan@Sun.COM 
249*13101SVenki.Rajagopalan@Sun.COM 	(void) snprintf(newfmt, EIB_MAX_LINE, "eoib%d__%s", inst, fmt);
250*13101SVenki.Rajagopalan@Sun.COM 
251*13101SVenki.Rajagopalan@Sun.COM 	va_start(ap, fmt);
252*13101SVenki.Rajagopalan@Sun.COM 	msglen = vsnprintf(msgbuf, EIB_MAX_LINE, newfmt, ap);
253*13101SVenki.Rajagopalan@Sun.COM 	va_end(ap);
254*13101SVenki.Rajagopalan@Sun.COM 
255*13101SVenki.Rajagopalan@Sun.COM 	if (msglen > 0) {
256*13101SVenki.Rajagopalan@Sun.COM 		eib_log(msgbuf);
257*13101SVenki.Rajagopalan@Sun.COM 	}
258*13101SVenki.Rajagopalan@Sun.COM }
259*13101SVenki.Rajagopalan@Sun.COM 
260*13101SVenki.Rajagopalan@Sun.COM void
eib_dprintf_err(int inst,const char * fmt,...)261*13101SVenki.Rajagopalan@Sun.COM eib_dprintf_err(int inst, const char *fmt, ...)
262*13101SVenki.Rajagopalan@Sun.COM {
263*13101SVenki.Rajagopalan@Sun.COM 	va_list ap;
264*13101SVenki.Rajagopalan@Sun.COM 	int msglen;
265*13101SVenki.Rajagopalan@Sun.COM 	char msgbuf[EIB_MAX_LINE];
266*13101SVenki.Rajagopalan@Sun.COM 	char newfmt[EIB_MAX_LINE];
267*13101SVenki.Rajagopalan@Sun.COM 
268*13101SVenki.Rajagopalan@Sun.COM 	if ((eib_log_level & EIB_MSGS_ERR) != EIB_MSGS_ERR)
269*13101SVenki.Rajagopalan@Sun.COM 		return;
270*13101SVenki.Rajagopalan@Sun.COM 
271*13101SVenki.Rajagopalan@Sun.COM 	(void) snprintf(newfmt, EIB_MAX_LINE, "eoib%d__%s", inst, fmt);
272*13101SVenki.Rajagopalan@Sun.COM 
273*13101SVenki.Rajagopalan@Sun.COM 	va_start(ap, fmt);
274*13101SVenki.Rajagopalan@Sun.COM 	msglen = vsnprintf(msgbuf, EIB_MAX_LINE, newfmt, ap);
275*13101SVenki.Rajagopalan@Sun.COM 	va_end(ap);
276*13101SVenki.Rajagopalan@Sun.COM 
277*13101SVenki.Rajagopalan@Sun.COM 	if (msglen > 0) {
278*13101SVenki.Rajagopalan@Sun.COM 		eib_log(msgbuf);
279*13101SVenki.Rajagopalan@Sun.COM 		cmn_err(CE_WARN, "!%s\n", msgbuf);
280*13101SVenki.Rajagopalan@Sun.COM 	}
281*13101SVenki.Rajagopalan@Sun.COM }
282*13101SVenki.Rajagopalan@Sun.COM 
283*13101SVenki.Rajagopalan@Sun.COM void
eib_dprintf_crit(int inst,const char * fmt,...)284*13101SVenki.Rajagopalan@Sun.COM eib_dprintf_crit(int inst, const char *fmt, ...)
285*13101SVenki.Rajagopalan@Sun.COM {
286*13101SVenki.Rajagopalan@Sun.COM 	va_list ap;
287*13101SVenki.Rajagopalan@Sun.COM 	int msglen;
288*13101SVenki.Rajagopalan@Sun.COM 	char msgbuf[EIB_MAX_LINE];
289*13101SVenki.Rajagopalan@Sun.COM 	char newfmt[EIB_MAX_LINE];
290*13101SVenki.Rajagopalan@Sun.COM 
291*13101SVenki.Rajagopalan@Sun.COM 	if ((eib_log_level & EIB_MSGS_CRIT) != EIB_MSGS_CRIT)
292*13101SVenki.Rajagopalan@Sun.COM 		return;
293*13101SVenki.Rajagopalan@Sun.COM 
294*13101SVenki.Rajagopalan@Sun.COM 	(void) snprintf(newfmt, EIB_MAX_LINE, "eoib%d__%s", inst, fmt);
295*13101SVenki.Rajagopalan@Sun.COM 
296*13101SVenki.Rajagopalan@Sun.COM 	va_start(ap, fmt);
297*13101SVenki.Rajagopalan@Sun.COM 	msglen = vsnprintf(msgbuf, EIB_MAX_LINE, newfmt, ap);
298*13101SVenki.Rajagopalan@Sun.COM 	va_end(ap);
299*13101SVenki.Rajagopalan@Sun.COM 
300*13101SVenki.Rajagopalan@Sun.COM 	if (msglen > 0) {
301*13101SVenki.Rajagopalan@Sun.COM 		eib_log(msgbuf);
302*13101SVenki.Rajagopalan@Sun.COM 		cmn_err(CE_PANIC, "!%s\n", msgbuf);
303*13101SVenki.Rajagopalan@Sun.COM 	}
304*13101SVenki.Rajagopalan@Sun.COM }
305