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