Deleted Added
full compact
subr_log.c (51658) subr_log.c (69741)
1/*
2 * Copyright (c) 1982, 1986, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 17 unchanged lines hidden (view full) ---

26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 *
33 * @(#)subr_log.c 8.1 (Berkeley) 6/10/93
1/*
2 * Copyright (c) 1982, 1986, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 17 unchanged lines hidden (view full) ---

26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 *
33 * @(#)subr_log.c 8.1 (Berkeley) 6/10/93
34 * $FreeBSD: head/sys/kern/subr_log.c 51658 1999-09-25 18:24:47Z phk $
34 * $FreeBSD: head/sys/kern/subr_log.c 69741 2000-12-08 06:57:39Z phk $
35 */
36
37/*
38 * Error log buffer for kernel printf's.
39 */
40
41#include <sys/param.h>
42#include <sys/systm.h>

--- 42 unchanged lines hidden (view full) ---

85 struct selinfo sc_selp; /* process waiting on select call */
86 struct sigio *sc_sigio; /* information for async I/O */
87} logsoftc;
88
89int log_open; /* also used in log() */
90
91/*ARGSUSED*/
92static int
35 */
36
37/*
38 * Error log buffer for kernel printf's.
39 */
40
41#include <sys/param.h>
42#include <sys/systm.h>

--- 42 unchanged lines hidden (view full) ---

