diff options
author | Wu Fengguang <fengguang.wu@intel.com> | 2009-12-16 06:19:57 -0500 |
---|---|---|
committer | Andi Kleen <ak@linux.intel.com> | 2009-12-16 06:19:57 -0500 |
commit | a7560fc80f33cab33176ee78f146df22b28e3338 (patch) | |
tree | 1301b08559615aa5e7db0b11f03c98f3848c8142 /mm/memory-failure.c | |
parent | 9b9a29ecd75e310f75a9243e1c3538ad34598fcb (diff) |
HWPOISON: return ENXIO on invalid page number
Use a different errno than the usual EIO for invalid page numbers.
This is mainly for better reporting for the injector.
This also avoids calling action_result() with invalid pfn.
Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
Signed-off-by: Andi Kleen <ak@linux.intel.com>
Diffstat (limited to 'mm/memory-failure.c')
-rw-r--r-- | mm/memory-failure.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/mm/memory-failure.c b/mm/memory-failure.c index 745f61082ce5..275f4e2df8ac 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c | |||
@@ -618,13 +618,11 @@ static struct page_state { | |||
618 | 618 | ||
619 | static void action_result(unsigned long pfn, char *msg, int result) | 619 | static void action_result(unsigned long pfn, char *msg, int result) |
620 | { | 620 | { |
621 | struct page *page = NULL; | 621 | struct page *page = pfn_to_page(pfn); |
622 | if (pfn_valid(pfn)) | ||
623 | page = pfn_to_page(pfn); | ||
624 | 622 | ||
625 | printk(KERN_ERR "MCE %#lx: %s%s page recovery: %s\n", | 623 | printk(KERN_ERR "MCE %#lx: %s%s page recovery: %s\n", |
626 | pfn, | 624 | pfn, |
627 | page && PageDirty(page) ? "dirty " : "", | 625 | PageDirty(page) ? "dirty " : "", |
628 | msg, action_name[result]); | 626 | msg, action_name[result]); |
629 | } | 627 | } |
630 | 628 | ||
@@ -750,8 +748,10 @@ int __memory_failure(unsigned long pfn, int trapno, int ref) | |||
750 | panic("Memory failure from trap %d on page %lx", trapno, pfn); | 748 | panic("Memory failure from trap %d on page %lx", trapno, pfn); |
751 | 749 | ||
752 | if (!pfn_valid(pfn)) { | 750 | if (!pfn_valid(pfn)) { |
753 | action_result(pfn, "memory outside kernel control", IGNORED); | 751 | printk(KERN_ERR |
754 | return -EIO; | 752 | "MCE %#lx: memory outside kernel control\n", |
753 | pfn); | ||
754 | return -ENXIO; | ||
755 | } | 755 | } |
756 | 756 | ||
757 | p = pfn_to_page(pfn); | 757 | p = pfn_to_page(pfn); |