]> xenbits.xensource.com Git - xen.git/commitdiff
X86: Fix mce offline page bug
authorLiu, Jinsong <jinsong.liu@intel.com>
Thu, 7 Apr 2011 14:42:16 +0000 (15:42 +0100)
committerLiu, Jinsong <jinsong.liu@intel.com>
Thu, 7 Apr 2011 14:42:16 +0000 (15:42 +0100)
c/s 19913 break mce offline page logic:
For page_state_is(pg, free), it's impossible to trigger the case;
For page_state_is(pg, offlined), it in fact didn't offline related
page;

This patch fix the bug, and remove an ambiguous comment.

Signed-off-by: Liu, Jinsong <jinsong.liu@intel.com>
xen-unstable changeset:   23177:d8bb2de119de
xen-unstable date:        Thu Apr 07 12:12:01 2011 +0100

xen/common/page_alloc.c

index 49142cbe9266f03dcc72d08f5da3f770eac5efc5..d8915d498fafcbac4513c40fadbafc2762e1b4e7 100644 (file)
@@ -574,10 +574,6 @@ static void free_heap_pages(
 
 
 /*
- * Following possible status for a page:
- * free and Online; free and offlined; free and offlined and broken;
- * assigned and online; assigned and offlining; assigned and offling and broken
- *
  * Following rules applied for page offline:
  * Once a page is broken, it can't be assigned anymore
  * A page will be offlined only if it is free
@@ -674,16 +670,11 @@ int offline_page(unsigned long mfn, int broken, uint32_t *status)
 
     old_info = mark_page_offline(pg, broken);
 
-    if ( page_state_is(pg, free) )
+    if ( page_state_is(pg, offlined) )
     {
-        /* Free pages are reserve directly */
         reserve_heap_page(pg);
         *status = PG_OFFLINE_OFFLINED;
     }
-    else if ( page_state_is(pg, offlined) )
-    {
-        *status = PG_OFFLINE_OFFLINED;
-    }
     else if ( (owner = page_get_owner_and_reference(pg)) )
     {
             *status = PG_OFFLINE_OWNED | PG_OFFLINE_PENDING |