85 struct selinfo sc_selp; /* process waiting on select call */
86 struct sigio *sc_sigio; /* information for async I/O */
87} logsoftc;
88
89int log_open; /* also used in log() */
90
91/*ARGSUSED*/
92static int
93logopen(dev, flags, mode, p)
94 dev_t dev;
95 int flags, mode;
96 struct proc *p;
93logopen(dev_t dev, int flags, int mode, struct proc *p)
97{
98 if (log_open)
99 return (EBUSY);
100 log_open = 1;
101 fsetown(p->p_pid, &logsoftc.sc_sigio); /* signal process only */
102 return (0);
103}
104
105/*ARGSUSED*/
106static int
94{
95 if (log_open)
96 return (EBUSY);
97 log_open = 1;
98 fsetown(p->p_pid, &logsoftc.sc_sigio); /* signal process only */
99 return (0);
100}
101
102/*ARGSUSED*/
103static int
107logclose(dev, flag, mode, p)
108 dev_t dev;
109 int flag, mode;
110 struct proc *p;
104logclose(dev_t dev, int flag, int mode, struct proc *p)
111{
112
113 log_open = 0;
114 logsoftc.sc_state = 0;
115 funsetown(logsoftc.sc_sigio);
116 return (0);
117}
118
119/*ARGSUSED*/
120static int
105{
106
107 log_open = 0;
108 logsoftc.sc_state = 0;
109 funsetown(logsoftc.sc_sigio);
110 return (0);
111}
112
113/*ARGSUSED*/
114static int
121logread(dev, uio, flag)
122 dev_t dev;
123 struct uio *uio;
124 int flag;
115logread(dev_t dev, struct uio *uio, int flag)
125{
116{
126 register struct msgbuf *mbp = msgbufp;
127 register long l;
128 register int s;
117 struct msgbuf *mbp = msgbufp;
118 long l;
119 int s;
129 int error = 0;
130
131 s = splhigh();
132 while (mbp->msg_bufr == mbp->msg_bufx) {
133 if (flag & IO_NDELAY) {
134 splx(s);
135 return (EWOULDBLOCK);
136 }

--- 22 unchanged lines hidden (view full) ---

159 if (mbp->msg_bufr >= mbp->msg_size)
160 mbp->msg_bufr = 0;
161 }
162 return (error);
163}
164
165/*ARGSUSED*/
166static int
120 int error = 0;
121
122 s = splhigh();
123 while (mbp->msg_bufr == mbp->msg_bufx) {
124 if (flag & IO_NDELAY) {
125 splx(s);
126 return (EWOULDBLOCK);
127 }

--- 22 unchanged lines hidden (view full) ---

150 if (mbp->msg_bufr >= mbp->msg_size)
151 mbp->msg_bufr = 0;
152 }
153 return (error);
154}
155
156/*ARGSUSED*/
157static int
167logpoll(dev, events, p)
168 dev_t dev;
169 int events;
170 struct proc *p;
158logpoll(dev_t dev, int events, struct proc *p)
171{
172 int s;
173 int revents = 0;
174
175 s = splhigh();
176
177 if (events & (POLLIN | POLLRDNORM)) {
178 if (msgbufp->msg_bufr != msgbufp->msg_bufx)
179 revents |= events & (POLLIN | POLLRDNORM);
180 else
181 selrecord(p, &logsoftc.sc_selp);
182 }
183 splx(s);
184 return (revents);
185}
186
187void
159{
160 int s;
161 int revents = 0;
162
163 s = splhigh();
164
165 if (events & (POLLIN | POLLRDNORM)) {
166 if (msgbufp->msg_bufr != msgbufp->msg_bufx)
167 revents |= events & (POLLIN | POLLRDNORM);
168 else
169 selrecord(p, &logsoftc.sc_selp);
170 }
171 splx(s);
172 return (revents);
173}
174
175void
188logwakeup()
176logwakeup(void)
189{
190 if (!log_open)
191 return;
192 selwakeup(&logsoftc.sc_selp);
193 if ((logsoftc.sc_state & LOG_ASYNC) && logsoftc.sc_sigio != NULL)
194 pgsigio(logsoftc.sc_sigio, SIGIO, 0);
195 if (logsoftc.sc_state & LOG_RDWAIT) {
196 wakeup((caddr_t)msgbufp);
197 logsoftc.sc_state &= ~LOG_RDWAIT;
198 }
199}
200
201/*ARGSUSED*/
202static int
177{
178 if (!log_open)
179 return;
180 selwakeup(&logsoftc.sc_selp);
181 if ((logsoftc.sc_state & LOG_ASYNC) && logsoftc.sc_sigio != NULL)
182 pgsigio(logsoftc.sc_sigio, SIGIO, 0);
183 if (logsoftc.sc_state & LOG_RDWAIT) {
184 wakeup((caddr_t)msgbufp);
185 logsoftc.sc_state &= ~LOG_RDWAIT;
186 }
187}
188
189/*ARGSUSED*/
190static int
203logioctl(dev, com, data, flag, p)
204 dev_t dev;
205 u_long com;
206 caddr_t data;
207 int flag;
208 struct proc *p;
191logioctl(dev_t dev, u_long com, caddr_t data, int flag, struct proc *p)
209{
210 long l;
211 int s;
212
213 switch (com) {
214
215 /* return number of characters immediately available */
216 case FIONREAD:

--- 32 unchanged lines hidden (view full) ---

249 break;
250
251 default:
252 return (ENOTTY);
253 }
254 return (0);
255}
256
192{
193 long l;
194 int s;
195
196 switch (com) {
197
198 /* return number of characters immediately available */
199 case FIONREAD:

--- 32 unchanged lines hidden (view full) ---

232 break;
233
234 default:
235 return (ENOTTY);
236 }
237 return (0);
238}
239
257
258static void log_drvinit __P((void *unused));
259
260static void
240static void
261log_drvinit(unused)
262 void *unused;
241log_drvinit(void *unused)
263{
242{
243
264 make_dev(&log_cdevsw, 0, UID_ROOT, GID_WHEEL, 0600, "klog");
265}
266
267SYSINIT(logdev,SI_SUB_DRIVERS,SI_ORDER_MIDDLE+CDEV_MAJOR,log_drvinit,NULL)
244 make_dev(&log_cdevsw, 0, UID_ROOT, GID_WHEEL, 0600, "klog");
245}
246
247SYSINIT(logdev,SI_SUB_DRIVERS,SI_ORDER_MIDDLE+CDEV_MAJOR,log_drvinit,NULL)