diff --git a/drivers/cpuidle/poll_state.c b/drivers/cpuidle/poll_state.c
index 1a00353a5c4b1a3ece0a46abf3d17476f3809502..e1fb542a39ae947c68934d46fd55488649c9bcd0 100644
--- a/drivers/cpuidle/poll_state.c
+++ b/drivers/cpuidle/poll_state.c
@@ -20,9 +20,19 @@ static int __cpuidle poll_idle(struct cpuidle_device *dev,
local_irq_enable();
if (!current_set_polling_and_test()) {
- u64 limit = (u64)drv->states[1].target_residency
- * NSEC_PER_USEC;
unsigned int loop_count = 0;
+ u64 limit = TICK_USEC;
+ int i;
+
+ for (i = 1; i < drv->state_count; i++) {
+ if (drv->states[i].disabled
+ || dev->states_usage[i].disable)
+ continue;
+
+ limit = (u64)drv->states[i].target_residency
+ * NSEC_PER_USEC;
+ break;
+ }
while (!need_resched()) {
cpu_relax();