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
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to