aboutsummaryrefslogtreecommitdiffstats
path: root/xen/arch/x86/x86_64/mm.c
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2013-01-23 14:10:40 +0100
committerJan Beulich <jbeulich@suse.com>2013-01-23 14:10:40 +0100
commitb52f69ab85a35d6140ca5e8ec74240fb1e0a5e7e (patch)
tree9e73a87f33a1124851985a29c7c1bbb8f4e8264c /xen/arch/x86/x86_64/mm.c
parent02955ee2d15a43ec18f60146064ccb8841909779 (diff)
downloadxen-b52f69ab85a35d6140ca5e8ec74240fb1e0a5e7e.tar.gz
xen-b52f69ab85a35d6140ca5e8ec74240fb1e0a5e7e.tar.bz2
xen-b52f69ab85a35d6140ca5e8ec74240fb1e0a5e7e.zip
x86: properly use map_domain_page() during domain creation/destruction
This involves no longer storing virtual addresses of the per-domain mapping L2 and L3 page tables. Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Keir Fraser <keir@xen.org>
Diffstat (limited to 'xen/arch/x86/x86_64/mm.c')
-rw-r--r--xen/arch/x86/x86_64/mm.c18
1 files changed, 7 insertions, 11 deletions
diff --git a/xen/arch/x86/x86_64/mm.c b/xen/arch/x86/x86_64/mm.c
index c6e09a4041..89897e3581 100644
--- a/xen/arch/x86/x86_64/mm.c
+++ b/xen/arch/x86/x86_64/mm.c
@@ -823,9 +823,8 @@ void __init setup_idle_pagetable(void)
{
/* Install per-domain mappings for idle domain. */
l4e_write(&idle_pg_table[l4_table_offset(PERDOMAIN_VIRT_START)],
- l4e_from_page(
- virt_to_page(idle_vcpu[0]->domain->arch.mm_perdomain_l3),
- __PAGE_HYPERVISOR));
+ l4e_from_page(idle_vcpu[0]->domain->arch.perdomain_l3_pg,
+ __PAGE_HYPERVISOR));
}
void __init zap_low_mappings(void)
@@ -850,21 +849,18 @@ void *compat_arg_xlat_virt_base(void)
int setup_compat_arg_xlat(struct vcpu *v)
{
unsigned int order = get_order_from_bytes(COMPAT_ARG_XLAT_SIZE);
- struct page_info *pg;
- pg = alloc_domheap_pages(NULL, order, 0);
- if ( pg == NULL )
- return -ENOMEM;
+ v->arch.compat_arg_xlat = alloc_xenheap_pages(order,
+ MEMF_node(vcpu_to_node(v)));
- v->arch.compat_arg_xlat = page_to_virt(pg);
- return 0;
+ return v->arch.compat_arg_xlat ? 0 : -ENOMEM;
}
void free_compat_arg_xlat(struct vcpu *v)
{
unsigned int order = get_order_from_bytes(COMPAT_ARG_XLAT_SIZE);
- if ( v->arch.compat_arg_xlat != NULL )
- free_domheap_pages(virt_to_page(v->arch.compat_arg_xlat), order);
+
+ free_xenheap_pages(v->arch.compat_arg_xlat, order);
v->arch.compat_arg_xlat = NULL;
}