From cc12fc21ea0e9e4af159d57a9799e312f230a2ee Mon Sep 17 00:00:00 2001 From: yu liu Date: Tue, 14 Jun 2011 18:34:25 -0500 Subject: [PATCH] --- yaml --- r: 258047 b: refs/heads/master c: 685659ee70db0bac47ffd619c726cf600e504fd7 h: refs/heads/master i: 258045: a94c60eba1f2af0e32331bbc6759cd136f93fa1a 258043: f3d6c1a71d53eccb74b7e5c3aff968ab9ac80fd6 258039: 28c5c3fe4c3d0ed563efb57573788a5b21efa15b 258031: f692a3cdebc217c3d2c38faada9444dcf0416731 258015: e9e8c4baf7f74e0ab494a28c389991e80244c571 257983: 2f479e27ad323de2a31ac9cffbed287351b6ec37 257919: c7e77cf96312e9e57c781cb09ad6113cea4de5ab 257791: b37c3852065c53ca231a55384004481c90f90b4f 257535: eb967fc9663c1f6baccacbdb6fdd2a5a642cbc2f 257023: a14972c6a80fad8457d4330afef6549a49734921 255999: 8b6a99da2af5793bce7e358301aef57a9138a732 253951: 4e3be88dcd25217b81921c50ca0fde15b74eef3d v: v3 --- [refs] | 2 +- trunk/arch/powerpc/kernel/head_fsl_booke.S | 2 -- trunk/arch/powerpc/kernel/process.c | 1 + trunk/arch/powerpc/kernel/traps.c | 5 +---- 4 files changed, 3 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index acc01ff0dcb9..d111a3b56dca 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: a22a2daccfa3ade5cdd9ef1e8a05cf1e6ffca42b +refs/heads/master: 685659ee70db0bac47ffd619c726cf600e504fd7 diff --git a/trunk/arch/powerpc/kernel/head_fsl_booke.S b/trunk/arch/powerpc/kernel/head_fsl_booke.S index 5ecf54cfa7d4..aede4f87b682 100644 --- a/trunk/arch/powerpc/kernel/head_fsl_booke.S +++ b/trunk/arch/powerpc/kernel/head_fsl_booke.S @@ -792,8 +792,6 @@ _GLOBAL(giveup_spe) evmwumiaa evr6, evr6, evr6 /* evr6 <- ACC = 0 * 0 + ACC */ li r4,THREAD_ACC evstddx evr6, r4, r3 /* save off accumulator */ - mfspr r6,SPRN_SPEFSCR - stw r6,THREAD_SPEFSCR(r3) /* save spefscr register value */ beq 1f lwz r4,_MSR-STACK_FRAME_OVERHEAD(r5) lis r3,MSR_SPE@h diff --git a/trunk/arch/powerpc/kernel/process.c b/trunk/arch/powerpc/kernel/process.c index 91e52df3d81d..60ac2a9251db 100644 --- a/trunk/arch/powerpc/kernel/process.c +++ b/trunk/arch/powerpc/kernel/process.c @@ -213,6 +213,7 @@ void flush_spe_to_thread(struct task_struct *tsk) #ifdef CONFIG_SMP BUG_ON(tsk != current); #endif + tsk->thread.spefscr = mfspr(SPRN_SPEFSCR); giveup_spe(tsk); } preempt_enable(); diff --git a/trunk/arch/powerpc/kernel/traps.c b/trunk/arch/powerpc/kernel/traps.c index 1a0141426cda..f19d9777d3c1 100644 --- a/trunk/arch/powerpc/kernel/traps.c +++ b/trunk/arch/powerpc/kernel/traps.c @@ -1387,10 +1387,7 @@ void SPEFloatingPointException(struct pt_regs *regs) int code = 0; int err; - preempt_disable(); - if (regs->msr & MSR_SPE) - giveup_spe(current); - preempt_enable(); + flush_spe_to_thread(current); spefscr = current->thread.spefscr; fpexc_mode = current->thread.fpexc_mode;