# HG changeset patch
# User Tim Deegan <Tim.Deegan@xxxxxxxxxxxxx>
# Date 1190021939 -3600
# Node ID babe17e7a4eeed5dda1c8e615363d922c93706af
# Parent f4bbd3f327e4308aa2aebf5484fc32d1d1ff4b41
[XEN] p2m: internal p2m_set_entry() function uses types rather than
having callers decode them.
Signed-off-by: Tim Deegan <Tim.Deegan@xxxxxxxxxxxxx>
---
xen/arch/x86/mm/p2m.c | 19 +++++++++----------
1 files changed, 9 insertions(+), 10 deletions(-)
diff -r f4bbd3f327e4 -r babe17e7a4ee xen/arch/x86/mm/p2m.c
--- a/xen/arch/x86/mm/p2m.c Fri Sep 14 16:40:49 2007 +0100
+++ b/xen/arch/x86/mm/p2m.c Mon Sep 17 10:38:59 2007 +0100
@@ -201,7 +201,7 @@ p2m_next_level(struct domain *d, mfn_t *
// Returns 0 on error (out of memory)
static int
-set_p2m_entry(struct domain *d, unsigned long gfn, mfn_t mfn, u32 l1e_flags)
+set_p2m_entry(struct domain *d, unsigned long gfn, mfn_t mfn, p2m_type_t p2mt)
{
// XXX -- this might be able to be faster iff current->domain == d
mfn_t table_mfn = pagetable_get_mfn(d->arch.phys_table);
@@ -245,7 +245,7 @@ set_p2m_entry(struct domain *d, unsigned
d->arch.p2m.max_mapped_pfn = gfn;
if ( mfn_valid(mfn) )
- entry_content = l1e_from_pfn(mfn_x(mfn), l1e_flags);
+ entry_content = l1e_from_pfn(mfn_x(mfn), p2m_type_to_flags(p2mt));
else
entry_content = l1e_empty();
@@ -328,11 +328,10 @@ int p2m_alloc_table(struct domain *d,
P2M_PRINTK("populating p2m table\n");
/* Initialise physmap tables for slot zero. Other code assumes this. */
- gfn = 0;
- mfn = _mfn(INVALID_MFN);
- if ( !set_p2m_entry(d, gfn, mfn, __PAGE_HYPERVISOR|_PAGE_USER) )
+ if ( !set_p2m_entry(d, 0, _mfn(INVALID_MFN), p2m_invalid) )
goto error;
+ /* Copy all existing mappings from the page list and m2p */
for ( entry = d->page_list.next;
entry != &d->page_list;
entry = entry->next )
@@ -348,7 +347,7 @@ int p2m_alloc_table(struct domain *d,
(gfn != 0x55555555L)
#endif
&& gfn != INVALID_M2P_ENTRY
- && !set_p2m_entry(d, gfn, mfn, __PAGE_HYPERVISOR|_PAGE_USER) )
+ && !set_p2m_entry(d, gfn, mfn, p2m_ram_rw) )
goto error;
}
@@ -663,7 +662,7 @@ p2m_remove_page(struct domain *d, unsign
return;
P2M_DEBUG("removing gfn=%#lx mfn=%#lx\n", gfn, mfn);
- set_p2m_entry(d, gfn, _mfn(INVALID_MFN), 0);
+ set_p2m_entry(d, gfn, _mfn(INVALID_MFN), p2m_invalid);
set_gpfn_from_mfn(mfn, INVALID_M2P_ENTRY);
}
@@ -727,14 +726,14 @@ guest_physmap_add_entry(struct domain *d
if ( mfn_valid(_mfn(mfn)) )
{
- set_p2m_entry(d, gfn, _mfn(mfn), p2m_type_to_flags(t));
+ set_p2m_entry(d, gfn, _mfn(mfn), t);
set_gpfn_from_mfn(mfn, gfn);
}
else
{
gdprintk(XENLOG_WARNING, "Adding bad mfn to p2m map (%#lx -> %#lx)\n",
gfn, mfn);
- set_p2m_entry(d, gfn, _mfn(INVALID_MFN), 0);
+ set_p2m_entry(d, gfn, _mfn(INVALID_MFN), p2m_invalid);
}
audit_p2m(d);
@@ -854,7 +853,7 @@ p2m_type_t p2m_change_type(struct domain
mfn = gfn_to_mfn(d, gfn, &pt);
if ( pt == ot )
- set_p2m_entry(d, gfn, mfn, p2m_type_to_flags(nt));
+ set_p2m_entry(d, gfn, mfn, nt);
p2m_unlock(d);
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|