Commit 4881e2cd authored by Hidetoshi Seto's avatar Hidetoshi Seto Committed by Tony Luck

[IA64] MCA recovery verify pfn_valid

Verify the pfn is valid before calling pfn_to_page(),
and cut isolation message if nothing was done.
Signed-off-by: default avatarHidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
Acked-by: default avatarRuss Anderson <rja@sgi.com>
Signed-off-by: default avatarTony Luck <tony.luck@intel.com>
parent 20bb8685
......@@ -56,8 +56,9 @@ static struct page *page_isolate[MAX_PAGE_ISOLATE];
static int num_page_isolate = 0;
typedef enum {
ISOLATE_NG = 0,
ISOLATE_OK = 1
ISOLATE_NG,
ISOLATE_OK,
ISOLATE_NONE
} isolate_status_t;
/*
......@@ -74,7 +75,7 @@ static struct {
* @paddr: poisoned memory location
*
* Return value:
* ISOLATE_OK / ISOLATE_NG
* one of isolate_status_t, ISOLATE_OK/NG/NONE.
*/
static isolate_status_t
......@@ -85,7 +86,10 @@ mca_page_isolate(unsigned long paddr)
/* whether physical address is valid or not */
if (!ia64_phys_addr_valid(paddr))
return ISOLATE_NG;
return ISOLATE_NONE;
if (!pfn_valid(paddr))
return ISOLATE_NONE;
/* convert physical address to physical page number */
p = pfn_to_page(paddr>>PAGE_SHIFT);
......@@ -122,10 +126,15 @@ mca_handler_bh(unsigned long paddr)
current->pid, current->comm);
spin_lock(&mca_bh_lock);
if (mca_page_isolate(paddr) == ISOLATE_OK) {
switch (mca_page_isolate(paddr)) {
case ISOLATE_OK:
printk(KERN_DEBUG "Page isolation: ( %lx ) success.\n", paddr);
} else {
break;
case ISOLATE_NG:
printk(KERN_DEBUG "Page isolation: ( %lx ) failure.\n", paddr);
break;
default:
break;
}
spin_unlock(&mca_bh_lock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment