Commit 3f3aaea2 authored by Konrad Rzeszutek Wilk's avatar Konrad Rzeszutek Wilk

xen/p2m: Move code around to allow for better re-usage.

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: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
parent f09d8432
...@@ -499,7 +499,7 @@ static bool alloc_p2m(unsigned long pfn) ...@@ -499,7 +499,7 @@ static bool alloc_p2m(unsigned long pfn)
return true; 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; unsigned topidx, mididx, idx;
...@@ -541,24 +541,9 @@ static bool __init __early_alloc_p2m(unsigned long pfn) ...@@ -541,24 +541,9 @@ static bool __init __early_alloc_p2m(unsigned long pfn)
} }
return idx != 0; return idx != 0;
} }
unsigned long __init set_phys_range_identity(unsigned long pfn_s,
unsigned long pfn_e)
{
unsigned long pfn;
if (unlikely(pfn_s >= MAX_P2M_PFN || pfn_e >= MAX_P2M_PFN))
return 0;
if (unlikely(xen_feature(XENFEAT_auto_translated_physmap)))
return pfn_e - pfn_s;
if (pfn_s > pfn_e) static bool __init early_alloc_p2m(unsigned long pfn)
return 0; {
for (pfn = (pfn_s & ~(P2M_MID_PER_PAGE * P2M_PER_PAGE - 1));
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 topidx = p2m_top_index(pfn);
unsigned long *mid_mfn_p; unsigned long *mid_mfn_p;
unsigned long **mid; unsigned long **mid;
...@@ -582,12 +567,33 @@ unsigned long __init set_phys_range_identity(unsigned long pfn_s, ...@@ -582,12 +567,33 @@ unsigned long __init set_phys_range_identity(unsigned long pfn_s,
p2m_top_mfn_p[topidx] = mid_mfn_p; p2m_top_mfn_p[topidx] = mid_mfn_p;
p2m_top_mfn[topidx] = virt_to_mfn(mid_mfn_p); p2m_top_mfn[topidx] = virt_to_mfn(mid_mfn_p);
/* Note: we don't set mid_mfn_p[midix] here, /* Note: we don't set mid_mfn_p[midix] here,
* look in __early_alloc_p2m */ * look in early_alloc_p2m_middle */
} }
return true;
}
unsigned long __init set_phys_range_identity(unsigned long pfn_s,
unsigned long pfn_e)
{
unsigned long pfn;
if (unlikely(pfn_s >= MAX_P2M_PFN || pfn_e >= MAX_P2M_PFN))
return 0;
if (unlikely(xen_feature(XENFEAT_auto_translated_physmap)))
return pfn_e - pfn_s;
if (pfn_s > pfn_e)
return 0;
for (pfn = (pfn_s & ~(P2M_MID_PER_PAGE * P2M_PER_PAGE - 1));
pfn < ALIGN(pfn_e, (P2M_MID_PER_PAGE * P2M_PER_PAGE));
pfn += P2M_MID_PER_PAGE * P2M_PER_PAGE)
{
WARN_ON(!early_alloc_p2m(pfn));
} }
__early_alloc_p2m(pfn_s); early_alloc_p2m_middle(pfn_s);
__early_alloc_p2m(pfn_e); early_alloc_p2m_middle(pfn_e);
for (pfn = pfn_s; pfn < pfn_e; pfn++) for (pfn = pfn_s; pfn < pfn_e; pfn++)
if (!__set_phys_to_machine(pfn, IDENTITY_FRAME(pfn))) if (!__set_phys_to_machine(pfn, IDENTITY_FRAME(pfn)))
......
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