diff -urN linux/arch/i386/kernel/smp.c linux-2.2.3-uptime/arch/i386/kernel/smp.c
--- linux/arch/i386/kernel/smp.c        Tue Feb 16 22:20:05 1999
+++ linux-2.2.3-uptime/arch/i386/kernel/smp.c   Fri Mar 19 12:59:04 1999
@@ -1705,9 +1705,8 @@
                       system=1;

               irq_enter(cpu, 0);
+               update_one_process(p, 1, user, system, cpu);
               if (p->pid) {
-                       update_one_process(p, 1, user, system, cpu);
-
                       p->counter -= 1;
                       if (p->counter < 0) {
                               p->counter = 0;
@@ -1720,10 +1719,8 @@
                               kstat.cpu_user += user;
                               kstat.per_cpu_user[cpu] += user;
                       }
-
                       kstat.cpu_system += system;
                       kstat.per_cpu_system[cpu] += system;
-
               }
               prof_counter[cpu]=prof_multiplier[cpu];
               irq_exit(cpu, 0);
diff -urN linux/fs/proc/array.c linux-2.2.3-uptime/fs/proc/array.c
--- linux/fs/proc/array.c       Mon Mar  8 19:07:29 1999
+++ linux-2.2.3-uptime/fs/proc/array.c  Fri Mar 19 12:58:24 1999
@@ -231,9 +231,8 @@
       int i, len;
       unsigned sum = 0;
       extern unsigned long total_forks;
-       unsigned long ticks;
+       unsigned long jiffies_saved = jiffies;

-       ticks = jiffies * smp_num_cpus;
       for (i = 0 ; i < NR_IRQS ; i++)
               sum += kstat_irqs(i);

@@ -243,14 +242,15 @@
               kstat.cpu_user,
               kstat.cpu_nice,
               kstat.cpu_system,
-               jiffies*smp_num_cpus - (kstat.cpu_user + kstat.cpu_nice + kstat.cpu_system));
+               jiffies_saved*smp_num_cpus - \
+                       (kstat.cpu_user + kstat.cpu_nice + kstat.cpu_system));
       for (i = 0 ; i < smp_num_cpus; i++)
               len += sprintf(buffer + len, "cpu%d %u %u %u %lu\n",
                       i,
                       kstat.per_cpu_user[cpu_logical_map(i)],
                       kstat.per_cpu_nice[cpu_logical_map(i)],
                       kstat.per_cpu_system[cpu_logical_map(i)],
-                       jiffies - (  kstat.per_cpu_user[cpu_logical_map(i)] \
+                       jiffies_saved - (  kstat.per_cpu_user[cpu_logical_map(i)] \
                                  + kstat.per_cpu_nice[cpu_logical_map(i)] \
                                  + kstat.per_cpu_system[cpu_logical_map(i)]));
       len += sprintf(buffer + len,
@@ -276,7 +276,7 @@
               kstat.cpu_user,
               kstat.cpu_nice,
               kstat.cpu_system,
-               ticks - (kstat.cpu_user + kstat.cpu_nice + kstat.cpu_system),
+               jiffies_saved - (kstat.cpu_user + kstat.cpu_nice + kstat.cpu_system),
#endif
               kstat.dk_drive[0], kstat.dk_drive[1],
               kstat.dk_drive[2], kstat.dk_drive[3],