Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / arch / s390 / appldata / appldata_os.c
index 58ad2cf..99ddd3b 100644 (file)
@@ -49,7 +49,7 @@ struct appldata_os_per_cpu {
        u32 per_cpu_softirq;    /* ... spent in softirqs            */
        u32 per_cpu_iowait;     /* ... spent while waiting for I/O  */
 // <-- New in 2.6
-};
+} __attribute__((packed));
 
 struct appldata_os_data {
        u64 timestamp;
@@ -75,7 +75,7 @@ struct appldata_os_data {
 
        /* per cpu data */
        struct appldata_os_per_cpu os_cpu[0];
-};
+} __attribute__((packed));
 
 static struct appldata_os_data *appldata_os_data;
 
@@ -98,8 +98,7 @@ static inline void appldata_print_debug(struct appldata_os_data *os_data)
                LOAD_INT(a2), LOAD_FRAC(a2));
 
        P_DEBUG("nr_cpus = %u\n", os_data->nr_cpus);
-       for (i = 0; i < NR_CPUS; i++) {
-               if (!cpu_online(i)) continue;
+       for (i = 0; i < os_data->nr_cpus; i++) {
                P_DEBUG("cpu%u : user = %u, nice = %u, system = %u, "
                        "idle = %u, irq = %u, softirq = %u, iowait = %u\n",
                                i,
@@ -124,7 +123,7 @@ static inline void appldata_print_debug(struct appldata_os_data *os_data)
  */
 static void appldata_get_os_data(void *data)
 {
-       int i;
+       int i, j;
        struct appldata_os_data *os_data;
 
        os_data = data;
@@ -139,21 +138,23 @@ static void appldata_get_os_data(void *data)
        os_data->avenrun[1] = avenrun[1] + (FIXED_1/200);
        os_data->avenrun[2] = avenrun[2] + (FIXED_1/200);
 
-       for (i = 0; i < num_online_cpus(); i++) {
-               os_data->os_cpu[i].per_cpu_user =
-                                       kstat_cpu(i).cpustat.user;
-               os_data->os_cpu[i].per_cpu_nice =
-                                       kstat_cpu(i).cpustat.nice;
-               os_data->os_cpu[i].per_cpu_system =
-                                       kstat_cpu(i).cpustat.system;
-               os_data->os_cpu[i].per_cpu_idle =
-                                       kstat_cpu(i).cpustat.idle;
-               os_data->os_cpu[i].per_cpu_irq =
-                                       kstat_cpu(i).cpustat.irq;
-               os_data->os_cpu[i].per_cpu_softirq =
-                                       kstat_cpu(i).cpustat.softirq;
-               os_data->os_cpu[i].per_cpu_iowait =
-                                       kstat_cpu(i).cpustat.iowait;
+       j = 0;
+       for_each_online_cpu(i) {
+               os_data->os_cpu[j].per_cpu_user =
+                       cputime_to_jiffies(kstat_cpu(i).cpustat.user);
+               os_data->os_cpu[j].per_cpu_nice =
+                       cputime_to_jiffies(kstat_cpu(i).cpustat.nice);
+               os_data->os_cpu[j].per_cpu_system =
+                       cputime_to_jiffies(kstat_cpu(i).cpustat.system);
+               os_data->os_cpu[j].per_cpu_idle =
+                       cputime_to_jiffies(kstat_cpu(i).cpustat.idle);
+               os_data->os_cpu[j].per_cpu_irq =
+                       cputime_to_jiffies(kstat_cpu(i).cpustat.irq);
+               os_data->os_cpu[j].per_cpu_softirq =
+                       cputime_to_jiffies(kstat_cpu(i).cpustat.softirq);
+               os_data->os_cpu[j].per_cpu_iowait =
+                       cputime_to_jiffies(kstat_cpu(i).cpustat.iowait);
+               j++;
        }
 
        os_data->timestamp = get_clock();