From 679ef1451d645b31dfaed9f3e71e8cab81b2178f Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Thu, 23 Jan 1992 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1992-01-23 --- port/devkprof.c | 2 +- power/devhs.c | 19 ++++++++++++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/port/devkprof.c b/port/devkprof.c index 2d8eb5d3543e68807d1f4d381f4c9516b248fc3d..82191a187833c6afd63896f273d2555f6b6b45d5 100644 --- a/port/devkprof.c +++ b/port/devkprof.c @@ -195,6 +195,6 @@ kproftimer(ulong pc) pc -= kprof.minpc; pc >>= LRES; kprof.buf[pc] += TK2MS(1); - } else + }else kprof.buf[1] += TK2MS(1); } diff --git a/power/devhs.c b/power/devhs.c index b9a3a3075faf0a0f08f95076a03c7a59b793990c..8598f9d78f00f13579610b30ccae095a69d8ca2c 100644 --- a/power/devhs.c +++ b/power/devhs.c @@ -18,6 +18,8 @@ enum { Nhsvme= 1, }; +#define NOW (MACHP(0)->ticks*MS2HZ) + /* * hsvme datakit board */ @@ -44,6 +46,7 @@ struct Hsvme { Queue *rq; /* read queue */ uchar buf[1024]; /* bytes being collected */ uchar *wptr; /* pointer into buf */ + ulong time; /* time byte in buf[0] arrived */ int kstarted; /* true if kernel process started */ int started; @@ -458,6 +461,7 @@ upstream(Hsvme *hp, unsigned int ctl) bp->flags |= S_DELIM; PUTNEXT(hp->rq, bp); hp->wptr = hp->buf; + hp->time = 0; } /* @@ -526,20 +530,29 @@ hsvmekproc(void *arg) /* * data byte, put in local buffer */ + if(hp->time == 0) + hp->time = NOW + 100; *hp->wptr++ = c; if(hp->wptr == &hp->buf[sizeof hp->buf]) upstream(hp, 0); } } + if(hp->time && NOW >= hp->time) + upstream(hp, 0); USED(locked); qunlock(hp); locked = 0; /* - * sleep if input fifo empty + * Sleep if input fifo empty. Make sure we don't hold onto + * any byte for more tha 1/10 second. */ - if(!notempty(addr)) - sleep(&hp->kr, notempty, addr); + if(!(addr->csr & REF)){ + if(hp->wptr == hp->buf) + sleep(&hp->kr, notempty, addr); + else + tsleep(&hp->kr, notempty, addr, 100); + } } }