From d623c831386eadb04bf7eb005edcacc7bcc0a50f Mon Sep 17 00:00:00 2001 From: Priyanka Jain Date: Wed, 22 May 2013 14:56:09 +0530 Subject: powerpc/32bit,PREEMPT:Load TI_FLAGS to check NEED_RESCHED Add instruction to load TI_FLAGS in 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 leading to increase in latency issue. Signed-off-by: Priyanka Jain Change-Id: Ibc2c94ba9031488fc1e8e2ceae864dcea171ceae Reviewed-on: http://git.am.freescale.net:8181/2645 Tested-by: Review Code-CDREVIEW Reviewed-by: Wood Scott-B07421 Reviewed-by: Fleming Andrew-AFLEMING diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S index 95b884e..77b52c7 100644 --- a/arch/powerpc/kernel/entry_32.S +++ b/arch/powerpc/kernel/entry_32.S @@ -889,6 +889,7 @@ resume_kernel: #ifdef CONFIG_PREEMPT /* check current_thread_info->preempt_count */ lwz r0,TI_PREEMPT(r9) + lwz r8,TI_FLAGS(r9) cmpwi 0,r0,0 /* if non-zero, just restore regs and return */ bne restore andi. r8,r8,_TIF_NEED_RESCHED -- cgit v0.10.2