From 393b646a9877dee2b1dba8d0471ff26656baf9a1 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Thu, 10 Apr 1997 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1997-04-10 --- port/devcons.c | 20 +++++++++++++++++++- port/qio.c | 24 ++++++++++++------------ 2 files changed, 31 insertions(+), 13 deletions(-) diff --git a/port/devcons.c b/port/devcons.c index 3d12046395b6d57bcd9b22c6d8108cab4c506f58..2fd45a16fee655f5c69c0770ba59ed5dcb075de6 100644 --- a/port/devcons.c +++ b/port/devcons.c @@ -351,6 +351,7 @@ enum{ Qcons, Qconsctl, Qcputime, + Qdrivers, Qhz, Qkey, Qhostdomain, @@ -369,7 +370,7 @@ enum{ Quser, }; -Dirtab consdir[]={ +static Dirtab consdir[]={ "authenticate", {Qauth}, 0, 0666, "authcheck", {Qauthcheck}, 0, 0666, "authenticator", {Qauthent}, 0, 0666, @@ -377,6 +378,7 @@ Dirtab consdir[]={ "cons", {Qcons}, 0, 0660, "consctl", {Qconsctl}, 0, 0220, "cputime", {Qcputime}, 6*NUMSIZE, 0444, + "drivers", {Qdrivers}, 0, 0644, "hostdomain", {Qhostdomain}, DOMLEN, 0664, "hostowner", {Qhostowner}, NAMELEN, 0664, "hz", {Qhz}, NUMSIZE, 0666, @@ -395,6 +397,11 @@ Dirtab consdir[]={ "user", {Quser}, NAMELEN, 0666, }; +enum +{ + MBS = 1024, +}; + ulong boottime; /* seconds since epoch at boot */ long @@ -664,6 +671,17 @@ consread(Chan *c, void *buf, long n, ulong offset) case Qrandom: return randomread(buf, n); + case Qdrivers: + b = malloc(MBS); + if(b == nil) + error(Enomem); + n = 0; + for(i = 0; devtab[i] != nil; i++) + n += snprint(b+n, MBS-n, "#%C %s\n", devtab[i]->dc, devtab[i]->name); + n = readstr(offset, buf, n, b); + free(b); + return n; + default: print("consread %lux\n", c->qid); error(Egreg); diff --git a/port/qio.c b/port/qio.c index dab1669e8c0928fe6e63b771b5dc1f0f594db906..a59960211a9c508799d9890be0f3afd310438d60 100644 --- a/port/qio.c +++ b/port/qio.c @@ -489,7 +489,7 @@ qdiscard(Queue *q, int len) Block *b; int dowakeup, n, sofar; - lock(q); + ilock(q); for(sofar = 0; sofar < len; sofar += n){ b = q->bfirst; if(b == nil) @@ -513,7 +513,7 @@ qdiscard(Queue *q, int len) } else dowakeup = 0; - unlock(q); + iunlock(q); if(dowakeup) wakeup(&q->wr); @@ -530,13 +530,13 @@ qconsume(Queue *q, void *vp, int len) uchar *p = vp; /* sync with qwrite */ - lock(q); + ilock(q); for(;;) { b = q->bfirst; if(b == 0){ q->state |= Qstarve; - unlock(q); + iunlock(q); return -1; } QDEBUG checkb(b, "qconsume 1"); @@ -564,7 +564,7 @@ qconsume(Queue *q, void *vp, int len) } else dowakeup = 0; - unlock(q); + iunlock(q); if(dowakeup) wakeup(&q->wr); @@ -631,19 +631,19 @@ qproduce(Queue *q, void *vp, int len) /* sync with qread */ dowakeup = 0; - lock(q); + ilock(q); /* no waiting receivers, room in buffer? */ if(q->len >= q->limit){ q->state |= Qflow; - unlock(q); + iunlock(q); return -1; } /* save in buffer */ b = iallocb(len); if(b == 0){ - unlock(q); + iunlock(q); return 0; } memmove(b->wp, p, len); @@ -662,7 +662,7 @@ qproduce(Queue *q, void *vp, int len) q->state &= ~Qstarve; dowakeup = 1; } - unlock(q); + iunlock(q); if(dowakeup) wakeup(&q->rr); @@ -683,13 +683,13 @@ qcopy(Queue *q, int len, ulong offset) nb = allocb(len); - lock(q); + ilock(q); /* go to offset */ b = q->bfirst; for(sofar = 0; ; sofar += n){ if(b == nil){ - unlock(q); + iunlock(q); return nb; } n = BLEN(b); @@ -715,7 +715,7 @@ qcopy(Queue *q, int len, ulong offset) n = BLEN(b); p = b->rp; } - unlock(q); + iunlock(q); return nb; }