This commit is contained in:
cinap_lenrek 2019-12-02 23:33:29 +01:00
commit 8a0cefb237
2 changed files with 28 additions and 14 deletions

View file

@ -585,13 +585,18 @@ procsetup(Proc *p)
p->fpstate = FPinit; p->fpstate = FPinit;
fpoff(); fpoff();
cycles(&p->kentry);
p->pcycles = -p->kentry;
memset(p->gdt, 0, sizeof(p->gdt)); memset(p->gdt, 0, sizeof(p->gdt));
p->nldt = 0; p->nldt = 0;
/* clear debug registers */
memset(p->dr, 0, sizeof(p->dr)); memset(p->dr, 0, sizeof(p->dr));
if(m->dr7 != 0){
m->dr7 = 0;
putdr7(0);
}
cycles(&p->kentry);
p->pcycles = -p->kentry;
} }
void void
@ -624,9 +629,6 @@ procfork(Proc *p)
memmove(p->fpsave, up->fpsave, sizeof(FPsave)); memmove(p->fpsave, up->fpsave, sizeof(FPsave));
p->fpstate = FPinactive; p->fpstate = FPinactive;
} }
/* clear debug registers */
memset(p->dr, 0, sizeof(p->dr));
splx(s); splx(s);
} }
@ -659,15 +661,17 @@ procsave(Proc *p)
{ {
uvlong t; uvlong t;
cycles(&t);
p->kentry -= t;
p->pcycles += t;
/* we could just always putdr7(0) but accessing DR7 might be slow in a VM */ /* we could just always putdr7(0) but accessing DR7 might be slow in a VM */
if(m->dr7 != 0){ if(m->dr7 != 0){
m->dr7 = 0; m->dr7 = 0;
putdr7(0); putdr7(0);
} }
if(p->state == Moribund)
cycles(&t); p->dr[7] = 0;
p->kentry -= t;
p->pcycles += t;
if(p->fpstate == FPactive){ if(p->fpstate == FPactive){
if(p->state == Moribund) if(p->state == Moribund)

View file

@ -581,6 +581,14 @@ procsetup(Proc *p)
{ {
p->fpstate = FPinit; p->fpstate = FPinit;
_stts(); _stts();
/* clear debug registers */
memset(p->dr, 0, sizeof(p->dr));
if(m->dr7 != 0){
m->dr7 = 0;
putdr7(0);
}
cycles(&p->kentry); cycles(&p->kentry);
p->pcycles = -p->kentry; p->pcycles = -p->kentry;
} }
@ -639,14 +647,16 @@ procsave(Proc *p)
{ {
uvlong t; uvlong t;
cycles(&t);
p->kentry -= t;
p->pcycles += t;
if(m->dr7 != 0){ if(m->dr7 != 0){
m->dr7 = 0; m->dr7 = 0;
putdr7(0); putdr7(0);
} }
if(p->state == Moribund)
cycles(&t); p->dr[7] = 0;
p->kentry -= t;
p->pcycles += t;
switch(p->fpstate & ~(FPnouser|FPkernel|FPindexm)){ switch(p->fpstate & ~(FPnouser|FPkernel|FPindexm)){
case FPactive | FPpush: case FPactive | FPpush: