]> Zhao Yanbai Git Server - minix.git/commit
kernel fpu context switching: fix race condition
authorBen Gras <ben@minix3.org>
Thu, 3 Jun 2010 11:32:22 +0000 (11:32 +0000)
committerBen Gras <ben@minix3.org>
Thu, 3 Jun 2010 11:32:22 +0000 (11:32 +0000)
commit2f892aca9151eddc45d89da470685bc4413d6be9
treeb5a239be10b968cf65ffa123e17bab4bc2f0cca6
parent332842295a2fa1f1e6fdde6e6a4eaf359922da84
kernel fpu context switching: fix race condition

There seems to have been a broken assumption in the fpu context
restoring code.  It restores the context of the running process, without
guarantee that the current process is the one that will be scheduled.
This caused fpu saving for a different process to be triggered without
fpu hardware being enabled, causing an fpu exception in the kernel. This
practically only shows up with DEBUG_RACE on. Fix my thruby+me.

The fix
 . is to only set the fpu-in-use-by-this-process flag in the
   exception handler, and then take care of fpu restoring when
   actually returning to userspace

And the patch
 . translates fpu saving and restoring to c in arch_system.c,
   getting rid of a juicy chunk of assembly
 . makes osfxsr_feature private to arch_system.c
 . removes most of the arch dependent code from do_sigsend
kernel/arch/i386/arch_system.c
kernel/arch/i386/klib.S
kernel/arch/i386/mpx.S
kernel/arch/i386/proto.h
kernel/arch/i386/sconst.h
kernel/glo.h
kernel/proc.c
kernel/proc.h
kernel/proto.h
kernel/system/do_sigsend.c