set_current_tf() no longer sets the local *tf var
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 28 Sep 2011 00:44:24 +0000 (17:44 -0700)
committerKevin Klues <klueska@cs.berkeley.edu>
Thu, 3 Nov 2011 00:36:07 +0000 (17:36 -0700)
commitc8c00e4f664168b6bdcefdf8bd5bf31573afcaae
treedc0e898bc4317b3521902187ebc4a1b967afb592
parent36cf731cafad7d48a3615d1d53e53fab408cf6fb
set_current_tf() no longer sets the local *tf var

Meaning that we only copy out the *tf and set cur_tf, but do not change
tf in the calling function.  The contents are the same, but if something
happens that changes cur_tf's contents, you're still using the same one
you came in on (this will matter for a future commit).

The old style had a bug too.  If a kthread migrated, when it returned up
its stack and it looked at *tf, it would point to the cur_tf of possibly
another core (which is not what we want).  We want to point to the
original TF we came in on, so we can decide if we should return to the
kernel or not (and if we do, we just pop that TF).

Sparc and RISCV probably need a little work.  I put warns in there to
catch IRQs being enabled.  set_current_tf() probably needs to be called
more often too (like when handling other traps).
kern/arch/i686/trap.c
kern/arch/riscv/trap.c
kern/arch/sparc/trap.c