summaryrefslogtreecommitdiff
path: root/sys/src/9/ppc
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@centraldogma>2011-10-25 20:17:39 +0200
committercinap_lenrek <cinap_lenrek@centraldogma>2011-10-25 20:17:39 +0200
commit3fce94e7850ab80d14fa15f2f393ae71259376e5 (patch)
treec9eb3d2b3b52130690c1fcce43afabd4e9adfcdd /sys/src/9/ppc
parent83865180a29d7feba2a1f460abf17315562141c3 (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.c9
-rw-r--r--sys/src/9/ppc/trap.c2
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;
}