|
From: <sv...@va...> - 2013-12-01 10:56:34
|
Author: bart
Date: Sun Dec 1 10:56:28 2013
New Revision: 13733
Log:
xen: XEN_DOMCTL_getpageframeinfo3 hypercall
Xen reads 'num' and the 'array' pointer from ARG1, and proceeds to read and
modify-in-place the entire userspace array.
From: Andrew Cooper <and...@ci...>
Signed-off-by: Andrew Cooper <and...@ci...>
Signed-off-by: Ian Campbell <ian...@ci...>
Modified:
trunk/coregrind/m_syswrap/syswrap-xen.c
trunk/include/vki/vki-xen-domctl.h
Modified: trunk/coregrind/m_syswrap/syswrap-xen.c
==============================================================================
--- trunk/coregrind/m_syswrap/syswrap-xen.c (original)
+++ trunk/coregrind/m_syswrap/syswrap-xen.c Sun Dec 1 10:56:28 2013
@@ -673,6 +673,14 @@
(Addr)&domctl->u.cpuid, sizeof(domctl->u.cpuid));
break;
+ case VKI_XEN_DOMCTL_getpageframeinfo3:
+ PRE_XEN_DOMCTL_READ(getpageframeinfo3, num);
+ PRE_XEN_DOMCTL_READ(getpageframeinfo3, array.p);
+ PRE_MEM_READ("XEN_DOMCTL_getpageframeinfo3 *u.getpageframeinfo3.array.p",
+ (Addr)domctl->u.getpageframeinfo3.array.p,
+ domctl->u.getpageframeinfo3.num * sizeof(vki_xen_pfn_t));
+ break;
+
case VKI_XEN_DOMCTL_getvcpuextstate:
__PRE_XEN_DOMCTL_READ(getvcpuextstate, vcpuextstate, vcpu);
__PRE_XEN_DOMCTL_READ(getvcpuextstate, vcpuextstate, xfeature_mask);
@@ -1182,6 +1190,12 @@
__POST_XEN_DOMCTL_WRITE(getvcpucontext, vcpucontext, ctxt.p);
break;
+ case VKI_XEN_DOMCTL_getpageframeinfo3:
+ POST_MEM_WRITE((Addr)domctl->u.getpageframeinfo3.array.p,
+ domctl->u.getpageframeinfo3.num * sizeof(vki_xen_pfn_t));
+ break;
+
+
case VKI_XEN_DOMCTL_getvcpuextstate:
__POST_XEN_DOMCTL_WRITE(getvcpuextstate, vcpuextstate, xfeature_mask);
__POST_XEN_DOMCTL_WRITE(getvcpuextstate, vcpuextstate, size);
Modified: trunk/include/vki/vki-xen-domctl.h
==============================================================================
--- trunk/include/vki/vki-xen-domctl.h (original)
+++ trunk/include/vki/vki-xen-domctl.h Sun Dec 1 10:56:28 2013
@@ -163,6 +163,10 @@
typedef struct vki_xen_domctl_nodeaffinity vki_xen_domctl_nodeaffinity_t;
DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_nodeaffinity_t);
+struct vki_xen_domctl_getpageframeinfo3 {
+ vki_xen_uint64_aligned_t num; /* IN */
+ VKI_XEN_GUEST_HANDLE_64(vki_xen_pfn_t) array; /* IN/OUT */
+};
struct vki_xen_domctl_vcpuaffinity {
vki_uint32_t vcpu; /* IN */
@@ -278,7 +282,7 @@
//struct vki_xen_domctl_getmemlist getmemlist;
//struct vki_xen_domctl_getpageframeinfo getpageframeinfo;
//struct vki_xen_domctl_getpageframeinfo2 getpageframeinfo2;
- //struct vki_xen_domctl_getpageframeinfo3 getpageframeinfo3;
+ struct vki_xen_domctl_getpageframeinfo3 getpageframeinfo3;
struct vki_xen_domctl_nodeaffinity nodeaffinity;
struct vki_xen_domctl_vcpuaffinity vcpuaffinity;
//struct vki_xen_domctl_shadow_op shadow_op;
|