.. | .. |
---|
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, |
---|