|
From: <sv...@va...> - 2013-12-01 10:51:30
|
Author: bart
Date: Sun Dec 1 10:51:19 2013
New Revision: 13725
Log:
xen: Fix XEN_SYSCTL_getdomaininfolist for version 0xa
From: Andrew Cooper <and...@ci...>
Also add a default case so future bumps of the sysctl interface version dont
result in spurious passes of the IOCTL handler.
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-sysctl.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:51:19 2013
@@ -401,6 +401,17 @@
PRE_XEN_SYSCTL_READ(getdomaininfolist_00000009, max_domains);
PRE_XEN_SYSCTL_READ(getdomaininfolist_00000009, buffer);
break;
+ case 0x0000000a:
+ PRE_XEN_SYSCTL_READ(getdomaininfolist_0000000a, first_domain);
+ PRE_XEN_SYSCTL_READ(getdomaininfolist_0000000a, max_domains);
+ PRE_XEN_SYSCTL_READ(getdomaininfolist_0000000a, buffer);
+ break;
+ default:
+ VG_(dmsg)("WARNING: XEN_SYSCTL_getdomaininfolist for sysctl version "
+ "%"PRIx32" not implemented yet\n",
+ sysctl->interface_version);
+ SET_STATUS_Failure(VKI_EINVAL);
+ return;
}
break;
@@ -801,6 +812,12 @@
sizeof(*sysctl->u.getdomaininfolist_00000009.buffer.p)
* sysctl->u.getdomaininfolist_00000009.num_domains);
break;
+ case 0x0000000a:
+ POST_XEN_SYSCTL_WRITE(getdomaininfolist_0000000a, num_domains);
+ POST_MEM_WRITE((Addr)sysctl->u.getdomaininfolist_0000000a.buffer.p,
+ sizeof(*sysctl->u.getdomaininfolist_0000000a.buffer.p)
+ * sysctl->u.getdomaininfolist_0000000a.num_domains);
+ break;
}
break;
Modified: trunk/include/vki/vki-xen-sysctl.h
==============================================================================
--- trunk/include/vki/vki-xen-sysctl.h (original)
+++ trunk/include/vki/vki-xen-sysctl.h Sun Dec 1 10:51:19 2013
@@ -56,6 +56,15 @@
vki_uint32_t num_domains;
};
+struct vki_xen_sysctl_getdomaininfolist_0000000a {
+ /* IN variables. */
+ vki_xen_domid_t first_domain;
+ vki_uint32_t max_domains;
+ VKI_XEN_GUEST_HANDLE_64(vki_xen_domctl_getdomaininfo_00000009_t) buffer;
+ /* OUT variables. */
+ vki_uint32_t num_domains;
+};
+
#define VKI_XEN_SYSCTL_CPUPOOL_OP_CREATE 1 /* C */
#define VKI_XEN_SYSCTL_CPUPOOL_OP_DESTROY 2 /* D */
#define VKI_XEN_SYSCTL_CPUPOOL_OP_INFO 3 /* I */
@@ -139,6 +148,7 @@
//struct vki_xen_sysctl_perfc_op perfc_op;
struct vki_xen_sysctl_getdomaininfolist_00000008 getdomaininfolist_00000008;
struct vki_xen_sysctl_getdomaininfolist_00000009 getdomaininfolist_00000009;
+ struct vki_xen_sysctl_getdomaininfolist_0000000a getdomaininfolist_0000000a;
//struct vki_xen_sysctl_debug_keys debug_keys;
//struct vki_xen_sysctl_getcpuinfo getcpuinfo;
//struct vki_xen_sysctl_availheap availheap;
|