powerpc: Keep thread.dscr and thread.dscr_inherit in sync
authorAnton Blanchard <anton@samba.org>
Mon, 3 Sep 2012 16:48:46 +0000 (16:48 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 14 Sep 2012 17:00:22 +0000 (10:00 -0700)
commit59d0622a07571c6344f0e3c71e7a1a71eb8db9e9
treeb7e27ef692a8a19da9d42d60cd4301394fc8c3bb
parent652f43702b224351b790fd9182744d7946d4cdf6
powerpc: Keep thread.dscr and thread.dscr_inherit in sync

commit 00ca0de02f80924dfff6b4f630e1dff3db005e35 upstream.

When we update the DSCR either via emulation of mtspr(DSCR) or via
a change to dscr_default in sysfs we don't update thread.dscr.
We will eventually update it at context switch time but there is
a period where thread.dscr is incorrect.

If we fork at this point we will copy the old value of thread.dscr
into the child. To avoid this, always keep thread.dscr in sync with
reality.

This issue was found with the following testcase:

http://ozlabs.org/~anton/junkcode/dscr_inherit_test.c

Signed-off-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/powerpc/kernel/sysfs.c
arch/powerpc/kernel/traps.c