parisc: Avoid interruption in critical region in entry.S
authorJohn David Anglin <dave@hiauly1.hia.nrc.ca>
Sun, 11 Apr 2010 17:12:56 +0000 (17:12 +0000)
committerKyle McMartin <kyle@dreadnought.i.jkkm.org>
Sun, 30 May 2010 09:44:36 +0000 (05:44 -0400)
Signed-off-by: John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
arch/parisc/kernel/entry.S

index 3a44f7f..ba86f61 100644 (file)
@@ -2076,9 +2076,10 @@ syscall_restore:
        LDREG   TASK_PT_GR31(%r1),%r31     /* restore syscall rp */
 
        /* NOTE: We use rsm/ssm pair to make this operation atomic */
+       LDREG   TASK_PT_GR30(%r1),%r1              /* Get user sp */
        rsm     PSW_SM_I, %r0
-       LDREG   TASK_PT_GR30(%r1),%r30             /* restore user sp */
-       mfsp    %sr3,%r1                           /* Get users space id */
+       copy    %r1,%r30                           /* Restore user sp */
+       mfsp    %sr3,%r1                           /* Get user space id */
        mtsp    %r1,%sr7                           /* Restore sr7 */
        ssm     PSW_SM_I, %r0