Messages in this thread | | | Subject | Re: Does cli() need to be called before reading avenrun? | From | Robert Love <> | Date | 01 Jan 2003 19:53:20 -0500 |
| |
On Wed, 2003-01-01 at 19:39, Peter Benie wrote: > In kernel 2.4, in sys_sysinfo(), the code reads: > > cli(); > val.uptime = jiffies / HZ; > > val.loads[0] = avenrun[0] << (SI_LOAD_SHIFT - FSHIFT); > val.loads[1] = avenrun[1] << (SI_LOAD_SHIFT - FSHIFT); > val.loads[2] = avenrun[2] << (SI_LOAD_SHIFT - FSHIFT); > > val.procs = nr_threads-1; > sti(); > > In loadavg_read_proc, the code is in essence the same, except that it > isn't wrapped in cli/sti. > > Is there a reason for the cli?
Interrupts off protects the reading of avenrun[] - it is only written to from the timer interrupt, so you can safely read it when interrupts are disabled.
The reason we need some sort of protection is that there are the three array entries, so we need to make sure we read all three atomically (not that its a huge deal if we do not).
So I guess the proc code needs to disable interrupts, too. I am on my laptop and only have a 2.5 tree - sure it is not disabled somewhere in there?
Note in 2.5 we replaced the cli() with a read_lock() on xtime_lock.
Robert Love
- 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/
| |