bool tick_nohz_tick_stopped(void)
 {
-       return __this_cpu_read(tick_cpu_sched.tick_stopped);
+       struct tick_sched *ts = this_cpu_ptr(&tick_cpu_sched);
+
+       return ts->tick_stopped;
 }
 
 bool tick_nohz_tick_stopped_cpu(int cpu)
 {
        struct tick_sched *ts = this_cpu_ptr(&tick_cpu_sched);
 
-       if (ts->inidle > 1) {
-               ts->inidle = 1;
+       if (ts->got_idle_tick) {
+               ts->got_idle_tick = 0;
                return true;
        }
        return false;
        ktime_t now = ktime_get();
 
        if (ts->inidle)
-               ts->inidle = 2;
+               ts->got_idle_tick = 1;
 
        dev->next_event = KTIME_MAX;
 
        ktime_t now = ktime_get();
 
        if (ts->inidle)
-               ts->inidle = 2;
+               ts->got_idle_tick = 1;
 
        tick_sched_do_timer(now);
 
 
  * @timer_expires:     Anticipated timer expiration time (in case sched tick is stopped)
  * @timer_expires_base:        Base time clock monotonic for @timer_expires
  * @do_timer_lst:      CPU was the last one doing do_timer before going idle
+ * @got_idle_tick:     Tick timer function has run with @inidle set
  */
 struct tick_sched {
        struct hrtimer                  sched_timer;
        unsigned long                   check_clocks;
        enum tick_nohz_mode             nohz_mode;
+
+       unsigned int                    inidle          : 1;
+       unsigned int                    tick_stopped    : 1;
+       unsigned int                    idle_active     : 1;
+       unsigned int                    do_timer_last   : 1;
+       unsigned int                    got_idle_tick   : 1;
+
        ktime_t                         last_tick;
        ktime_t                         next_tick;
-       int                             inidle;
-       int                             tick_stopped;
        unsigned long                   idle_jiffies;
        unsigned long                   idle_calls;
        unsigned long                   idle_sleeps;
-       int                             idle_active;
        ktime_t                         idle_entrytime;
        ktime_t                         idle_waketime;
        ktime_t                         idle_exittime;
        u64                             timer_expires_base;
        u64                             next_timer;
        ktime_t                         idle_expires;
-       int                             do_timer_last;
        atomic_t                        tick_dep_mask;
 };