Skip to content

Commit

Permalink
[IA64] MCA recovery verify pfn_valid
Browse files Browse the repository at this point in the history
Verify the pfn is valid before calling pfn_to_page(),
and cut isolation message if nothing was done.

Signed-off-by: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
Acked-by: Russ Anderson <rja@sgi.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
  • Loading branch information
Hidetoshi Seto authored and Tony Luck committed Sep 22, 2005
1 parent 20bb868 commit 4881e2c
Showing 1 changed file with 15 additions and 6 deletions.
21 changes: 15 additions & 6 deletions arch/ia64/kernel/mca_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

/*
Expand All @@ -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
Expand All @@ -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);
Expand Down Expand Up @@ -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);

Expand Down

0 comments on commit 4881e2c

Please sign in to comment.