|
From: <sv...@va...> - 2013-12-01 10:54:13
|
Author: bart
Date: Sun Dec 1 10:54:06 2013
New Revision: 13729
Log:
xen: XENMEM_machphys_mfn_list hypercall
The XENMEM_machphys_mfn_list implementation reads 'max_extents' and
'extents_start'. It writes to the array at 'extents_start', and writes the
number of extents written into the 'nr_extents' field.
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-memory.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:54:06 2013
@@ -103,6 +103,16 @@
(Addr)ARG2, sizeof(vki_xen_domid_t));
break;
+ case VKI_XENMEM_machphys_mfn_list: {
+ struct vki_xen_machphys_mfn_list *arg =
+ (struct vki_xen_machphys_mfn_list *)ARG2;
+ PRE_MEM_READ("XENMEM_machphys_mfn_list max_extents",
+ (Addr)&arg->max_extents, sizeof(arg->max_extents));
+ PRE_MEM_READ("XENMEM_machphys_mfn_list extent_start",
+ (Addr)&arg->extent_start, sizeof(arg->extent_start));
+ break;
+ }
+
case VKI_XENMEM_set_memory_map: {
struct vki_xen_foreign_memory_map *arg =
(struct vki_xen_foreign_memory_map *)ARG2;
@@ -755,6 +765,15 @@
break;
}
+ case VKI_XENMEM_machphys_mfn_list: {
+ struct vki_xen_machphys_mfn_list *arg =
+ (struct vki_xen_machphys_mfn_list *)ARG2;
+ POST_MEM_WRITE((Addr)&arg->nr_extents, sizeof(arg->nr_extents));
+ POST_MEM_WRITE((Addr)arg->extent_start.p,
+ sizeof(vki_xen_pfn_t) * arg->nr_extents);
+ break;
+ }
+
case VKI_XENMEM_get_sharing_freed_pages:
case VKI_XENMEM_get_sharing_shared_pages:
/* No outputs */
Modified: trunk/include/vki/vki-xen-memory.h
==============================================================================
--- trunk/include/vki/vki-xen-memory.h (original)
+++ trunk/include/vki/vki-xen-memory.h Sun Dec 1 10:54:06 2013
@@ -40,6 +40,12 @@
vki_xen_domid_t domid;
};
+struct vki_xen_machphys_mfn_list {
+ unsigned int max_extents; /* IN */
+ VKI_XEN_GUEST_HANDLE(vki_xen_pfn_t) extent_start; /* OUT */
+ unsigned int nr_extents; /* OUT */
+};
+
#endif // __VKI_XEN_MEMORY_H
/*--------------------------------------------------------------------*/
|