| plan 9 kernel history: overview | file list | diff list |
1990/1018/port/devcons.c (diff list | history)
| 1990/0928/sys/src/9/port/devcons.c:36,50 – 1990/1018/sys/src/9/port/devcons.c:36,50 (short | long | prev | next) | ||
| 1990/0227 | IOQ kbdq; /* qlock to getc; interrupt putc's */ IOQ lineq; /* lock to getc; interrupt putc's */ | |
| 1990/0928 |
| |
| 1990/1018 | #define SYSLOGMAGIC 0xdeadbeaf #define SYSLOG ((Syslog *)(UNCACHED | 0x1B00)) | |
| 1990/0928 | typedef struct Syslog Syslog; struct Syslog { ulong magic; | |
| 1990/1018 | int wrapped; | |
| 1990/0928 | char *next; | |
| 1990/1018 | char buf[2*1024]; | |
| 1990/0928 | }; | |
| 1990/0928/sys/src/9/port/devcons.c:67,73 – 1990/1018/sys/src/9/port/devcons.c:67,72 | ||
| 1990/0227 | unlock(&lineq); duartinit(); | |
| 1990/0928 |
| |
| 1990/0227 | } /* | |
| 1990/0928/sys/src/9/port/devcons.c:177,183 – 1990/1018/sys/src/9/port/devcons.c:176,181 | ||
| 1990/0227 | { char buf[PRINTSIZE]; int n; | |
| 1990/0928 |
| |
| 1990/0227 | strcpy(buf, "panic: "); | |
| 1990/06111 | n = doprint(buf+7, buf+sizeof(buf), fmt, (&fmt+1)) - buf; | |
| 1990/0928/sys/src/9/port/devcons.c:184,191 – 1990/1018/sys/src/9/port/devcons.c:182,187 | ||
| 1990/0227 | buf[n] = '\n'; putstrn(buf, n+1); | |
| 1990/0907 | dumpstack(); | |
| 1990/0928 |
| |
| 1990/0227 | exit(); } | |
| 1990/0928/sys/src/9/port/devcons.c:309,314 – 1990/1018/sys/src/9/port/devcons.c:305,311 | ||
| 1990/0227 | Qcputime, | |
| 1990/0720 | Qlog, | |
| 1990/0227 | Qnull, | |
| 1990/1018 | /* Qpanic, /**/ | |
| 1990/0227 | Qpgrpid, Qpid, Qppid, | |
| 1990/0928/sys/src/9/port/devcons.c:321,326 – 1990/1018/sys/src/9/port/devcons.c:318,324 | ||
| 1990/0227 | "cputime", Qcputime, 72, 0600, | |
| 1990/0912 | "log", Qlog, BY2PG-8, 0600, | |
| 1990/0227 | "null", Qnull, 0, 0600, | |
| 1990/1018 | /* "panic", Qpanic, 0, 0666, /**/ | |
| 1990/0227 | "pgrpid", Qpgrpid, 12, 0600, "pid", Qpid, 12, 0600, "ppid", Qppid, 12, 0600, | |
| 1990/0928/sys/src/9/port/devcons.c:618,695 – 1990/1018/sys/src/9/port/devcons.c:616,726 | ||
| 1990/0720 | sysloginit(void) { Syslog *s; | |
| 1990/0928 |
| |
| 1990/1018 | int i; | |
| 1990/0720 | s = SYSLOG; | |
| 1990/0928 |
| |
| 1990/0912 |
| |
| 1990/1018 | if(s->magic!=SYSLOGMAGIC || s->next>=&s->buf[sizeof(s->buf)] || s->next<s->buf){ s->wrapped = 0; | |
| 1990/0720 | s->next = s->buf; s->magic = SYSLOGMAGIC; } | |
| 1990/0928 |
| |
| 1990/0720 | } void syslog(char *p, int n) { | |
| 1990/0912 |
| |
| 1990/0720 | Syslog *s; char *end; | |
| 1990/1018 | int m; | |
| 1990/0720 | ||
| 1990/1018 | sysloginit(); | |
| 1990/0720 | s = SYSLOG; end = &s->buf[sizeof(s->buf)]; | |
| 1990/0912 |
| |
| 1990/0720 |
| |
| 1990/1018 | while(n){ if(s->next + n > end) m = end - s->next; else m = n; memcpy(s->next, p, m); s->next += m; p += m; n -= m; if(s->next >= end){ s->wrapped = 1; | |
| 1990/0720 | s->next = s->buf; | |
| 1990/0912 |
| |
| 1990/1018 | } | |
| 1990/0720 | } | |
| 1990/0912 |
| |
| 1990/0720 | } long | |
| 1990/1018 | readlog(ulong off, char *buf, ulong len) | |
| 1990/0720 | { Syslog *s; | |
| 1990/0912 |
| |
| 1990/1018 | char *start; int n, m; char *p; | |
| 1990/0720 | ||
| 1990/1018 | n = len; p = buf; sysloginit(); | |
| 1990/0720 | s = SYSLOG; | |
| 1990/1018 | end = &s->buf[sizeof(s->buf)]; | |
| 1990/0720 |
| |
| 1990/1018 | if(s->wrapped){ start = s->next; m = sizeof(s->buf); } else { start = s->buf; m = s->next - start; } if(off > m) | |
| 1990/0720 | return 0; | |
| 1990/1018 | if(off + n > m) n = m - off; start += off; if(start > end) start -= sizeof(s->buf); | |
| 1990/0720 |
| |
| 1990/1018 | while(n > 0){ if(start + n > end) m = end - start; else m = n; memcpy(p, start, m); start += m; p += m; n -= m; if(start >= end) start = s->buf; } return p-buf; } /* * Read and write every byte of the log. This seems to ensure that * on reboot, the bytes will really be in memory. I don't understand -- presotto */ void flushsyslog(void) { Syslog *s; char *p, *end; int x; s = SYSLOG; | |
| 1990/0720 | end = &s->buf[sizeof(s->buf)]; | |
| 1990/0912 |
| |
| 1990/0720 | ||
| 1990/0912 |
| |
| 1990/1018 | x = splhi(); lock(&printq); for(p = s->buf; p < end; p++) *p = *p; unlock(&printq); splx(x); | |
| 1990/0912 |
| |
| 1990/0720 |
| |
| 1990/0912 |
| |
| 1990/1018 | wbflush(); | |
| 1990/0227 | } | |