While working with cpuidle, I have come across these problems. I am also working on the solutions, but would be good to hear more thoughts. 1) The flag 'enable_dyn_sleep' is honoured only in omap3_idle_bm_check() but in the C1 state, omap3_enter_idle() is invoked directly. So, the system can transition to deeper idle state(s) Same is the case with 'sleep_block'. Possible Solutions: a) Call omap3_can_sleep() in omap3_enter_idle(). This makes omap3_idle_bm_check() redundant; and can be removed. b) Make single entry point for all idle states But would be an overkill for C1 state. c) Change omap3_can_sleep() to check for omap_uart_can_sleep() and omap3_fclks_active() only. Move check for 'enable_dyn_sleep' and 'sleep_block' into omap3_enter_idle() I believe (c) would be the most optimal. 2) When 'enable_off_mode' is 0, and (mpu_state < PWRDM_POWER_RET) the local variables mpu_state and core_state are modified; but the usage count for the original state selected by the governor are updated. Solution: Recalculate the idle state and update the dev->last_state (for cpuidle driver) to ensure that usage statistics for the actual state are entered. Only problem is that latency corresponding to original state would have been used by the dynamic tick functions. If things go well, I will be able to submit patches on top of pm branch by tomorrow... Best regards, Sanjeev -- 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