Messages in this thread Patch in this message | | | Date | Mon, 05 Oct 2009 15:35:06 +0900 | From | Hidetoshi Seto <> | Subject | [PATCH 03/10] x86, mce: change writer timeout in mce_read |
| |
Changed to use ndelay().
(This piece originates from Huang's patch, titled: "x86, MCE: Fix bugs and issues of MCE log ring buffer")
Originally-From: Huang Ying <ying.huang@intel.com> Signed-off-by: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com> --- arch/x86/kernel/cpu/mcheck/mce.c | 11 ++++++++--- 1 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c index 2d0f9d8..9e8eabd 100644 --- a/arch/x86/kernel/cpu/mcheck/mce.c +++ b/arch/x86/kernel/cpu/mcheck/mce.c @@ -52,6 +52,9 @@ int mce_disabled __read_mostly; #define SPINUNIT 100 /* 100ns */ +/* Timeout log reader to wait writer to finish */ +#define WRITER_TIMEOUT_NS NSEC_PER_MSEC + atomic_t mce_entry; DEFINE_PER_CPU(unsigned, mce_exception_count); @@ -1469,15 +1472,17 @@ static ssize_t mce_read(struct file *filp, char __user *ubuf, size_t usize, prev = 0; do { for (i = prev; i < next; i++) { - unsigned long start = jiffies; + int timeout = WRITER_TIMEOUT_NS; while (!mcelog.entry[i].finished) { - if (time_after_eq(jiffies, start + 2)) { + if (timeout-- <= 0) { memset(mcelog.entry + i, 0, sizeof(struct mce)); + printk(KERN_WARNING "mcelog: timeout " + "waiting for writer to finish!\n"); goto timeout; } - cpu_relax(); + ndelay(1); } smp_rmb(); err |= copy_to_user(buf, mcelog.entry + i, -- 1.6.4.3
| |