Hi,

i've adapted the 1.9.3-rc3 patch to the changed process start time
accounting in 2.6.9-final. The attached patch is against a 2.6.9-final
source tree with the 2.6.9-rc4-vs1.9.3-rc3 patch applied using the -F0
parameter (thanks Sam! :).

Bjoern
diff -NurpP --minimal linux-2.6.9-final-bertl/fs/proc/array.c 
linux-2.6.9-final-vs1.9.3-rc3/fs/proc/array.c
--- linux-2.6.9-final-bertl/fs/proc/array.c     2004-10-18 23:41:51.000000000 +0200
+++ linux-2.6.9-final-vs1.9.3-rc3/fs/proc/array.c       2004-10-18 05:24:24.000000000 
+0200
@@ -351,7 +351,7 @@ int proc_pid_stat(struct task_struct *ta
 {
        unsigned long vsize, eip, esp, wchan;
        long priority, nice;
-       unsigned long long bias_jiffies;
+       unsigned long long bias_uptime = 0;
        int tty_pgrp = -1, tty_nr = 0;
        sigset_t sigign, sigcatch;
        char state;
@@ -396,12 +396,9 @@ int proc_pid_stat(struct task_struct *ta
                cutime = task->signal->cutime;
                cstime = task->signal->cstime;
        }
-       bias_jiffies = INITIAL_JIFFIES;
        if (task_vx_flags(task, VXF_VIRT_UPTIME, 0)) {
-               bias_jiffies = task->vx_info->cvirt.bias_jiffies;
-               /* hmm, do we need that? */
-               if (bias_jiffies > task->start_time)
-                       bias_jiffies = task->start_time;
+               bias_uptime = task->vx_info->cvirt.bias_uptime.tv_sec * NSEC_PER_SEC 
+                       + task->vx_info->cvirt.bias_uptime.tv_nsec;
        }
        read_unlock(&tasklist_lock);
 
@@ -411,7 +408,10 @@ int proc_pid_stat(struct task_struct *ta
        nice = task_nice(task);
 
        read_lock(&tasklist_lock);
-       ppid = task->pid ? task->real_parent->pid : 0;
+       pid = vx_info_map_pid(task->vx_info, task->pid);
+       ppid = (!(pid > 1)) ? 0 :
+               vx_info_map_pid(task->vx_info, task->real_parent->pid);
+       pgid = vx_info_map_pid(task->vx_info, pgid);
        read_unlock(&tasklist_lock);
 
        /* Temporary variable needed for gcc-2.96 */
@@ -419,12 +419,12 @@ int proc_pid_stat(struct task_struct *ta
        start_time = (unsigned long long)task->start_time.tv_sec * NSEC_PER_SEC
                                + task->start_time.tv_nsec;
        /* convert nsec -> ticks */
-       start_time = nsec_to_clock_t(start_time);
+       start_time = nsec_to_clock_t(start_time - bias_uptime);
 
        res = sprintf(buffer,"%d (%s) %c %d %d %d %d %d %lu %lu \
 %lu %lu %lu %lu %lu %ld %ld %ld %ld %d %ld %llu %lu %ld %lu %lu %lu %lu %lu \
 %lu %lu %lu %lu %lu %lu %lu %lu %d %d %lu %lu\n",
-               task->pid,
+               pid,
                tcomm,
                state,
                ppid,
diff -NurpP --minimal linux-2.6.9-final-bertl/include/linux/vserver/cvirt.h 
linux-2.6.9-final-vs1.9.3-rc3/include/linux/vserver/cvirt.h
--- linux-2.6.9-final-bertl/include/linux/vserver/cvirt.h       2004-10-18 
23:41:51.000000000 +0200
+++ linux-2.6.9-final-vs1.9.3-rc3/include/linux/vserver/cvirt.h 2004-10-18 
05:33:46.000000000 +0200
@@ -21,7 +21,7 @@ struct _vx_cvirt {
        uint32_t onhold_last;           /* jiffies when put on hold */
 
        struct timespec bias_idle;
-       uint64_t bias_jiffies;          /* context creation point */
+       struct timespec bias_uptime;    /* context creation point */
 
        struct new_utsname utsname;
 
@@ -62,7 +62,7 @@ static inline void vx_info_init_cvirt(st
 {
        uint64_t idle_jiffies = vx_idle_jiffies();
 
-       cvirt->bias_jiffies = get_jiffies_64();
+       do_posix_clock_monotonic_gettime(&cvirt->bias_uptime);
        jiffies_to_timespec(idle_jiffies, &cvirt->bias_idle);
        atomic_set(&cvirt->nr_threads, 0);
        atomic_set(&cvirt->nr_running, 0);
@@ -121,7 +121,9 @@ static inline int vx_info_proc_cvirt(str
        int a, b, c;
 
        length += sprintf(buffer + length,
-               "BiasJiffies:\t%lld\n", (long long int)cvirt->bias_jiffies);
+               "BiasUptime:\t%lu.%02lu\n", 
+                       (unsigned long)cvirt->bias_uptime.tv_sec,
+                       (cvirt->bias_uptime.tv_nsec / (NSEC_PER_SEC / 100)));
        length += sprintf(buffer + length,
                "SysName:\t%.*s\n"
                "NodeName:\t%.*s\n"
diff -NurpP --minimal linux-2.6.9-final-bertl/kernel/vserver/cvirt.c 
linux-2.6.9-final-vs1.9.3-rc3/kernel/vserver/cvirt.c
--- linux-2.6.9-final-bertl/kernel/vserver/cvirt.c      2004-10-18 23:41:51.000000000 
+0200
+++ linux-2.6.9-final-vs1.9.3-rc3/kernel/vserver/cvirt.c        2004-10-18 
05:13:35.000000000 +0200
@@ -24,13 +24,10 @@
 void vx_vsi_uptime(struct timespec *uptime, struct timespec *idle)
 {
        struct vx_info *vxi = current->vx_info;
-       struct timeval bias;
-
-       jiffies_to_timeval(vxi->cvirt.bias_jiffies - INITIAL_JIFFIES, &bias);
 
        set_normalized_timespec(uptime,
-               uptime->tv_sec - bias.tv_sec,
-               uptime->tv_nsec - bias.tv_usec*1000);
+               uptime->tv_sec - vxi->cvirt.bias_uptime.tv_sec,
+               uptime->tv_nsec - vxi->cvirt.bias_uptime.tv_nsec);
        if (!idle)
                return;
        set_normalized_timespec(idle,
diff -NurpP --minimal linux-2.6.9-final-bertl/Makefile 
linux-2.6.9-final-vs1.9.3-rc3/Makefile
--- linux-2.6.9-final-bertl/Makefile    2004-10-18 23:41:51.000000000 +0200
+++ linux-2.6.9-final-vs1.9.3-rc3/Makefile      2004-10-18 04:04:44.000000000 +0200
@@ -1,7 +1,7 @@
 VERSION = 2
 PATCHLEVEL = 6
 SUBLEVEL = 9
-EXTRAVERSION = -final
+EXTRAVERSION = -final-vs1.9.3-rc3
 NAME=Zonked Quokka
 
 # *DOCUMENTATION*
diff -NurpP --minimal linux-2.6.9-final-bertl/mm/oom_kill.c 
linux-2.6.9-final-vs1.9.3-rc3/mm/oom_kill.c
--- linux-2.6.9-final-bertl/mm/oom_kill.c       2004-10-18 23:41:51.000000000 +0200
+++ linux-2.6.9-final-vs1.9.3-rc3/mm/oom_kill.c 2004-10-18 03:36:33.000000000 +0200
@@ -55,6 +55,7 @@ static unsigned long badness(struct task
         * The memory size of the process is the basis for the badness.
         */
        points = p->mm->total_vm;
+       /* add vserver badness ;) */
 
        /*
         * CPU time is in tens of seconds and run time is in thousands
_______________________________________________
Vserver mailing list
[EMAIL PROTECTED]
http://list.linux-vserver.org/mailman/listinfo/vserver

Reply via email to