cpuidle: Set polling in poll_idle
[firefly-linux-kernel-4.4.55.git] / drivers / cpuidle / driver.c
index 136d6a283e0a3818846eab4e78e7e9245b7d6f07..9634f20e392611b32349aaa348aa3980f2344ecd 100644 (file)
@@ -187,8 +187,11 @@ static int poll_idle(struct cpuidle_device *dev,
 
        t1 = ktime_get();
        local_irq_enable();
-       while (!need_resched())
-               cpu_relax();
+       if (!current_set_polling_and_test()) {
+               while (!need_resched())
+                       cpu_relax();
+       }
+       current_clr_polling();
 
        t2 = ktime_get();
        diff = ktime_to_us(ktime_sub(t2, t1));