On Mon, Nov 22, 2010 at 6:51 PM, Kevin Hilman <khilman@xxxxxxxxxxxxxxxxxxx> wrote: > Jean Pihet <jean.pihet@xxxxxxxxxxxxxx> writes: > >> Some bad interaction between the idle and the suspend paths has been >> noticed: the idle code is called during the suspend enter and exit >> sequences. This could cause corruption or lock-up of resources. > >> The solution is to move the call to disable_hlt at the very beginning >> of the suspend sequence (in omap3_pm_begin instead of omap3_pm_prepare), >> and the call to enable_hlt at the very end of the suspend sequence >> (in omap3_pm_end instead of omap3_pm_finish). >> >> Tested with RET and OFF on Beagle and OMAP3EVM. > > I think the description could have a little more detail. Something like: > > Idle path should be disabled during the entire suspend/resume sequence. > Currently it is disabled in ->prepare() and re-enabled in ->finish(), > but the suspend sequence starts with ->begin() and ends with ->end(), > leaving windows where the suspend/resume sequence is still underway and > idle code could execute. > > To fix, move idle disable and enable into ->begin() and ->end() > respectively to ensure idle path is disabled for the entire > suspend/resume sequence. > Ok thx for the suggestion. >> >> @@ -576,12 +575,12 @@ static int omap3_pm_enter(suspend_state_t unused) >> >> static void omap3_pm_finish(void) >> { >> - enable_hlt(); >> } > > Might as well remove these empty functions now. > >> /* Hooks to enable / disable UART interrupts during suspend */ >> static int omap3_pm_begin(suspend_state_t state) >> { >> + disable_hlt(); >> suspend_state = state; >> omap_uart_enable_irqs(0); >> return 0; >> @@ -591,6 +590,7 @@ static void omap3_pm_end(void) >> { >> suspend_state = PM_SUSPEND_ON; >> omap_uart_enable_irqs(1); >> + enable_hlt(); >> return; >> } > > Kevin > Ok resent! Thx, Jean -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html