svn commit: r271924 - head/sys/amd64/amd64
Konstantin Belousov
kib at FreeBSD.org
Sun Sep 21 09:06:51 UTC 2014
Author: kib
Date: Sun Sep 21 09:06:50 2014
New Revision: 271924
URL: http://svnweb.freebsd.org/changeset/base/271924
Log:
Update and clarify comments. Remove the useless counter for impossible, but
seen in wild situation (on buggy hypervisors).
In collaboration with: bde
MFC after: 1 week
Modified:
head/sys/amd64/amd64/fpu.c
head/sys/amd64/amd64/trap.c
Modified: head/sys/amd64/amd64/fpu.c
==============================================================================
--- head/sys/amd64/amd64/fpu.c Sun Sep 21 07:16:51 2014 (r271923)
+++ head/sys/amd64/amd64/fpu.c Sun Sep 21 09:06:50 2014 (r271924)
@@ -602,29 +602,30 @@ fputrap_sse(void)
return (fpetable[(mxcsr & (~mxcsr >> 7)) & 0x3f]);
}
-static int err_count = 0;
-
/*
* Device Not Available (DNA, #NM) exception handler.
*
* It would be better to switch FP context here (if curthread !=
* fpcurthread) and not necessarily for every context switch, but it
* is too hard to access foreign pcb's.
- *
- * The handler is entered with interrupts enabled, which allows the
- * context switch to happen before critical enter() is executed, and
- * causes restoration of FPU context on CPU other than that caused
- * DNA. It is fine, since context switch started emulation on the
- * current CPU as well.
*/
void
fpudna(void)
{
+ /*
+ * This handler is entered with interrupts enabled, so context
+ * switches may occur before critical_enter() is executed. If
+ * a context switch occurs, then when we regain control, our
+ * state will have been completely restored. The CPU may
+ * change underneath us, but the only part of our context that
+ * lives in the CPU is CR0.TS and that will be "restored" by
+ * setting it on the new CPU.
+ */
critical_enter();
+
if (PCPU_GET(fpcurthread) == curthread) {
- printf("fpudna: fpcurthread == curthread %d times\n",
- ++err_count);
+ printf("fpudna: fpcurthread == curthread\n");
stop_emulating();
critical_exit();
return;
Modified: head/sys/amd64/amd64/trap.c
==============================================================================
--- head/sys/amd64/amd64/trap.c Sun Sep 21 07:16:51 2014 (r271923)
+++ head/sys/amd64/amd64/trap.c Sun Sep 21 09:06:50 2014 (r271924)
@@ -436,8 +436,8 @@ trap(struct trapframe *frame)
case T_XMMFLT: /* SIMD floating-point exception */
case T_FPOPFLT: /* FPU operand fetch fault */
/*
- * XXXKIB for now disable any FPU traps in kernel
- * handler registration seems to be overkill
+ * For now, supporting kernel handler
+ * registration for FPU traps is overkill.
*/
trap_fatal(frame, 0);
goto out;
More information about the svn-src-head
mailing list