aboutsummaryrefslogtreecommitdiffstats
path: root/xen/arch/x86/x86_64
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2012-12-10 11:18:25 +0100
committerJan Beulich <jbeulich@suse.com>2012-12-10 11:18:25 +0100
commite93e0d9d73ce77bd1f3471af68a194b47e0e8c45 (patch)
treebe7768d89381228bc3ed5f4867db23f631a78054 /xen/arch/x86/x86_64
parentedaa3f893f8f046e05099bc0d087b276a90451d4 (diff)
downloadxen-e93e0d9d73ce77bd1f3471af68a194b47e0e8c45.tar.gz
xen-e93e0d9d73ce77bd1f3471af68a194b47e0e8c45.tar.bz2
xen-e93e0d9d73ce77bd1f3471af68a194b47e0e8c45.zip
streamline guest copy operations
- use the variants not validating the VA range when writing back structures/fields to the same space that they were previously read from - when only a single field of a structure actually changed, copy back just that field where possible - consolidate copying back results in a few places Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Keir Fraser <keir@xen.org>
Diffstat (limited to 'xen/arch/x86/x86_64')
-rw-r--r--xen/arch/x86/x86_64/compat/mm.c10
-rw-r--r--xen/arch/x86/x86_64/mm.c6
2 files changed, 8 insertions, 8 deletions
diff --git a/xen/arch/x86/x86_64/compat/mm.c b/xen/arch/x86/x86_64/compat/mm.c
index 808e033a3f..a455c6c2c3 100644
--- a/xen/arch/x86/x86_64/compat/mm.c
+++ b/xen/arch/x86/x86_64/compat/mm.c
@@ -122,7 +122,7 @@ int compat_arch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg)
#define XLAT_memory_map_HNDL_buffer(_d_, _s_) ((void)0)
XLAT_memory_map(&cmp, nat);
#undef XLAT_memory_map_HNDL_buffer
- if ( copy_to_guest(arg, &cmp, 1) )
+ if ( __copy_to_guest(arg, &cmp, 1) )
rc = -EFAULT;
break;
@@ -148,7 +148,7 @@ int compat_arch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg)
XLAT_pod_target(&cmp, nat);
- if ( copy_to_guest(arg, &cmp, 1) )
+ if ( __copy_to_guest(arg, &cmp, 1) )
{
if ( rc == __HYPERVISOR_memory_op )
hypercall_cancel_continuation();
@@ -200,7 +200,7 @@ int compat_arch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg)
}
xmml.nr_extents = i;
- if ( copy_to_guest(arg, &xmml, 1) )
+ if ( __copy_to_guest(arg, &xmml, 1) )
rc = -EFAULT;
break;
@@ -219,7 +219,7 @@ int compat_arch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg)
if ( copy_from_guest(&meo, arg, 1) )
return -EFAULT;
rc = do_mem_event_op(op, meo.domain, (void *) &meo);
- if ( !rc && copy_to_guest(arg, &meo, 1) )
+ if ( !rc && __copy_to_guest(arg, &meo, 1) )
return -EFAULT;
break;
}
@@ -231,7 +231,7 @@ int compat_arch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg)
if ( mso.op == XENMEM_sharing_op_audit )
return mem_sharing_audit();
rc = do_mem_event_op(op, mso.domain, (void *) &mso);
- if ( !rc && copy_to_guest(arg, &mso, 1) )
+ if ( !rc && __copy_to_guest(arg, &mso, 1) )
return -EFAULT;
break;
}
diff --git a/xen/arch/x86/x86_64/mm.c b/xen/arch/x86/x86_64/mm.c
index 35653b7d64..d2f2125181 100644
--- a/xen/arch/x86/x86_64/mm.c
+++ b/xen/arch/x86/x86_64/mm.c
@@ -1074,7 +1074,7 @@ long subarch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg)
}
xmml.nr_extents = i;
- if ( copy_to_guest(arg, &xmml, 1) )
+ if ( __copy_to_guest(arg, &xmml, 1) )
return -EFAULT;
break;
@@ -1092,7 +1092,7 @@ long subarch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg)
if ( copy_from_guest(&meo, arg, 1) )
return -EFAULT;
rc = do_mem_event_op(op, meo.domain, (void *) &meo);
- if ( !rc && copy_to_guest(arg, &meo, 1) )
+ if ( !rc && __copy_to_guest(arg, &meo, 1) )
return -EFAULT;
break;
}
@@ -1104,7 +1104,7 @@ long subarch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg)
if ( mso.op == XENMEM_sharing_op_audit )
return mem_sharing_audit();
rc = do_mem_event_op(op, mso.domain, (void *) &mso);
- if ( !rc && copy_to_guest(arg, &mso, 1) )
+ if ( !rc && __copy_to_guest(arg, &mso, 1) )
return -EFAULT;
break;
}