|
@@ -1222,10 +1222,8 @@ static inline void calc_load(unsigned long ticks)
|
|
|
unsigned long active_tasks; /* fixed-point */
|
|
|
static int count = LOAD_FREQ;
|
|
|
|
|
|
- count -= ticks;
|
|
|
- if (count < 0) {
|
|
|
- count += LOAD_FREQ;
|
|
|
- active_tasks = count_active_tasks();
|
|
|
+ active_tasks = count_active_tasks();
|
|
|
+ for (count -= ticks; count < 0; count += LOAD_FREQ) {
|
|
|
CALC_LOAD(avenrun[0], EXP_1, active_tasks);
|
|
|
CALC_LOAD(avenrun[1], EXP_5, active_tasks);
|
|
|
CALC_LOAD(avenrun[2], EXP_15, active_tasks);
|
|
@@ -1270,11 +1268,8 @@ void run_local_timers(void)
|
|
|
* Called by the timer interrupt. xtime_lock must already be taken
|
|
|
* by the timer IRQ!
|
|
|
*/
|
|
|
-static inline void update_times(void)
|
|
|
+static inline void update_times(unsigned long ticks)
|
|
|
{
|
|
|
- unsigned long ticks;
|
|
|
-
|
|
|
- ticks = jiffies - wall_jiffies;
|
|
|
wall_jiffies += ticks;
|
|
|
update_wall_time();
|
|
|
calc_load(ticks);
|
|
@@ -1286,12 +1281,10 @@ static inline void update_times(void)
|
|
|
* jiffies is defined in the linker script...
|
|
|
*/
|
|
|
|
|
|
-void do_timer(struct pt_regs *regs)
|
|
|
+void do_timer(unsigned long ticks)
|
|
|
{
|
|
|
- jiffies_64++;
|
|
|
- /* prevent loading jiffies before storing new jiffies_64 value. */
|
|
|
- barrier();
|
|
|
- update_times();
|
|
|
+ jiffies_64 += ticks;
|
|
|
+ update_times(ticks);
|
|
|
}
|
|
|
|
|
|
#ifdef __ARCH_WANT_SYS_ALARM
|