diff options
Diffstat (limited to 'arch/x86/kernel/cpu/mcheck/mce.c')
| -rw-r--r-- | arch/x86/kernel/cpu/mcheck/mce.c | 33 | 
1 files changed, 13 insertions, 20 deletions
| diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c index 132e1ec67da0..537c6647d84c 100644 --- a/arch/x86/kernel/cpu/mcheck/mce.c +++ b/arch/x86/kernel/cpu/mcheck/mce.c @@ -516,7 +516,7 @@ int mce_available(struct cpuinfo_x86 *c)  static void mce_schedule_work(void)  { -	if (!mce_gen_pool_empty() && keventd_up()) +	if (!mce_gen_pool_empty())  		schedule_work(&mce_work);  } @@ -1373,20 +1373,15 @@ static unsigned long mce_adjust_timer_default(unsigned long interval)  static unsigned long (*mce_adjust_timer)(unsigned long interval) = mce_adjust_timer_default; -static void __restart_timer(struct timer_list *t, unsigned long interval) +static void __start_timer(struct timer_list *t, unsigned long interval)  {  	unsigned long when = jiffies + interval;  	unsigned long flags;  	local_irq_save(flags); -	if (timer_pending(t)) { -		if (time_before(when, t->expires)) -			mod_timer(t, when); -	} else { -		t->expires = round_jiffies(when); -		add_timer_on(t, smp_processor_id()); -	} +	if (!timer_pending(t) || time_before(when, t->expires)) +		mod_timer(t, round_jiffies(when));  	local_irq_restore(flags);  } @@ -1421,7 +1416,7 @@ static void mce_timer_fn(unsigned long data)  done:  	__this_cpu_write(mce_next_interval, iv); -	__restart_timer(t, iv); +	__start_timer(t, iv);  }  /* @@ -1432,7 +1427,7 @@ void mce_timer_kick(unsigned long interval)  	struct timer_list *t = this_cpu_ptr(&mce_timer);  	unsigned long iv = __this_cpu_read(mce_next_interval); -	__restart_timer(t, interval); +	__start_timer(t, interval);  	if (interval < iv)  		__this_cpu_write(mce_next_interval, interval); @@ -1779,17 +1774,15 @@ static void __mcheck_cpu_clear_vendor(struct cpuinfo_x86 *c)  	}  } -static void mce_start_timer(unsigned int cpu, struct timer_list *t) +static void mce_start_timer(struct timer_list *t)  {  	unsigned long iv = check_interval * HZ;  	if (mca_cfg.ignore_ce || !iv)  		return; -	per_cpu(mce_next_interval, cpu) = iv; - -	t->expires = round_jiffies(jiffies + iv); -	add_timer_on(t, cpu); +	this_cpu_write(mce_next_interval, iv); +	__start_timer(t, iv);  }  static void __mcheck_cpu_setup_timer(void) @@ -1806,7 +1799,7 @@ static void __mcheck_cpu_init_timer(void)  	unsigned int cpu = smp_processor_id();  	setup_pinned_timer(t, mce_timer_fn, cpu); -	mce_start_timer(cpu, t); +	mce_start_timer(t);  }  /* Handle unconfigured int18 (should never happen) */ @@ -2566,7 +2559,7 @@ static int mce_cpu_dead(unsigned int cpu)  static int mce_cpu_online(unsigned int cpu)  { -	struct timer_list *t = &per_cpu(mce_timer, cpu); +	struct timer_list *t = this_cpu_ptr(&mce_timer);  	int ret;  	mce_device_create(cpu); @@ -2577,13 +2570,13 @@ static int mce_cpu_online(unsigned int cpu)  		return ret;  	}  	mce_reenable_cpu(); -	mce_start_timer(cpu, t); +	mce_start_timer(t);  	return 0;  }  static int mce_cpu_pre_down(unsigned int cpu)  { -	struct timer_list *t = &per_cpu(mce_timer, cpu); +	struct timer_list *t = this_cpu_ptr(&mce_timer);  	mce_disable_cpu();  	del_timer_sync(t); |