Now that we have a vtime safe kcpustat accessor, use it to fix frozen
kcpustat values on nohz_full CPUs.

Reported-by: Yauheni Kaliuta <yauheni.kali...@redhat.com>
Signed-off-by: Frederic Weisbecker <frede...@kernel.org>
Cc: Yauheni Kaliuta <yauheni.kali...@redhat.com>
Cc: Thomas Gleixner <t...@linutronix.de>
Cc: Rik van Riel <r...@redhat.com>
Cc: Peter Zijlstra <pet...@infradead.org>
Cc: Wanpeng Li <wanpen...@tencent.com>
Cc: Ingo Molnar <mi...@kernel.org>
---
 drivers/macintosh/rack-meter.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/drivers/macintosh/rack-meter.c b/drivers/macintosh/rack-meter.c
index 1f29d24..1936e0ec 100644
--- a/drivers/macintosh/rack-meter.c
+++ b/drivers/macintosh/rack-meter.c
@@ -83,13 +83,19 @@ static int rackmeter_ignore_nice;
  */
 static inline u64 get_cpu_idle_time(unsigned int cpu)
 {
+       struct kernel_cpustat *kcpustat = &kcpustat_cpu(cpu);
        u64 retval;
 
-       retval = kcpustat_cpu(cpu).cpustat[CPUTIME_IDLE] +
-                kcpustat_cpu(cpu).cpustat[CPUTIME_IOWAIT];
+       retval = kcpustat->cpustat[CPUTIME_IDLE] +
+                kcpustat->cpustat[CPUTIME_IOWAIT];
 
-       if (rackmeter_ignore_nice)
-               retval += kcpustat_cpu(cpu).cpustat[CPUTIME_NICE];
+       if (rackmeter_ignore_nice) {
+               u64 user, nice, sys, guest, guest_nice;
+
+               kcpustat_cputime(kcpustat, cpu, &user, &nice, &sys,
+                                &guest, &guest_nice);
+               retval += nice;
+       }
 
        return retval;
 }
-- 
2.7.4

Reply via email to