From 473cfb231b723542e5e8eef6ba47e4342a6e902c Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Tue, 14 Dec 1993 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1993-12-14 --- carrera/dat.h | 3 ++- carrera/fns.h | 3 ++- carrera/main.c | 8 ++++++++ pc/dat.h | 4 ++-- pc/fns.h | 1 + port/portdat.h | 2 +- port/proc.c | 16 +++++++--------- power/dat.h | 3 ++- 8 files changed, 25 insertions(+), 15 deletions(-) diff --git a/carrera/dat.h b/carrera/dat.h index da00c7a5a553fe87b5462a03a2debc257c6f5766..19b25371d02bfcab1e8c217af37e55c228948da1 100644 --- a/carrera/dat.h +++ b/carrera/dat.h @@ -117,7 +117,8 @@ struct Mach uchar ktlbnext; int speed; /* cpu speed */ ulong delayloop; /* for the delay() routine */ - Schedq runq; + Schedq hiq; + Schedq loq; int pfault; int cs; diff --git a/carrera/fns.h b/carrera/fns.h index c4b2d79a0c32a06fd5d1fc38493bb07617f3a495..177de41b6cdc1803e96592efa6f0f718cb5967b6 100644 --- a/carrera/fns.h +++ b/carrera/fns.h @@ -3,6 +3,7 @@ void DEBUG(void); void addportintr(int(*)(void)); +#define affinity(x) (MACHP(0)) void allflush(void*, ulong); void arginit(void); int busprobe(ulong); @@ -67,7 +68,7 @@ void prflush(void); ulong prid(void); void printinit(void); #define procrestore(p) -#define procsave(p) +void procsave(Proc*) #define procsetup(p) ((p)->fpstate = FPinit) void purgetlb(int); int putnvram(ulong, void*, int); diff --git a/carrera/main.c b/carrera/main.c index e1ce6d800322dce38a52dc31ae97d05015b38073..e28a8957038213fca315c2c77073e3bc93ecea86 100644 --- a/carrera/main.c +++ b/carrera/main.c @@ -415,3 +415,11 @@ rdbginit(void) { memmove((void*)0xA001C000, rdbgcode, rdbglen); } + +void +procsave(Proc *p) +{ + /* keep track of tlbfaults */ + up->counter[TLBCNTR] += m->tlbfault - m->otlbfault; + m->otlbfault = m->tlbfault; +} diff --git a/pc/dat.h b/pc/dat.h index 03e9f7fc73a6fae2516f082c6a16defd4a0a3a5a..79f021e5ce582d77c340f15738d7a9d9c1510d1d 100644 --- a/pc/dat.h +++ b/pc/dat.h @@ -123,10 +123,10 @@ struct Mach Label sched; /* scheduler wakeup */ Lock alarmlock; /* access to alarm list */ void *alarm; /* alarms bound to this clock */ - Schedq runq; + Schedq hiq; + Schedq loq; int tlbfault; - int otlbfault; int tlbpurge; int pfault; int cs; diff --git a/pc/fns.h b/pc/fns.h index 01505d14bc79c8cd823bbac0569f6e492c4eff57..919e9e77400fa4e87c425d3f95967271ecb1ac1c 100644 --- a/pc/fns.h +++ b/pc/fns.h @@ -1,6 +1,7 @@ #include "../port/portfns.h" void addconf(char*, char*); +#define affinity(x) (MACHP(0)) void bbinit(void); void bigcursor(void); void bootargs(ulong); diff --git a/port/portdat.h b/port/portdat.h index 9296263c85f04752f22f28c415190002ed11a389..0201ff042779f92bfb1c375aa107e9944a33eda5 100644 --- a/port/portdat.h +++ b/port/portdat.h @@ -556,7 +556,7 @@ struct Proc int (*notify)(void*, char*); Mach *mp; /* machine this process last ran on */ - ulong mpfault; /* page faults on that mach at sched time */ + ulong affinity; /* affinity counter for that mach */ void *ureg; /* User registers for notes */ void *dbgreg; /* User registers for devproc */ diff --git a/port/proc.c b/port/proc.c index 54a20c419af1019f129c792778be7884d0d3c609..f9fc533fbd3dd48a3de0097227f1681e2c51da24 100644 --- a/port/proc.c +++ b/port/proc.c @@ -83,8 +83,6 @@ sched(void) /* statistics */ m->cs++; up->counter[CSCNTR]++; - up->counter[TLBCNTR] += m->tlbfault - m->otlbfault; - m->otlbfault = m->tlbfault; procsave(up); if(setlabel(&up->sched)) { @@ -105,7 +103,7 @@ sched(void) int anyready(void) { - return runhiq.head != 0 || runloq.head != 0; + return m->hiq.head != 0 || m->loq.head != 0; } void @@ -117,9 +115,9 @@ ready(Proc *p) s = splhi(); if(p->state == Running) - rq = &runloq; + rq = &m->loq; else - rq = &runhiq; + rq = &affinity(p)->hiq; lock(&runhiq); p->rnext = 0; @@ -143,14 +141,14 @@ runproc(void) loop: spllo(); - while(runhiq.head == 0 && runloq.head == 0) + while(m->hiq.head == 0 && m->loq.head == 0) ; splhi(); - if(runhiq.head) - rq = &runhiq; + if(m->hiq.head) + rq = &m->hiq; else - rq = &runloq; + rq = &m->loq; lock(&runhiq); p = rq->head; diff --git a/power/dat.h b/power/dat.h index d553ab478af60c13ccde5e6164b061a0cc8e8f44..c74219763d64787e3aa6e9e1fb6c1d1200722ada 100644 --- a/power/dat.h +++ b/power/dat.h @@ -131,7 +131,8 @@ struct Mach int intr; int ledval; /* value last written to LED */ int otlbfault; - Schedq runq; + Schedq hiq; + Schedq loq; int stack[1]; };