summaryrefslogtreecommitdiffstats
path: root/arch/x86_64/kernel/mce.c
diff options
context:
space:
mode:
authorVenki Pallipadi2007-07-21 17:10:44 +0200
committerLinus Torvalds2007-07-22 03:37:10 +0200
commit22293e5806f58a9682267139678a5cc117fd3dcf (patch)
tree63f1961afb05a4757f9716ab2339f40b1f28f3b2 /arch/x86_64/kernel/mce.c
parenti386: add reference to the arguments (diff)
downloadkernel-qcow2-linux-22293e5806f58a9682267139678a5cc117fd3dcf.tar.gz
kernel-qcow2-linux-22293e5806f58a9682267139678a5cc117fd3dcf.tar.xz
kernel-qcow2-linux-22293e5806f58a9682267139678a5cc117fd3dcf.zip
x86: round_jiffies() for i386 and x86-64 non-critical/corrected MCE polling
This helps to reduce the frequency at which the CPU must be taken out of a lower-power state. Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com> Acked-by: Tim Hockin <thockin@hockin.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Andi Kleen <ak@suse.de> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch/x86_64/kernel/mce.c')
-rw-r--r--arch/x86_64/kernel/mce.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/arch/x86_64/kernel/mce.c b/arch/x86_64/kernel/mce.c
index 7c8ab423abe3..4d8450ee3635 100644
--- a/arch/x86_64/kernel/mce.c
+++ b/arch/x86_64/kernel/mce.c
@@ -375,7 +375,8 @@ static void mcheck_timer(struct work_struct *work)
if (mce_notify_user()) {
next_interval = max(next_interval/2, HZ/100);
} else {
- next_interval = min(next_interval*2, check_interval*HZ);
+ next_interval = min(next_interval*2,
+ (int)round_jiffies_relative(check_interval*HZ));
}
schedule_delayed_work(&mcheck_work, next_interval);
@@ -428,7 +429,8 @@ static __init int periodic_mcheck_init(void)
{
next_interval = check_interval * HZ;
if (next_interval)
- schedule_delayed_work(&mcheck_work, next_interval);
+ schedule_delayed_work(&mcheck_work,
+ round_jiffies_relative(next_interval));
idle_notifier_register(&mce_idle_notifier);
return 0;
}
@@ -720,7 +722,8 @@ static void mce_restart(void)
on_each_cpu(mce_init, NULL, 1, 1);
next_interval = check_interval * HZ;
if (next_interval)
- schedule_delayed_work(&mcheck_work, next_interval);
+ schedule_delayed_work(&mcheck_work,
+ round_jiffies_relative(next_interval));
}
static struct sysdev_class mce_sysclass = {