#ifdef arch_idle_time
 
-static u64 get_idle_time(struct kernel_cpustat *kcs, int cpu)
+u64 get_idle_time(struct kernel_cpustat *kcs, int cpu)
 {
        u64 idle;
 
 
 #else
 
-static u64 get_idle_time(struct kernel_cpustat *kcs, int cpu)
+u64 get_idle_time(struct kernel_cpustat *kcs, int cpu)
 {
        u64 idle, idle_usecs = -1ULL;
 
 
 {
        struct timespec64 uptime;
        struct timespec64 idle;
-       u64 nsec;
+       u64 idle_nsec;
        u32 rem;
        int i;
 
-       nsec = 0;
-       for_each_possible_cpu(i)
-               nsec += (__force u64) kcpustat_cpu(i).cpustat[CPUTIME_IDLE];
+       idle_nsec = 0;
+       for_each_possible_cpu(i) {
+               struct kernel_cpustat kcs;
+
+               kcpustat_cpu_fetch(&kcs, i);
+               idle_nsec += get_idle_time(&kcs, i);
+       }
 
        ktime_get_boottime_ts64(&uptime);
        timens_add_boottime(&uptime);
 
-       idle.tv_sec = div_u64_rem(nsec, NSEC_PER_SEC, &rem);
+       idle.tv_sec = div_u64_rem(idle_nsec, NSEC_PER_SEC, &rem);
        idle.tv_nsec = rem;
        seq_printf(m, "%lu.%02lu %lu.%02lu\n",
                        (unsigned long) uptime.tv_sec,
 
                                      enum cpu_usage_stat);
 extern void account_steal_time(u64);
 extern void account_idle_time(u64);
+extern u64 get_idle_time(struct kernel_cpustat *kcs, int cpu);
 
 #ifdef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE
 static inline void account_process_tick(struct task_struct *tsk, int user)