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) |