xen/p2m: Move code around to allow for better re-usage.
authorKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Fri, 30 Mar 2012 15:45:01 +0000 (11:45 -0400)
committerKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Fri, 6 Apr 2012 21:02:59 +0000 (17:02 -0400)
We are going to be using the early_alloc_p2m (and
early_alloc_p2m_middle) code in follow up patches which
are not related to setting identity pages.

Hence lets move the code out in its own function and
rename them as appropiate.

Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
arch/x86/xen/p2m.c

index 1b267e7..3cc3afe 100644 (file)
@@ -499,7 +499,7 @@ static bool alloc_p2m(unsigned long pfn)
        return true;
 }
 
-static bool __init __early_alloc_p2m(unsigned long pfn)
+static bool __init early_alloc_p2m_middle(unsigned long pfn)
 {
        unsigned topidx, mididx, idx;
 
@@ -541,6 +541,36 @@ static bool __init __early_alloc_p2m(unsigned long pfn)
        }
        return idx != 0;
 }
+
+static bool __init early_alloc_p2m(unsigned long pfn)
+{
+       unsigned topidx = p2m_top_index(pfn);
+       unsigned long *mid_mfn_p;
+       unsigned long **mid;
+
+       mid = p2m_top[topidx];
+       mid_mfn_p = p2m_top_mfn_p[topidx];
+       if (mid == p2m_mid_missing) {
+               mid = extend_brk(PAGE_SIZE, PAGE_SIZE);
+
+               p2m_mid_init(mid);
+
+               p2m_top[topidx] = mid;
+
+               BUG_ON(mid_mfn_p != p2m_mid_missing_mfn);
+       }
+       /* And the save/restore P2M tables.. */
+       if (mid_mfn_p == p2m_mid_missing_mfn) {
+               mid_mfn_p = extend_brk(PAGE_SIZE, PAGE_SIZE);
+               p2m_mid_mfn_init(mid_mfn_p);
+
+               p2m_top_mfn_p[topidx] = mid_mfn_p;
+               p2m_top_mfn[topidx] = virt_to_mfn(mid_mfn_p);
+               /* Note: we don't set mid_mfn_p[midix] here,
+                * look in early_alloc_p2m_middle */
+       }
+       return true;
+}
 unsigned long __init set_phys_range_identity(unsigned long pfn_s,
                                      unsigned long pfn_e)
 {
@@ -559,35 +589,11 @@ unsigned long __init set_phys_range_identity(unsigned long pfn_s,
                pfn < ALIGN(pfn_e, (P2M_MID_PER_PAGE * P2M_PER_PAGE));
                pfn += P2M_MID_PER_PAGE * P2M_PER_PAGE)
        {
-               unsigned topidx = p2m_top_index(pfn);
-               unsigned long *mid_mfn_p;
-               unsigned long **mid;
-
-               mid = p2m_top[topidx];
-               mid_mfn_p = p2m_top_mfn_p[topidx];
-               if (mid == p2m_mid_missing) {
-                       mid = extend_brk(PAGE_SIZE, PAGE_SIZE);
-
-                       p2m_mid_init(mid);
-
-                       p2m_top[topidx] = mid;
-
-                       BUG_ON(mid_mfn_p != p2m_mid_missing_mfn);
-               }
-               /* And the save/restore P2M tables.. */
-               if (mid_mfn_p == p2m_mid_missing_mfn) {
-                       mid_mfn_p = extend_brk(PAGE_SIZE, PAGE_SIZE);
-                       p2m_mid_mfn_init(mid_mfn_p);
-
-                       p2m_top_mfn_p[topidx] = mid_mfn_p;
-                       p2m_top_mfn[topidx] = virt_to_mfn(mid_mfn_p);
-                       /* Note: we don't set mid_mfn_p[midix] here,
-                        * look in __early_alloc_p2m */
-               }
+               WARN_ON(!early_alloc_p2m(pfn));
        }
 
-       __early_alloc_p2m(pfn_s);
-       __early_alloc_p2m(pfn_e);
+       early_alloc_p2m_middle(pfn_s);
+       early_alloc_p2m_middle(pfn_e);
 
        for (pfn = pfn_s; pfn < pfn_e; pfn++)
                if (!__set_phys_to_machine(pfn, IDENTITY_FRAME(pfn)))