summaryrefslogtreecommitdiff
path: root/sys/src/9/xen
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2020-12-21 15:04:48 +0100
committercinap_lenrek <cinap_lenrek@felloff.net>2020-12-21 15:04:48 +0100
commit5a059477f8066f25ece1ba2b8c49ab8ea24d19de (patch)
tree98307032821f8c3fcc6858eafbd4852ba207b64a /sys/src/9/xen
parent932995bb27fa517192cb4130d3e79593a8904763 (diff)
pc, xen: move fpu setup/fork/save/restore handlers to pc/fpu.c
Diffstat (limited to 'sys/src/9/xen')
-rw-r--r--sys/src/9/xen/fns.h4
-rw-r--r--sys/src/9/xen/main.c41
2 files changed, 9 insertions, 36 deletions
diff --git a/sys/src/9/xen/fns.h b/sys/src/9/xen/fns.h
index bc87a60ef..32a101935 100644
--- a/sys/src/9/xen/fns.h
+++ b/sys/src/9/xen/fns.h
@@ -11,6 +11,10 @@ int cmpswap486(long*, long, long);
void (*coherence)(void);
void cpuid(int, int, ulong regs[]);
void fpuinit(void);
+void fpuprocsetup(Proc*);
+void fpuprocfork(Proc*);
+void fpuprocsave(Proc*);
+void fpuprocrestore(Proc*);
int cpuidentify(void);
void cpuidprint(void);
void (*cycles)(uvlong*);
diff --git a/sys/src/9/xen/main.c b/sys/src/9/xen/main.c
index 22fe77dd4..61bf5bf4c 100644
--- a/sys/src/9/xen/main.c
+++ b/sys/src/9/xen/main.c
@@ -322,39 +322,22 @@ confinit(void)
}
}
-/*
- * set up floating point for a new process
- */
void
-procsetup(Proc*p)
+procsetup(Proc *p)
{
- p->fpstate = FPinit;
- fpoff();
+ fpuprocsetup(p);
}
void
procfork(Proc *p)
{
- int s;
-
- /* save floating point state */
- s = splhi();
- switch(up->fpstate & ~FPillegal){
- case FPactive:
- fpsave(up->fpsave);
- up->fpstate = FPinactive;
- case FPinactive:
- while(p->fpsave == nil)
- p->fpsave = mallocalign(sizeof(FPsave), FPalign, 0, 0);
- memmove(p->fpsave, up->fpsave, sizeof(FPsave));
- p->fpstate = FPinactive;
- }
- splx(s);
+ fpuprocfork(p);
}
void
procrestore(Proc *p)
{
+ fpuprocrestore(p);
}
/*
@@ -363,21 +346,7 @@ procrestore(Proc *p)
void
procsave(Proc *p)
{
- if(p->fpstate == FPactive){
- if(p->state == Moribund)
- fpclear();
- else{
- /*
- * Fpsave() stores without handling pending
- * unmasked exeptions. Postnote() can't be called
- * so the handling of pending exceptions is delayed
- * until the process runs again and generates an
- * emulation fault to activate the FPU.
- */
- fpsave(p->fpsave);
- }
- p->fpstate = FPinactive;
- }
+ fpuprocsave(p);
/*
* While this processor is in the scheduler, the process could run