| From d250f8f620861291ac23263c1b0159e0db51afba Mon Sep 17 00:00:00 2001 |
| From: Priyanka Jain <Priyanka.Jain@freescale.com> |
| Date: Mon, 27 May 2013 13:00:17 +0530 |
| Subject: [PATCH] powerpc/32bit:Store temporary result in r0 instead of r8 |
| |
| While returning from exception handling in case of PREEMPT enabled, |
| _TIF_NEED_RESCHED bit is checked in TI_FLAGS (thread_info flag) of current |
| task. Only if this bit is set, it should continue with the process of |
| calling preempt_schedule_irq() to schedule highest priority task if |
| available. |
| |
| Current code assumes that r8 contains TI_FLAGS and check this for |
| _TIF_NEED_RESCHED, but as r8 is modified in the code which executes before |
| this check, r8 no longer contains the expected TI_FLAGS information. |
| |
| As a result check for comparison with _TIF_NEED_RESCHED was failing even if |
| NEED_RESCHED bit is set in the current thread_info flag. Due to this, |
| preempt_schedule_irq() and in turn scheduler was not getting called even if |
| highest priority task is ready for execution. |
| |
| So, store temporary results in r0 instead of r8 to prevent r8 from getting |
| modified as subsequent code is dependent on its value. |
| |
| Signed-off-by: Priyanka Jain <Priyanka.Jain@freescale.com> |
| Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> |
| --- |
| arch/powerpc/kernel/entry_32.S | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S |
| index 95b884e..086dce7 100644 |
| --- a/arch/powerpc/kernel/entry_32.S |
| +++ b/arch/powerpc/kernel/entry_32.S |
| @@ -851,7 +851,7 @@ user_exc_return: /* r10 contains MSR_KERNEL here */ |
| /* check current_thread_info, _TIF_EMULATE_STACK_STORE */ |
| CURRENT_THREAD_INFO(r9, r1) |
| lwz r8,TI_FLAGS(r9) |
| - andis. r8,r8,_TIF_EMULATE_STACK_STORE@h |
| + andis. r0,r8,_TIF_EMULATE_STACK_STORE@h |
| beq+ 1f |
| |
| addi r8,r1,INT_FRAME_SIZE /* Get the kprobed function entry */ |
| -- |
| 1.7.10.4 |
| |