svn commit: r216394 - in head/sys: amd64/amd64 i386/isa
Konstantin Belousov
kib at FreeBSD.org
Sun Dec 12 16:16:39 UTC 2010
Author: kib
Date: Sun Dec 12 16:16:39 2010
New Revision: 216394
URL: http://svn.freebsd.org/changeset/base/216394
Log:
In fpudna()/npxdna(), mark FPU context initialized and optionally
mark user FPU context initialized, if current context is user context.
It was reversed in r215865, by inadequate change of this code fragment
to a call to fpuuserinited()/npxuserinited().
The issue is only relevant for in-kernel users of FPU.
Reported by: Jan Henrik Sylvester <me janh de>, Mike Tancsa <mike sentex net>
Tested by: Mike Tancsa
MFC after: 3 days
Modified:
head/sys/amd64/amd64/fpu.c
head/sys/i386/isa/npx.c
Modified: head/sys/amd64/amd64/fpu.c
==============================================================================
--- head/sys/amd64/amd64/fpu.c Sun Dec 12 13:04:30 2010 (r216393)
+++ head/sys/amd64/amd64/fpu.c Sun Dec 12 16:16:39 2010 (r216394)
@@ -426,7 +426,9 @@ fpudna(void)
fxrstor(&fpu_initialstate);
if (pcb->pcb_initial_fpucw != __INITIAL_FPUCW__)
fldcw(pcb->pcb_initial_fpucw);
- fpuuserinited(curthread);
+ pcb->pcb_flags |= PCB_FPUINITDONE;
+ if (PCB_USER_FPU(pcb))
+ pcb->pcb_flags |= PCB_USERFPUINITDONE;
} else
fxrstor(pcb->pcb_save);
critical_exit();
Modified: head/sys/i386/isa/npx.c
==============================================================================
--- head/sys/i386/isa/npx.c Sun Dec 12 13:04:30 2010 (r216393)
+++ head/sys/i386/isa/npx.c Sun Dec 12 16:16:39 2010 (r216394)
@@ -684,7 +684,9 @@ npxdna(void)
fpurstor(&npx_initialstate);
if (pcb->pcb_initial_npxcw != __INITIAL_NPXCW__)
fldcw(pcb->pcb_initial_npxcw);
- npxuserinited(curthread);
+ pcb->pcb_flags |= PCB_NPXINITDONE;
+ if (PCB_USER_FPU(pcb))
+ pcb->pcb_flags |= PCB_NPXUSERINITDONE;
} else {
/*
* The following fpurstor() may cause an IRQ13 when the
More information about the svn-src-head
mailing list