ve_struct.{start_time,real_start_time} are u64 now, change the code
correspondingly.

Drop duplicated fields start_timespec/real_start_timespec in ve_struct.

Fixes: f2716576136d ("ve/time: Use ve_relative_clock in times() syscall
and /proc/[pid]/stat")

Signed-off-by: Konstantin Khorenko <khore...@virtuozzo.com>
---
 fs/proc/array.c    |  7 ++-----
 include/linux/ve.h |  4 ----
 kernel/sys.c       | 19 ++++++++-----------
 3 files changed, 10 insertions(+), 20 deletions(-)

diff --git a/fs/proc/array.c b/fs/proc/array.c
index e85d0caa6efa..e9b6e403858a 100644
--- a/fs/proc/array.c
+++ b/fs/proc/array.c
@@ -546,11 +546,8 @@ static int do_task_stat(struct seq_file *m, struct 
pid_namespace *ns,
 
 #ifdef CONFIG_VE
        if (!is_super) {
-               struct timespec *ve_start_ts =
-                               &get_exec_env()->real_start_timespec;
-               start_time -=
-                       (unsigned long long)ve_start_ts->tv_sec * NSEC_PER_SEC
-                               + ve_start_ts->tv_nsec;
+               u64 offset = get_exec_env()->real_start_time;
+               start_time -= (unsigned long long)offset;
        }
        /* tasks inside a CT can have negative start time e.g. if the CT was
         * migrated from another hw node, in which case we will report 0 in
diff --git a/include/linux/ve.h b/include/linux/ve.h
index b659e779cb49..0db98e8e08c1 100644
--- a/include/linux/ve.h
+++ b/include/linux/ve.h
@@ -52,10 +52,6 @@ struct ve_struct {
        struct net_device       *venet_dev;
 #endif
 
-/* per VE CPU stats*/
-       struct timespec         start_timespec;         /* monotonic time */
-       struct timespec         real_start_timespec;    /* boot based time */
-
        /* see vzcalluser.h for VE_FEATURE_XXX definitions */
        __u64                   features;
 
diff --git a/kernel/sys.c b/kernel/sys.c
index 2644090f8d4b..df02329b0e5c 100644
--- a/kernel/sys.c
+++ b/kernel/sys.c
@@ -957,16 +957,13 @@ static void do_sys_times(struct tms *tms)
 }
 
 #ifdef CONFIG_VE
-unsigned long long ve_relative_clock(struct timespec * ts)
+static u64 ve_relative_clock(u64 time)
 {
-       unsigned long long offset = 0;
+       u64 offset = 0;
+       struct ve_struct *ve = get_exec_env();
 
-       if (ts->tv_sec > get_exec_env()->start_timespec.tv_sec ||
-           (ts->tv_sec == get_exec_env()->start_timespec.tv_sec &&
-            ts->tv_nsec >= get_exec_env()->start_timespec.tv_nsec))
-               offset = (unsigned long long)(ts->tv_sec -
-                       get_exec_env()->start_timespec.tv_sec) * NSEC_PER_SEC
-                       + ts->tv_nsec - get_exec_env()->start_timespec.tv_nsec;
+       if (time > ve->start_time)
+               offset = time - ve->start_time;
        return nsec_to_clock_t(offset);
 }
 #endif
@@ -974,7 +971,7 @@ unsigned long long ve_relative_clock(struct timespec * ts)
 SYSCALL_DEFINE1(times, struct tms __user *, tbuf)
 {
 #ifdef CONFIG_VE
-       struct timespec now;
+       u64 now;
 #endif
 
        if (tbuf) {
@@ -989,9 +986,9 @@ SYSCALL_DEFINE1(times, struct tms __user *, tbuf)
        return (long) jiffies_64_to_clock_t(get_jiffies_64());
 #else
        /* Compare to calculation in fs/proc/array.c */
-       ktime_get_ts(&now);
+       now = ktime_get_ns();
        force_successful_syscall_return();
-       return ve_relative_clock(&now);
+       return (long) ve_relative_clock(now);
 #endif
 }
 
-- 
2.28.0

_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to