Commit 21228e45 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'sched-fixes-for-linus' of...

Merge branch 'sched-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip

* 'sched-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
  sched: Fix the irqtime code for 32bit
  sched: Fix the irqtime code to deal with u64 wraps
  nohz: Fix get_next_timer_interrupt() vs cpu hotplug
  Sched: fix skip_clock_update optimization
  sched: Cure more NO_HZ load average woes
parents 0a592281 8e92c201
...@@ -143,7 +143,7 @@ extern unsigned long nr_iowait_cpu(int cpu); ...@@ -143,7 +143,7 @@ extern unsigned long nr_iowait_cpu(int cpu);
extern unsigned long this_cpu_load(void); extern unsigned long this_cpu_load(void);
extern void calc_global_load(void); extern void calc_global_load(unsigned long ticks);
extern unsigned long get_parent_ip(unsigned long addr); extern unsigned long get_parent_ip(unsigned long addr);
......
...@@ -273,6 +273,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig) ...@@ -273,6 +273,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig)
setup_thread_stack(tsk, orig); setup_thread_stack(tsk, orig);
clear_user_return_notifier(tsk); clear_user_return_notifier(tsk);
clear_tsk_need_resched(tsk);
stackend = end_of_stack(tsk); stackend = end_of_stack(tsk);
*stackend = STACK_END_MAGIC; /* for overflow detection */ *stackend = STACK_END_MAGIC; /* for overflow detection */
......
This diff is collapsed.
...@@ -1252,6 +1252,12 @@ unsigned long get_next_timer_interrupt(unsigned long now) ...@@ -1252,6 +1252,12 @@ unsigned long get_next_timer_interrupt(unsigned long now)
struct tvec_base *base = __get_cpu_var(tvec_bases); struct tvec_base *base = __get_cpu_var(tvec_bases);
unsigned long expires; unsigned long expires;
/*
* Pretend that there is no timer pending if the cpu is offline.
* Possible pending timers will be migrated later to an active cpu.
*/
if (cpu_is_offline(smp_processor_id()))
return now + NEXT_TIMER_MAX_DELTA;
spin_lock(&base->lock); spin_lock(&base->lock);
if (time_before_eq(base->next_timer, base->timer_jiffies)) if (time_before_eq(base->next_timer, base->timer_jiffies))
base->next_timer = __next_timer_interrupt(base); base->next_timer = __next_timer_interrupt(base);
...@@ -1319,7 +1325,7 @@ void do_timer(unsigned long ticks) ...@@ -1319,7 +1325,7 @@ void do_timer(unsigned long ticks)
{ {
jiffies_64 += ticks; jiffies_64 += ticks;
update_wall_time(); update_wall_time();
calc_global_load(); calc_global_load(ticks);
} }
#ifdef __ARCH_WANT_SYS_ALARM #ifdef __ARCH_WANT_SYS_ALARM
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment