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();