aboutsummaryrefslogtreecommitdiffstats
path: root/xen/arch/x86/x86_64/mm.c
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2013-02-28 11:09:39 +0100
committerJan Beulich <jbeulich@suse.com>2013-02-28 11:09:39 +0100
commit8db1e759556d3a3832f92e91d6c848c5ce2d3fa1 (patch)
tree4dfe7fd0f989b23a377df70973f569491f618551 /xen/arch/x86/x86_64/mm.c
parent703ac3abcfc5f649c038070867ee12c67f730548 (diff)
downloadxen-8db1e759556d3a3832f92e91d6c848c5ce2d3fa1.tar.gz
xen-8db1e759556d3a3832f92e91d6c848c5ce2d3fa1.tar.bz2
xen-8db1e759556d3a3832f92e91d6c848c5ce2d3fa1.zip
x86: rework hypercall argument translation area setup
... using the new per-domain mapping management functions, adding destroy_perdomain_mapping() to the previously introduced pair. Rather than using an order-1 Xen heap allocation, use (currently 2) individual domain heap pages to populate space in the per-domain mapping area. Also fix a benign off-by-one mistake in is_compat_arg_xlat_range(). 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.c20
1 files changed, 5 insertions, 15 deletions
diff --git a/xen/arch/x86/x86_64/mm.c b/xen/arch/x86/x86_64/mm.c
index 8a5e1cc0fa..8cd0d30e84 100644
--- a/xen/arch/x86/x86_64/mm.c
+++ b/xen/arch/x86/x86_64/mm.c
@@ -832,27 +832,17 @@ void __init zap_low_mappings(void)
__PAGE_HYPERVISOR);
}
-void *compat_arg_xlat_virt_base(void)
-{
- return current->arch.compat_arg_xlat;
-}
-
int setup_compat_arg_xlat(struct vcpu *v)
{
- unsigned int order = get_order_from_bytes(COMPAT_ARG_XLAT_SIZE);
-
- v->arch.compat_arg_xlat = alloc_xenheap_pages(order,
- MEMF_node(vcpu_to_node(v)));
-
- return v->arch.compat_arg_xlat ? 0 : -ENOMEM;
+ return create_perdomain_mapping(v->domain, ARG_XLAT_START(v),
+ PFN_UP(COMPAT_ARG_XLAT_SIZE),
+ NULL, NIL(struct page_info *));
}
void free_compat_arg_xlat(struct vcpu *v)
{
- unsigned int order = get_order_from_bytes(COMPAT_ARG_XLAT_SIZE);
-
- free_xenheap_pages(v->arch.compat_arg_xlat, order);
- v->arch.compat_arg_xlat = NULL;
+ destroy_perdomain_mapping(v->domain, ARG_XLAT_START(v),
+ PFN_UP(COMPAT_ARG_XLAT_SIZE));
}
void cleanup_frame_table(struct mem_hotadd_info *info)