Messages in this thread Patch in this message | | | Date | Wed, 24 Mar 2004 22:53:33 +1100 | From | Paul Mackerras <> | Subject | [PATCH] fix ppc32 sys_swapcontext |
| |
The patch below fixes a bug in the swapcontext system call on ppc32. On ppc32, the system call entry only saves the volatile registers, except in the case of a few system calls (e.g. fork) which need all the registers saved. Swapcontext needs all the registers but we weren't saving them all. This patch fixes that.
Please apply.
Thanks, Paul.
diff -urN pmac-2.5/arch/ppc/kernel/entry.S g5-ppc64/arch/ppc/kernel/entry.S --- pmac-2.5/arch/ppc/kernel/entry.S 2004-02-16 08:19:48.000000000 +1100 +++ g5-ppc64/arch/ppc/kernel/entry.S 2004-03-24 09:47:12.000000000 +1100 @@ -414,6 +414,14 @@ stw r0,TRAP(r1) /* register set saved */ b sys_clone + .globl ppc_swapcontext +ppc_swapcontext: + SAVE_NVGPRS(r1) + lwz r0,TRAP(r1) + rlwinm r0,r0,0,0,30 /* clear LSB to indicate full */ + stw r0,TRAP(r1) /* register set saved */ + b sys_swapcontext + /* * This routine switches between two different tasks. The process * state of one is saved on its kernel stack. Then the state diff -urN pmac-2.5/arch/ppc/kernel/misc.S g5-ppc64/arch/ppc/kernel/misc.S --- pmac-2.5/arch/ppc/kernel/misc.S 2004-03-16 20:11:56.000000000 +1100 +++ g5-ppc64/arch/ppc/kernel/misc.S 2004-03-24 09:46:40.000000000 +1100 @@ -1363,7 +1363,7 @@ .long sys_clock_gettime .long sys_clock_getres .long sys_clock_nanosleep - .long sys_swapcontext + .long ppc_swapcontext .long sys_tgkill /* 250 */ .long sys_utimes .long sys_statfs64 - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |