vkernel - Fix FP corruption from preemptive thread switch
* Recent work on the vkernel enabled preemptive interrupt thread switching.
This introduced a race where the floating point state could change
out from under the vkernel's go_user() function, causing the FP state
in the virtual user process to become corrupt.
* Fixed by introducing a critical section which essentially defers any
preemptive thread switches inside go_user().
Reported-by: YONETANI Tomokazu <qhwt+dfly@les.ath.cx>
Test-cases-by: YONETANI Tomokazu <qhwt+dfly@les.ath.cx>