diff options
Diffstat (limited to 'arch/x86/kernel/cpu')
-rw-r--r-- | arch/x86/kernel/cpu/mcheck/mce.c | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c index f3f648c8e08..54360e82854 100644 --- a/arch/x86/kernel/cpu/mcheck/mce.c +++ b/arch/x86/kernel/cpu/mcheck/mce.c | |||
@@ -1537,19 +1537,18 @@ static ssize_t mce_read(struct file *filp, char __user *ubuf, size_t usize, | |||
1537 | do { | 1537 | do { |
1538 | for (i = prev; i < next; i++) { | 1538 | for (i = prev; i < next; i++) { |
1539 | unsigned long start = jiffies; | 1539 | unsigned long start = jiffies; |
1540 | struct mce *m = &mcelog.entry[i]; | ||
1540 | 1541 | ||
1541 | while (!mcelog.entry[i].finished) { | 1542 | while (!m->finished) { |
1542 | if (time_after_eq(jiffies, start + 2)) { | 1543 | if (time_after_eq(jiffies, start + 2)) { |
1543 | memset(mcelog.entry + i, 0, | 1544 | memset(m, 0, sizeof(*m)); |
1544 | sizeof(struct mce)); | ||
1545 | goto timeout; | 1545 | goto timeout; |
1546 | } | 1546 | } |
1547 | cpu_relax(); | 1547 | cpu_relax(); |
1548 | } | 1548 | } |
1549 | smp_rmb(); | 1549 | smp_rmb(); |
1550 | err |= copy_to_user(buf, mcelog.entry + i, | 1550 | err |= copy_to_user(buf, m, sizeof(*m)); |
1551 | sizeof(struct mce)); | 1551 | buf += sizeof(*m); |
1552 | buf += sizeof(struct mce); | ||
1553 | timeout: | 1552 | timeout: |
1554 | ; | 1553 | ; |
1555 | } | 1554 | } |
@@ -1569,13 +1568,13 @@ timeout: | |||
1569 | on_each_cpu(collect_tscs, cpu_tsc, 1); | 1568 | on_each_cpu(collect_tscs, cpu_tsc, 1); |
1570 | 1569 | ||
1571 | for (i = next; i < MCE_LOG_LEN; i++) { | 1570 | for (i = next; i < MCE_LOG_LEN; i++) { |
1572 | if (mcelog.entry[i].finished && | 1571 | struct mce *m = &mcelog.entry[i]; |
1573 | mcelog.entry[i].tsc < cpu_tsc[mcelog.entry[i].cpu]) { | 1572 | |
1574 | err |= copy_to_user(buf, mcelog.entry+i, | 1573 | if (m->finished && m->tsc < cpu_tsc[m->cpu]) { |
1575 | sizeof(struct mce)); | 1574 | err |= copy_to_user(buf, m, sizeof(*m)); |
1576 | smp_rmb(); | 1575 | smp_rmb(); |
1577 | buf += sizeof(struct mce); | 1576 | buf += sizeof(*m); |
1578 | memset(&mcelog.entry[i], 0, sizeof(struct mce)); | 1577 | memset(m, 0, sizeof(*m)); |
1579 | } | 1578 | } |
1580 | } | 1579 | } |
1581 | 1580 | ||