From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Xen-devel <xen-devel@lists.xen.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>
Subject: [PATCH 02/13] xen: Infratructure for XEN_TMEM_* hypercalls
Date: Thu, 28 Nov 2013 18:56:50 +0000 [thread overview]
Message-ID: <1385665021-5392-3-git-send-email-andrew.cooper3@citrix.com> (raw)
In-Reply-To: <1385665021-5392-1-git-send-email-andrew.cooper3@citrix.com>
and an implementation of XEN_TMEM_control save_begin.
Xen will read various fields at various time, but write nothing back for a
save_begin subop.
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
coregrind/m_syswrap/syswrap-xen.c | 75 ++++++++++++++++++++++++++++++++++++-
include/vki/vki-xen-tmem.h | 75 +++++++++++++++++++++++++++++++++++++
include/vki/vki-xen.h | 2 +
3 files changed, 151 insertions(+), 1 deletion(-)
create mode 100644 include/vki/vki-xen-tmem.h
diff --git a/coregrind/m_syswrap/syswrap-xen.c b/coregrind/m_syswrap/syswrap-xen.c
index 0314451..e80c05d 100644
--- a/coregrind/m_syswrap/syswrap-xen.c
+++ b/coregrind/m_syswrap/syswrap-xen.c
@@ -670,6 +670,61 @@ PRE(hvm_op)
#undef PRE_XEN_HVMOP_READ
}
+PRE(tmem_op)
+{
+ struct vki_xen_tmem_op *tmem = (struct vki_xen_tmem_op *)ARG1;
+
+ PRINT("__HYPERVISOR_tmem_op ( %d )", tmem->cmd);
+
+ /* Common part for xen_tmem_op:
+ * vki_uint32_t cmd;
+ */
+ PRE_MEM_READ("__HYPERVISOR_tmem_op cmd", ARG1, sizeof(vki_uint32_t));
+
+
+#define __PRE_XEN_TMEMOP_READ(_tmem, _union, _field) \
+ PRE_MEM_READ("XEN_tmem_op_" #_tmem " u." #_union "." #_field, \
+ (Addr)&tmem->u._union._field, \
+ sizeof(tmem->u._union._field))
+#define PRE_XEN_TMEMOP_READ(_tmem, _field) \
+ __PRE_XEN_TMEMOP_READ(_tmem, _tmem, _field)
+
+ switch(tmem->cmd) {
+
+ case VKI_XEN_TMEM_control:
+
+ /* Common part for control hypercall:
+ * vki_int32_t pool_id;
+ * vki_uint32_t subop;
+ */
+ PRE_MEM_READ("__HYPERVISOR_tmem_op pool_id",
+ (Addr)&tmem->pool_id, sizeof(&tmem->pool_id));
+ PRE_XEN_TMEMOP_READ(ctrl, subop);
+
+ switch (tmem->u.ctrl.subop) {
+
+ case VKI_XEN_TMEMC_save_begin:
+ PRE_XEN_TMEMOP_READ(ctrl, cli_id);
+ PRE_XEN_TMEMOP_READ(ctrl, arg1);
+ PRE_XEN_TMEMOP_READ(ctrl, buf);
+ break;
+
+ default:
+ bad_subop(tid, layout, arrghs, status, flags,
+ "__HYPERVISOR_tmem_op_control", tmem->u.ctrl.subop);
+ }
+
+ break;
+
+ default:
+ bad_subop(tid, layout, arrghs, status, flags,
+ "__HYPERVISOR_tmem_op", ARG1);
+ }
+
+#undef PRE_XEN_TMEMOP_READ
+#undef __PRE_XEN_TMEMOP_READ
+}
+
POST(memory_op)
{
switch (ARG1) {
@@ -1080,6 +1135,24 @@ POST(hvm_op)
#undef POST_XEN_HVMOP_WRITE
}
+POST(tmem_op)
+{
+ struct vki_xen_tmem_op *tmem = (struct vki_xen_tmem_op *)ARG1;
+
+ switch(tmem->cmd) {
+
+ case VKI_XEN_TMEM_control:
+
+ switch(tmem->u.ctrl.subop) {
+ /* No outputs */
+ case VKI_XEN_TMEMC_save_begin:
+ break;
+ }
+
+ break;
+ }
+}
+
typedef
struct {
SyscallTableEntry entry;
@@ -1140,7 +1213,7 @@ static XenHypercallTableEntry hypercall_table[] = {
HYPXY(__VKI_XEN_sysctl, sysctl, 1), // 35
HYPXY(__VKI_XEN_domctl, domctl, 1), // 36
// __VKI_XEN_kexec_op // 37
- // __VKI_XEN_tmem_op // 38
+ HYPXY(__VKI_XEN_tmem_op, tmem_op, 1), // 38
};
static void bad_before ( ThreadId tid,
diff --git a/include/vki/vki-xen-tmem.h b/include/vki/vki-xen-tmem.h
new file mode 100644
index 0000000..ab402f0
--- /dev/null
+++ b/include/vki/vki-xen-tmem.h
@@ -0,0 +1,75 @@
+#ifndef __VKI_XEN_TMEM_H
+#define __VKI_XEN_TMEM_H
+
+typedef VKI_XEN_GUEST_HANDLE(char) vki_xen_tmem_cli_va_t;
+
+
+/* version of ABI */
+#define VKI_XEN_TMEM_spec_version 1
+
+/* Commands to HYPERVISOR_tmem_op() */
+#define VKI_XEN_TMEM_control 0
+#define VKI_XEN_TMEM_new_pool 1
+#define VKI_XEN_TMEM_destroy_pool 2
+#define VKI_XEN_TMEM_new_page 3
+#define VKI_XEN_TMEM_put_page 4
+#define VKI_XEN_TMEM_get_page 5
+#define VKI_XEN_TMEM_flush_page 6
+#define VKI_XEN_TMEM_flush_object 7
+#define VKI_XEN_TMEM_read 8
+#define VKI_XEN_TMEM_write 9
+#define VKI_XEN_TMEM_xchg 10
+/* Privileged commands to HYPERVISOR_tmem_op() */
+#define VKI_XEN_tmem_auth 101
+#define VKI_XEN_tmem_restore_new 102
+
+/* for cmd = TMEM_CONTROL */
+struct vki_xen_tmem_ctrl {
+ vki_uint32_t subop;
+
+/* Subops for HYPERVISOR_tmem_op(TMEM_CONTROL) */
+#define VKI_XEN_TMEMC_thaw 0
+#define VKI_XEN_TMEMC_freeze 1
+#define VKI_XEN_TMEMC_flush 2
+#define VKI_XEN_TMEMC_destroy 3
+#define VKI_XEN_TMEMC_list 4
+#define VKI_XEN_TMEMC_set_weight 5
+#define VKI_XEN_TMEMC_set_cap 6
+#define VKI_XEN_TMEMC_set_compress 7
+#define VKI_XEN_TMEMC_query_freeable_mb 8
+#define VKI_XEN_TMEMC_save_begin 10
+#define VKI_XEN_TMEMC_save_get_version 11
+#define VKI_XEN_TMEMC_save_get_maxpools 12
+#define VKI_XEN_TMEMC_save_get_client_weight 13
+#define VKI_XEN_TMEMC_save_get_client_cap 14
+#define VKI_XEN_TMEMC_save_get_client_flags 15
+#define VKI_XEN_TMEMC_save_get_pool_flags 16
+#define VKI_XEN_TMEMC_save_get_pool_npages 17
+#define VKI_XEN_TMEMC_save_get_pool_uuid 18
+#define VKI_XEN_TMEMC_save_get_next_page 19
+#define VKI_XEN_TMEMC_save_get_next_inv 20
+#define VKI_XEN_TMEMC_save_end 21
+#define VKI_XEN_TMEMC_restore_begin 30
+#define VKI_XEN_TMEMC_restore_put_page 32
+#define VKI_XEN_TMEMC_restore_flush_page 33
+
+ vki_uint32_t cli_id;
+ vki_uint32_t arg1;
+ vki_uint32_t arg2;
+ vki_uint64_t oid[3];
+ vki_xen_tmem_cli_va_t buf;
+};
+
+struct vki_xen_tmem_op {
+ vki_uint32_t cmd;
+ vki_int32_t pool_id;
+ union {
+ struct vki_xen_tmem_ctrl ctrl;
+ } u;
+};
+
+#endif // __VKI_XEN_TMEM_H
+
+/*--------------------------------------------------------------------*/
+/*--- end ---*/
+/*--------------------------------------------------------------------*/
diff --git a/include/vki/vki-xen.h b/include/vki/vki-xen.h
index 87fbb4f..e2f3d81 100644
--- a/include/vki/vki-xen.h
+++ b/include/vki/vki-xen.h
@@ -58,6 +58,7 @@ typedef vki_uint16_t vki_xen_domid_t;
#endif
DEFINE_VKI_XEN_GUEST_HANDLE(void);
+DEFINE_VKI_XEN_GUEST_HANDLE(char);
DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_pfn_t);
__DEFINE_VKI_XEN_GUEST_HANDLE(vki_ulong, unsigned long);
@@ -84,6 +85,7 @@ struct vki_xenctl_bitmap {
#include <vki/vki-xen-gnttab.h>
#include <vki/vki-xen-version.h>
#include <vki/vki-xen-hvm.h>
+#include <vki/vki-xen-tmem.h>
#endif // __VKI_XEN_H
--
1.7.10.4
next prev parent reply other threads:[~2013-11-28 18:56 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-28 18:56 [PATCH 00/13] Valgrind patches for hypercalls Andrew Cooper
2013-11-28 18:56 ` [PATCH 01/13] xen: Fix XEN_SYSCTL_getdomaininfolist for version 0xa Andrew Cooper
2013-11-28 18:56 ` Andrew Cooper [this message]
2013-11-28 18:56 ` [PATCH 03/13] xen: XENMEM_maximum_ram_page hypercall Andrew Cooper
2013-11-28 18:56 ` [PATCH 04/13] xen: XENMEM_maximum_gpfn hypercall Andrew Cooper
2013-11-28 18:56 ` [PATCH 05/13] xen: XENMEM_machphys_mfn_list hypercall Andrew Cooper
2013-11-28 18:56 ` [PATCH 06/13] xen: XENMEM_add_to_physmap hypercall Andrew Cooper
2013-11-29 11:17 ` Ian Campbell
2013-11-28 18:56 ` [PATCH 07/13] xen: XENMEM_remove_from_physmap hypercall Andrew Cooper
2013-11-28 18:56 ` [PATCH 08/13] xen: XEN_DOMCTL_gethvmcontext hypercall Andrew Cooper
2013-11-28 18:56 ` [PATCH 09/13] xen: XEN_DOMCTL_getpageframeinfo3 hypercall Andrew Cooper
2013-11-28 18:56 ` [PATCH 10/13] xen: XEN_DOMCTL_sethvmcontext hypercall Andrew Cooper
2013-11-29 11:22 ` Ian Campbell
2013-11-28 18:56 ` [PATCH 11/13] xen: XEN_DOMCTL_shadow_op hypercall Andrew Cooper
2013-11-29 11:25 ` Ian Campbell
2013-11-29 11:27 ` Andrew Cooper
2013-11-28 18:57 ` [PATCH 12/13] xen: XEN_SYSCTL_readconsole hypercall Andrew Cooper
2013-11-28 18:57 ` [PATCH 13/13] xen: XEN_SYSCTL_debugkeys hypercall Andrew Cooper
2013-11-29 11:45 ` [PATCH 00/13] Valgrind patches for hypercalls Ian Campbell
2013-12-02 10:37 ` Ian Campbell
2013-12-02 10:46 ` Andrew Cooper
2013-12-02 10:49 ` Ian Campbell
2013-12-02 10:55 ` Andrew Cooper
2013-12-02 11:16 ` Ian Campbell
2013-12-02 14:25 ` Ian Campbell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1385665021-5392-3-git-send-email-andrew.cooper3@citrix.com \
--to=andrew.cooper3@citrix.com \
--cc=xen-devel@lists.xen.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).