diff -NurpP --minimal linux-3.2.15-vs2.3.2.8/fs/proc/stat.c linux-3.2.15-vs2.3.2.9/fs/proc/stat.c --- linux-3.2.15-vs2.3.2.8/fs/proc/stat.c 2012-01-09 16:19:31.000000000 +0100 +++ linux-3.2.15-vs2.3.2.9/fs/proc/stat.c 2012-04-24 01:29:45.000000000 +0200 @@ -9,6 +9,7 @@ #include #include #include +#include #include #include @@ -66,6 +67,10 @@ static int show_stat(struct seq_file *p, irq = softirq = steal = cputime64_zero; guest = guest_nice = cputime64_zero; getboottime(&boottime); + + if (vx_flags(VXF_VIRT_UPTIME, 0)) + vx_vsi_boottime(&boottime); + jif = boottime.tv_sec; for_each_possible_cpu(i) { diff -NurpP --minimal linux-3.2.15-vs2.3.2.8/include/linux/vserver/cvirt.h linux-3.2.15-vs2.3.2.9/include/linux/vserver/cvirt.h --- linux-3.2.15-vs2.3.2.8/include/linux/vserver/cvirt.h 2011-12-05 19:33:02.000000000 +0100 +++ linux-3.2.15-vs2.3.2.9/include/linux/vserver/cvirt.h 2012-04-24 00:44:36.000000000 +0200 @@ -6,6 +6,8 @@ struct timespec; +void vx_vsi_boottime(struct timespec *); + void vx_vsi_uptime(struct timespec *, struct timespec *); diff -NurpP --minimal linux-3.2.15-vs2.3.2.8/kernel/vserver/cvirt.c linux-3.2.15-vs2.3.2.9/kernel/vserver/cvirt.c --- linux-3.2.15-vs2.3.2.8/kernel/vserver/cvirt.c 2011-12-05 19:33:02.000000000 +0100 +++ linux-3.2.15-vs2.3.2.9/kernel/vserver/cvirt.c 2012-04-24 00:43:39.000000000 +0200 @@ -20,6 +20,16 @@ #include +void vx_vsi_boottime(struct timespec *boottime) +{ + struct vx_info *vxi = current_vx_info(); + + set_normalized_timespec(boottime, + boottime->tv_sec + vxi->cvirt.bias_uptime.tv_sec, + boottime->tv_nsec + vxi->cvirt.bias_uptime.tv_nsec); + return; +} + void vx_vsi_uptime(struct timespec *uptime, struct timespec *idle) { struct vx_info *vxi = current_vx_info();