lkml.org 
[lkml]   [2003]   [Aug]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: [PATCH] 2.4 avenrun values
On Tue, Aug 26, 2003 at 04:07:34PM -0300, Marcelo Tosatti wrote:
> - cli();
> + read_lock(&xtime_lock);
>
> Shouldnt this be read_lock_irq() to avoid interrupts?

Yes it should - here's a new patch.

Thanks.

--- 1.21/fs/proc/proc_misc.c Mon Jul 14 13:10:30 2003
+++ edited/fs/proc/proc_misc.c Tue Aug 26 13:21:48 2003
@@ -65,6 +65,7 @@
#ifdef CONFIG_SGI_DS1286
extern int get_ds1286_status(char *);
#endif
+extern rwlock_t xtime_lock;

void proc_sprintf(char *page, off_t *off, int *lenp, const char *format, ...)
{
@@ -101,17 +102,22 @@
static int loadavg_read_proc(char *page, char **start, off_t off,
int count, int *eof, void *data)
{
- int a, b, c;
+ int a, b, c, d, e;
int len;

+ read_lock_irq(&xtime_lock);
a = avenrun[0] + (FIXED_1/200);
b = avenrun[1] + (FIXED_1/200);
c = avenrun[2] + (FIXED_1/200);
+ d = nr_running;
+ e = nr_threads;
+ read_unlock_irq(&xtime_lock);
+
len = sprintf(page,"%d.%02d %d.%02d %d.%02d %d/%d %d\n",
LOAD_INT(a), LOAD_FRAC(a),
LOAD_INT(b), LOAD_FRAC(b),
LOAD_INT(c), LOAD_FRAC(c),
- nr_running, nr_threads, last_pid);
+ d, e, last_pid);
return proc_calc_metrics(page, start, off, count, eof, len);
}

--- 1.2/kernel/info.c Mon Feb 4 23:39:30 2002
+++ edited/kernel/info.c Tue Aug 26 13:21:48 2003
@@ -13,13 +13,15 @@

#include <asm/uaccess.h>

+extern rwlock_t xtime_lock;
+
asmlinkage long sys_sysinfo(struct sysinfo *info)
{
struct sysinfo val;

memset((char *)&val, 0, sizeof(struct sysinfo));

- cli();
+ read_lock_irq(&xtime_lock);
val.uptime = jiffies / HZ;

val.loads[0] = avenrun[0] << (SI_LOAD_SHIFT - FSHIFT);
@@ -27,7 +29,7 @@
val.loads[2] = avenrun[2] << (SI_LOAD_SHIFT - FSHIFT);

val.procs = nr_threads-1;
- sti();
+ read_unlock_irq(&xtime_lock);

si_meminfo(&val);
si_swapinfo(&val);
--- 1.7/kernel/timer.c Sun Oct 6 12:03:31 2002
+++ edited/kernel/timer.c Tue Aug 26 13:21:48 2003
@@ -686,8 +686,8 @@
update_wall_time(ticks);
}
vxtime_unlock();
- write_unlock_irq(&xtime_lock);
calc_load(ticks);
+ write_unlock_irq(&xtime_lock);
}

void timer_bh(void)
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
\
 
 \ /
  Last update: 2005-03-22 13:48    [W:0.056 / U:1.184 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site