x86/mm: set_p2m_entry() should return 0 on error
authorKeir Fraser <keir.fraser@citrix.com>
Mon, 30 Nov 2009 10:38:58 +0000 (10:38 +0000)
committerKeir Fraser <keir.fraser@citrix.com>
Mon, 30 Nov 2009 10:38:58 +0000 (10:38 +0000)
set_p2m_entry() ignores halfway errors.
It should return 0 on error.

Signed-off-by: Kouya Shimura <kouya@jp.fujitsu.com>
Acked-by: Tim Deegan <Tim.Deegan@citrix.com>
xen/arch/x86/mm/p2m.c

index aebfdd18a6e75bd71826c7ace1065f0307eef77c..df992586b812bde038ad4a5745b35d497bd42d35 100644 (file)
@@ -1497,7 +1497,7 @@ int set_p2m_entry(struct domain *d, unsigned long gfn, mfn_t mfn,
 {
     unsigned long todo = 1ul << page_order;
     unsigned int order;
-    int rc = 0;
+    int rc = 1;
 
     while ( todo )
     {
@@ -1506,7 +1506,8 @@ int set_p2m_entry(struct domain *d, unsigned long gfn, mfn_t mfn,
                 9 : 0;
         else
             order = 0;
-        rc = d->arch.p2m->set_entry(d, gfn, mfn, order, p2mt);
+        if ( !d->arch.p2m->set_entry(d, gfn, mfn, order, p2mt) )
+            rc = 0;
         gfn += 1ul << order;
         if ( mfn_x(mfn) != INVALID_MFN )
             mfn = _mfn(mfn_x(mfn) + (1ul << order));