From e6c2023d2b8b11f387b8a750d4e06e318710e66e Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Fri, 25 Mar 1994 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1994-03-25 --- carrera/dat.h | 15 +++++++++++---- carrera/fns.h | 2 +- port/devmouse.c | 1 + port/portdat.h | 2 +- port/portfns.h | 2 +- port/proc.c | 29 +++++++++++++++-------------- port/qlock.c | 3 ++- 7 files changed, 32 insertions(+), 22 deletions(-) diff --git a/carrera/dat.h b/carrera/dat.h index be4576f906a2c3b5a16bd6ed385847b506cd51ee..1304bde3b446aa0164a3b85728db04b0de63a325 100644 --- a/carrera/dat.h +++ b/carrera/dat.h @@ -87,6 +87,13 @@ struct Notsave #define NCALLBACK 32 +typedef struct Callbk Callbk; +struct Callbk +{ + void (*func)(void*); + void* arg; +}; + /* First FOUR members offsets known by l.s */ struct Mach { @@ -114,10 +121,10 @@ struct Mach Schedq hiq; Schedq loq; - void (**cbin)(void); - void (**cbout)(void); - void (**cbend)(void); - void (*calls[NCALLBACK])(void); + Callbk* cbin; + Callbk* cbout; + Callbk* cbend; + Callbk calls[NCALLBACK]; int pfault; int cs; diff --git a/carrera/fns.h b/carrera/fns.h index f4e324b4e6836165ec84f6ae020744388b4652eb..fba6307d42c414d7d9d73026195d496fedb812dd 100644 --- a/carrera/fns.h +++ b/carrera/fns.h @@ -122,7 +122,7 @@ void hnputs(void*, ushort v); ulong nhgetl(void*); ushort nhgets(void*); -void ifwrite(void*, Block*); +void ifwrite(void*, Block*, int); void* ifinit(int); void ifjab(void); ulong ifaddr(void*); diff --git a/port/devmouse.c b/port/devmouse.c index 45716b2342846a6ca3c2c69f585d8dca28b95cb7..2dd1358527575b57fae6dafeed871e8ac137526b 100644 --- a/port/devmouse.c +++ b/port/devmouse.c @@ -313,6 +313,7 @@ mousewrite(Chan *c, void *va, long n, ulong offset) Point pt; char buf[64]; + USED(offset); p = va; switch(c->qid.path){ case CHDIR: diff --git a/port/portdat.h b/port/portdat.h index 0a49c86c59da1b5a7ebc1e68932b7ef3e991d579..289d4c6ed7b51bf6d28af778d38bbd42db8858bb 100644 --- a/port/portdat.h +++ b/port/portdat.h @@ -580,7 +580,7 @@ struct Proc /* statistics */ ulong counter[Pcounter]; /* specialized per process counters */ ulong syscall[NSYSCALL]; - +ulong qpc; /* * machine specific MMU */ diff --git a/port/portfns.h b/port/portfns.h index 4168cc760f094ce955848d740ff60f38ef472cf0..a35efc7ad40641cd16cadf4d748d62c16091db2a 100644 --- a/port/portfns.h +++ b/port/portfns.h @@ -16,7 +16,7 @@ void buzz(int, int); void cachedel(Image*, ulong); void cachepage(Page*, Image*); void callbacks(void); -int newcallback(void (*)(void)); +void newcallback(void (*)(void*), void*); int cangetc(void*); int canlock(Lock*); int canpage(Proc*); diff --git a/port/proc.c b/port/proc.c index 3065d7c7fb7884f7f2b2574f36f19ed8b8b6cee1..9a936d277596033824378edec54add3cb7ee4c21 100644 --- a/port/proc.c +++ b/port/proc.c @@ -107,29 +107,30 @@ anyready(void) return m->hiq.head != 0 || m->loq.head != 0; } -int -newcallback(void (*func)(void)) +void +newcallback(void (*func)(void*), void *a) { - *m->cbin = func; + Callbk *c; + + c = m->cbin; if(++m->cbin >= m->cbend) m->cbin = m->calls; - if(m->hiq.head == 0 && m->loq.head == 0) - return 1; - - return 0; + c->func = func; + c->arg = a; } void callbacks(void) { - void (*func)(void); + Callbk *c; while(m->cbin != m->cbout) { - func = *m->cbout; + c = m->cbout; if(++m->cbout >= m->cbend) m->cbout = m->calls; - func(); + + c->func(c->arg); } } @@ -710,9 +711,9 @@ procdump(void) s = p->psstate; if(s == 0) s = "kproc"; - print("%3d:%10s pc %8lux %8s (%s) ut %ld st %ld bss %lux\n", + print("%3d:%10s pc %8lux %8s (%s) q %lux ut %ld st %ld bss %lux\n", p->pid, p->text, p->pc, s, statename[p->state], - p->time[0], p->time[1], bss); + p->qpc, p->time[0], p->time[1], bss); } } @@ -843,7 +844,7 @@ killbig(void) if(p->state == Dead || p->kp) continue; l = 0; - for(i=1; iseg[i]; if(s) l += s->top - s->base; @@ -853,7 +854,7 @@ killbig(void) max = l; } } - print("%d: %s killed because no swap configured", kp->pid, kp->text); + print("%d: %s killed because no swap configured\n", kp->pid, kp->text); kp->procctl = Proc_exitme; postnote(kp, 1, "killed: proc too big", NExit); } diff --git a/port/qlock.c b/port/qlock.c index ed8231f46674a78cc3ce90c49ceb0ebd92a03a84..16e83a8e04fdfafec9b2c9efdeebf143655e5892 100644 --- a/port/qlock.c +++ b/port/qlock.c @@ -10,7 +10,7 @@ qlock(QLock *q) { Proc *p, *mp; -if(up==0) { iprint("QLOCK at ilevel PC=%lux\n", getcallerpc(0)); for(;;); } +up->qpc = getcallerpc(0); lock(&q->use); if(!q->locked) { @@ -34,6 +34,7 @@ if(up==0) { iprint("QLOCK at ilevel PC=%lux\n", getcallerpc(0)); for(;;); } int canqlock(QLock *q) { +up->qpc = getcallerpc(0); if(!canlock(&q->use)) return 0; if(q->locked){