| .. | .. |
|---|
| 5 | 5 | #include <linux/sched.h> |
|---|
| 6 | 6 | #include <linux/seq_file.h> |
|---|
| 7 | 7 | #include <linux/time.h> |
|---|
| 8 | +#include <linux/time_namespace.h> |
|---|
| 8 | 9 | #include <linux/kernel_stat.h> |
|---|
| 9 | 10 | |
|---|
| 10 | 11 | static int uptime_proc_show(struct seq_file *m, void *v) |
|---|
| 11 | 12 | { |
|---|
| 12 | 13 | struct timespec64 uptime; |
|---|
| 13 | 14 | struct timespec64 idle; |
|---|
| 14 | | - u64 nsec; |
|---|
| 15 | + u64 idle_nsec; |
|---|
| 15 | 16 | u32 rem; |
|---|
| 16 | 17 | int i; |
|---|
| 17 | 18 | |
|---|
| 18 | | - nsec = 0; |
|---|
| 19 | | - for_each_possible_cpu(i) |
|---|
| 20 | | - nsec += (__force u64) kcpustat_cpu(i).cpustat[CPUTIME_IDLE]; |
|---|
| 19 | + idle_nsec = 0; |
|---|
| 20 | + for_each_possible_cpu(i) { |
|---|
| 21 | + struct kernel_cpustat kcs; |
|---|
| 22 | + |
|---|
| 23 | + kcpustat_cpu_fetch(&kcs, i); |
|---|
| 24 | + idle_nsec += get_idle_time(&kcs, i); |
|---|
| 25 | + } |
|---|
| 21 | 26 | |
|---|
| 22 | 27 | ktime_get_boottime_ts64(&uptime); |
|---|
| 23 | | - idle.tv_sec = div_u64_rem(nsec, NSEC_PER_SEC, &rem); |
|---|
| 28 | + timens_add_boottime(&uptime); |
|---|
| 29 | + |
|---|
| 30 | + idle.tv_sec = div_u64_rem(idle_nsec, NSEC_PER_SEC, &rem); |
|---|
| 24 | 31 | idle.tv_nsec = rem; |
|---|
| 25 | 32 | seq_printf(m, "%lu.%02lu %lu.%02lu\n", |
|---|
| 26 | 33 | (unsigned long) uptime.tv_sec, |
|---|