Note that we can't adjust HVM_IOREQSRV_BUFIOREQ_* to properly obey
name space rules, as these constants as in use by callers of the libxc
interface.
Signed-off-by: Jan Beulich
Reviewed-by: Wei Liu
Reviewed-by: Paul Durrant
Reviewed-by: Andrew Cooper
--- a/tools/libxc/include/xenctrl.h
+++ b/tools/libxc/include/xenctrl.h
@@ -41,6 +41,7 @@
#include
#include
#include
+#include
#include
#include
#include
--- a/tools/libxc/xc_domain.c
+++ b/tools/libxc/xc_domain.c
@@ -1416,23 +1416,14 @@ int xc_hvm_create_ioreq_server(xc_interf
int handle_bufioreq,
ioservid_t *id)
{
-DECLARE_HYPERCALL_BUFFER(xen_hvm_create_ioreq_server_t, arg);
+DECLARE_HVMCTL(create_ioreq_server, domid,
+ .handle_bufioreq = handle_bufioreq);
int rc;
-arg = xc_hypercall_buffer_alloc(xch, arg, sizeof(*arg));
-if ( arg == NULL )
-return -1;
-
-arg->domid = domid;
-arg->handle_bufioreq = handle_bufioreq;
-
-rc = xencall2(xch->xcall, __HYPERVISOR_hvm_op,
- HVMOP_create_ioreq_server,
- HYPERCALL_BUFFER_AS_ARG(arg));
+rc = do_hvmctl(xch, );
-*id = arg->id;
+*id = hvmctl.u.create_ioreq_server.id;
-xc_hypercall_buffer_free(xch, arg);
return rc;
}
@@ -1443,84 +1434,52 @@ int xc_hvm_get_ioreq_server_info(xc_inte
xen_pfn_t *bufioreq_pfn,
evtchn_port_t *bufioreq_port)
{
-DECLARE_HYPERCALL_BUFFER(xen_hvm_get_ioreq_server_info_t, arg);
+DECLARE_HVMCTL(get_ioreq_server_info, domid,
+ .id = id);
int rc;
-arg = xc_hypercall_buffer_alloc(xch, arg, sizeof(*arg));
-if ( arg == NULL )
-return -1;
-
-arg->domid = domid;
-arg->id = id;
-
-rc = xencall2(xch->xcall, __HYPERVISOR_hvm_op,
- HVMOP_get_ioreq_server_info,
- HYPERCALL_BUFFER_AS_ARG(arg));
+rc = do_hvmctl(xch, );
if ( rc != 0 )
-goto done;
+return rc;
if ( ioreq_pfn )
-*ioreq_pfn = arg->ioreq_pfn;
+*ioreq_pfn = hvmctl.u.get_ioreq_server_info.ioreq_pfn;
if ( bufioreq_pfn )
-*bufioreq_pfn = arg->bufioreq_pfn;
+*bufioreq_pfn = hvmctl.u.get_ioreq_server_info.bufioreq_pfn;
if ( bufioreq_port )
-*bufioreq_port = arg->bufioreq_port;
+*bufioreq_port = hvmctl.u.get_ioreq_server_info.bufioreq_port;
-done:
-xc_hypercall_buffer_free(xch, arg);
-return rc;
+return 0;
}
int xc_hvm_map_io_range_to_ioreq_server(xc_interface *xch, domid_t domid,
ioservid_t id, int is_mmio,
uint64_t start, uint64_t end)
{
-DECLARE_HYPERCALL_BUFFER(xen_hvm_io_range_t, arg);
-int rc;
-
-arg = xc_hypercall_buffer_alloc(xch, arg, sizeof(*arg));
-if ( arg == NULL )
-return -1;
-
-arg->domid = domid;
-arg->id = id;
-arg->type = is_mmio ? HVMOP_IO_RANGE_MEMORY : HVMOP_IO_RANGE_PORT;
-arg->start = start;
-arg->end = end;
-
-rc = xencall2(xch->xcall, __HYPERVISOR_hvm_op,
- HVMOP_map_io_range_to_ioreq_server,
- HYPERCALL_BUFFER_AS_ARG(arg));
+DECLARE_HVMCTL(map_io_range_to_ioreq_server, domid,
+ .id = id,
+ .type = is_mmio ? XEN_HVMCTL_IO_RANGE_MEMORY
+ : XEN_HVMCTL_IO_RANGE_PORT,
+ .start = start,
+ .end = end);
-xc_hypercall_buffer_free(xch, arg);
-return rc;
+return do_hvmctl(xch, );
}
int xc_hvm_unmap_io_range_from_ioreq_server(xc_interface *xch, domid_t domid,
ioservid_t id, int is_mmio,
uint64_t start, uint64_t end)
{
-DECLARE_HYPERCALL_BUFFER(xen_hvm_io_range_t, arg);
-int rc;
-
-arg = xc_hypercall_buffer_alloc(xch, arg, sizeof(*arg));
-if ( arg == NULL )
-return -1;
+DECLARE_HVMCTL(unmap_io_range_from_ioreq_server, domid,
+ .id = id,
+ .type = is_mmio ? XEN_HVMCTL_IO_RANGE_MEMORY
+ : XEN_HVMCTL_IO_RANGE_PORT,
+ .start = start,
+ .end = end);
-arg->domid = domid;
-arg->id = id;
-arg->type = is_mmio ? HVMOP_IO_RANGE_MEMORY : HVMOP_IO_RANGE_PORT;
-arg->start = start;
-arg->end = end;
-
-rc = xencall2(xch->xcall, __HYPERVISOR_hvm_op,
- HVMOP_unmap_io_range_from_ioreq_server,
- HYPERCALL_BUFFER_AS_ARG(arg));
-
-xc_hypercall_buffer_free(xch, arg);
-return rc;
+return do_hvmctl(xch, );
}
int xc_hvm_map_pcidev_to_ioreq_server(xc_interface *xch, domid_t domid,
@@ -1528,37 +1487,23 @@ int