diff options
author | cinap_lenrek <cinap_lenrek@centraldogma> | 2011-10-25 20:17:39 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@centraldogma> | 2011-10-25 20:17:39 +0200 |
commit | 3fce94e7850ab80d14fa15f2f393ae71259376e5 (patch) | |
tree | c9eb3d2b3b52130690c1fcce43afabd4e9adfcdd /sys/src/9/ppc | |
parent | 83865180a29d7feba2a1f460abf17315562141c3 (diff) |
fix _tos->pcycles, make _tos->kcycles actually count cycles executing kernel code on behalf of the process
Diffstat (limited to 'sys/src/9/ppc')
-rw-r--r-- | sys/src/9/ppc/main.c | 9 | ||||
-rw-r--r-- | sys/src/9/ppc/trap.c | 2 |
2 files changed, 9 insertions, 2 deletions
diff --git a/sys/src/9/ppc/main.c b/sys/src/9/ppc/main.c index 311d83105..e2edf14cc 100644 --- a/sys/src/9/ppc/main.c +++ b/sys/src/9/ppc/main.c @@ -284,11 +284,16 @@ void procsetup(Proc *p) { p->fpstate = FPinit; + + cycles(&p->kentry); + p->pcycles = -p->kentry; } void -procfork(Proc *) +procfork(Proc *p) { + p->kentry = up->kentry; + p->pcycles = -p->kentry; } void @@ -300,6 +305,7 @@ procrestore(Proc *p) return; cycles(&t); p->pcycles -= t; + p->kentry += t; } /* @@ -312,6 +318,7 @@ procsave(Proc *p) cycles(&t); p->pcycles += t; + p->kentry -= t; if(p->fpstate == FPactive){ if(p->state != Moribund) fpsave(&up->fpsave); diff --git a/sys/src/9/ppc/trap.c b/sys/src/9/ppc/trap.c index ceacce8a8..ab3e713a4 100644 --- a/sys/src/9/ppc/trap.c +++ b/sys/src/9/ppc/trap.c @@ -150,7 +150,7 @@ kexit(Ureg*) tos = (Tos*)(USTKTOP-sizeof(Tos)); cycles(&t); tos->kcycles += t - up->kentry; - tos->pcycles = up->pcycles; + tos->pcycles = t + up->pcycles; tos->pid = up->pid; } |