From: Konstantin Khorenko <khore...@virtuozzo.com> The patch is based on following vz7 commits: a58fb58bff1c ("Use ve init task's css instead of opening cgroup via vfs") 75fc174adc36 ("sched: Port cpustat related patches")
Signed-off-by: Konstantin Khorenko <khore...@virtuozzo.com> Reviewed-by: Andrey Ryabinin <aryabi...@virtuozzo.com> (cherry-picked from vz8 commit 2f58607c7057 ("ve/time/stat: idle time virtualization in /proc/loadavg")) Signed-off-by: Nikita Yushchenko <nikita.yushche...@virtuozzo.com> --- fs/proc/uptime.c | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/fs/proc/uptime.c b/fs/proc/uptime.c index 1e51f5598586..10df5f3a1c21 100644 --- a/fs/proc/uptime.c +++ b/fs/proc/uptime.c @@ -7,11 +7,10 @@ #include <linux/time.h> #include <linux/time_namespace.h> #include <linux/kernel_stat.h> +#include <linux/ve.h> -static int uptime_proc_show(struct seq_file *m, void *v) +static inline void get_ve0_idle(struct timespec64 *idle) { - struct timespec64 uptime; - struct timespec64 idle; u64 nsec; u32 rem; int i; @@ -20,11 +19,32 @@ static int uptime_proc_show(struct seq_file *m, void *v) for_each_possible_cpu(i) nsec += (__force u64) kcpustat_cpu(i).cpustat[CPUTIME_IDLE]; + idle->tv_sec = div_u64_rem(nsec, NSEC_PER_SEC, &rem); + idle->tv_nsec = rem; +} + +static inline void get_veX_idle(struct ve_struct *ve, struct timespec64 *idle) +{ + struct kernel_cpustat kstat; + + ve_get_cpu_stat(ve, &kstat); + *idle = ns_to_timespec64(kstat.cpustat[CPUTIME_IDLE]); +} + +static int uptime_proc_show(struct seq_file *m, void *v) +{ + struct timespec64 uptime; + struct timespec64 idle; + struct ve_struct *ve = get_exec_env(); + + if (ve_is_super(ve)) + get_ve0_idle(&idle); + else + get_veX_idle(ve, &idle); + ktime_get_boottime_ts64(&uptime); timens_add_boottime(&uptime); - idle.tv_sec = div_u64_rem(nsec, NSEC_PER_SEC, &rem); - idle.tv_nsec = rem; seq_printf(m, "%lu.%02lu %lu.%02lu\n", (unsigned long) uptime.tv_sec, (uptime.tv_nsec / (NSEC_PER_SEC / 100)), -- 2.30.2 _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel