|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 2/4] tools/libxc: Define VM_EVENT type
Define the type for each of the supported vm_event rings (paging,
monitor and sharing) and replace the ring param field with this type.
Signed-off-by: Petre Pircalabu <ppircalabu@xxxxxxxxxxxxxxx>
---
tools/libxc/xc_monitor.c | 2 +-
tools/libxc/xc_private.h | 6 +--
tools/libxc/xc_vm_event.c | 90 +++++++++++++++++++++++++++++----------------
xen/include/public/domctl.h | 21 +++++++----
4 files changed, 77 insertions(+), 42 deletions(-)
diff --git a/tools/libxc/xc_monitor.c b/tools/libxc/xc_monitor.c
index 4ac823e..15e6a0e 100644
--- a/tools/libxc/xc_monitor.c
+++ b/tools/libxc/xc_monitor.c
@@ -24,7 +24,7 @@
void *xc_monitor_enable(xc_interface *xch, uint32_t domain_id, uint32_t *port)
{
- return xc_vm_event_enable(xch, domain_id, HVM_PARAM_MONITOR_RING_PFN,
+ return xc_vm_event_enable(xch, domain_id, XEN_VM_EVENT_TYPE_MONITOR,
port);
}
diff --git a/tools/libxc/xc_private.h b/tools/libxc/xc_private.h
index 705eaa9..be22986 100644
--- a/tools/libxc/xc_private.h
+++ b/tools/libxc/xc_private.h
@@ -430,10 +430,10 @@ int xc_ffs64(uint64_t x);
int xc_vm_event_control(xc_interface *xch, uint32_t domain_id, unsigned int op,
unsigned int mode, uint32_t *port);
/*
- * Enables vm_event and returns the mapped ring page indicated by param.
- * param can be HVM_PARAM_PAGING/ACCESS/SHARING_RING_PFN
+ * Enables vm_event and returns the mapped ring page indicated by type.
+ * type can be XEN_VM_EVENT_TYPE_(PAGING/MONITOR/SHARING)
*/
-void *xc_vm_event_enable(xc_interface *xch, uint32_t domain_id, int param,
+void *xc_vm_event_enable(xc_interface *xch, uint32_t domain_id, int type,
uint32_t *port);
int do_dm_op(xc_interface *xch, uint32_t domid, unsigned int nr_bufs, ...);
diff --git a/tools/libxc/xc_vm_event.c b/tools/libxc/xc_vm_event.c
index 8674607..dd34cec 100644
--- a/tools/libxc/xc_vm_event.c
+++ b/tools/libxc/xc_vm_event.c
@@ -39,16 +39,71 @@ int xc_vm_event_control(xc_interface *xch, uint32_t
domain_id, unsigned int op,
return rc;
}
-void *xc_vm_event_enable(xc_interface *xch, uint32_t domain_id, int param,
+static int xc_vm_event_ring_pfn_param(int type, int *param)
+{
+ if ( !param )
+ return -EINVAL;
+
+ switch ( type )
+ {
+ case XEN_VM_EVENT_TYPE_PAGING:
+ *param = HVM_PARAM_PAGING_RING_PFN;
+ break;
+
+ case XEN_VM_EVENT_TYPE_MONITOR:
+ *param = HVM_PARAM_MONITOR_RING_PFN;
+ break;
+
+ case XEN_VM_EVENT_TYPE_SHARING:
+ *param = HVM_PARAM_SHARING_RING_PFN;
+ break;
+
+ default:
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+static int xc_vm_event_domctl(int type, unsigned int *param)
+{
+ if ( !param )
+ return -EINVAL;
+
+ switch ( type )
+ {
+ case XEN_VM_EVENT_TYPE_PAGING:
+ *param = XEN_DOMCTL_VM_EVENT_OP_PAGING;
+ break;
+
+ case XEN_VM_EVENT_TYPE_MONITOR:
+ *param = XEN_DOMCTL_VM_EVENT_OP_MONITOR;
+ break;
+
+ case XEN_VM_EVENT_TYPE_SHARING:
+ *param = XEN_DOMCTL_VM_EVENT_OP_SHARING;
+ break;
+
+ default:
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+void *xc_vm_event_enable(xc_interface *xch, uint32_t domain_id, int type,
uint32_t *port)
{
void *ring_page = NULL;
uint64_t pfn;
xen_pfn_t ring_pfn, mmap_pfn;
- unsigned int op, mode;
+ unsigned int mode;
int rc1, rc2, saved_errno;
+ int param;
- if ( !port )
+ if ( !port ||
+ xc_vm_event_ring_pfn_param(type, ¶m) != 0 ||
+ xc_vm_event_domctl(type, &mode) )
{
errno = EINVAL;
return NULL;
@@ -94,34 +149,7 @@ void *xc_vm_event_enable(xc_interface *xch, uint32_t
domain_id, int param,
goto out;
}
- switch ( param )
- {
- case HVM_PARAM_PAGING_RING_PFN:
- op = XEN_VM_EVENT_ENABLE;
- mode = XEN_DOMCTL_VM_EVENT_OP_PAGING;
- break;
-
- case HVM_PARAM_MONITOR_RING_PFN:
- op = XEN_VM_EVENT_ENABLE;
- mode = XEN_DOMCTL_VM_EVENT_OP_MONITOR;
- break;
-
- case HVM_PARAM_SHARING_RING_PFN:
- op = XEN_VM_EVENT_ENABLE;
- mode = XEN_DOMCTL_VM_EVENT_OP_SHARING;
- break;
-
- /*
- * This is for the outside chance that the HVM_PARAM is valid but is
invalid
- * as far as vm_event goes.
- */
- default:
- errno = EINVAL;
- rc1 = -1;
- goto out;
- }
-
- rc1 = xc_vm_event_control(xch, domain_id, op, mode, port);
+ rc1 = xc_vm_event_control(xch, domain_id, XEN_VM_EVENT_ENABLE, mode, port);
if ( rc1 != 0 )
{
PERROR("Failed to enable vm_event\n");
diff --git a/xen/include/public/domctl.h b/xen/include/public/domctl.h
index 82b6967..ac4ced2 100644
--- a/xen/include/public/domctl.h
+++ b/xen/include/public/domctl.h
@@ -757,10 +757,17 @@ struct xen_domctl_gdbsx_domstatus {
/*
* There are currently three rings available for VM events:
- * sharing, monitor and paging. This hypercall allows one to
- * control these rings (enable/disable), as well as to signal
- * to the hypervisor to pull responses (resume) from the given
- * ring.
+ * sharing, monitor and paging
+ */
+
+#define XEN_VM_EVENT_TYPE_PAGING 1
+#define XEN_VM_EVENT_TYPE_MONITOR 2
+#define XEN_VM_EVENT_TYPE_SHARING 3
+
+/*
+ * This hypercall allows one to control the vm_event rings (enable/disable),
+ * as well as to signal to the hypervisor to pull responses (resume) from
+ * the given ring.
*/
#define XEN_VM_EVENT_ENABLE 0
#define XEN_VM_EVENT_DISABLE 1
@@ -780,7 +787,7 @@ struct xen_domctl_gdbsx_domstatus {
* EXDEV - guest has PoD enabled
* EBUSY - guest has or had paging enabled, ring buffer still active
*/
-#define XEN_DOMCTL_VM_EVENT_OP_PAGING 1
+#define XEN_DOMCTL_VM_EVENT_OP_PAGING XEN_VM_EVENT_TYPE_PAGING
/*
* Monitor helper.
@@ -804,7 +811,7 @@ struct xen_domctl_gdbsx_domstatus {
* EBUSY - guest has or had access enabled, ring buffer still active
*
*/
-#define XEN_DOMCTL_VM_EVENT_OP_MONITOR 2
+#define XEN_DOMCTL_VM_EVENT_OP_MONITOR XEN_VM_EVENT_TYPE_MONITOR
/*
* Sharing ENOMEM helper.
@@ -819,7 +826,7 @@ struct xen_domctl_gdbsx_domstatus {
* Note that shring can be turned on (as per the domctl below)
* *without* this ring being setup.
*/
-#define XEN_DOMCTL_VM_EVENT_OP_SHARING 3
+#define XEN_DOMCTL_VM_EVENT_OP_SHARING XEN_VM_EVENT_TYPE_SHARING
/* Use for teardown/setup of helper<->hypervisor interface for paging,
* access and sharing.*/
--
2.7.4
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |