|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v3 05/10] tools/libxc: Move xc_version() out of xc_private.c into its own file
kexec-tools uses xc_version(), meaning that it is not a private API. As we're
going to extend the functionality substantially, move it to its own file.
Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Acked-by: Anthony PERARD <anthony.perard@xxxxxxxxxx>
---
CC: Wei Liu <wl@xxxxxxx>
CC: Anthony PERARD <anthony.perard@xxxxxxxxxx>
CC: Juergen Gross <jgross@xxxxxxxx>
---
tools/libs/ctrl/Makefile.common | 1 +
tools/libs/ctrl/xc_private.c | 66 --------------------------
tools/libs/ctrl/xc_private.h | 7 ---
tools/libs/ctrl/xc_version.c | 83 +++++++++++++++++++++++++++++++++
4 files changed, 84 insertions(+), 73 deletions(-)
create mode 100644 tools/libs/ctrl/xc_version.c
diff --git a/tools/libs/ctrl/Makefile.common b/tools/libs/ctrl/Makefile.common
index 0a09c28fd369..4e3680c123f6 100644
--- a/tools/libs/ctrl/Makefile.common
+++ b/tools/libs/ctrl/Makefile.common
@@ -16,6 +16,7 @@ OBJS-y += xc_pm.o
OBJS-y += xc_cpu_hotplug.o
OBJS-y += xc_vm_event.o
OBJS-y += xc_vmtrace.o
+OBJS-y += xc_version.o
OBJS-y += xc_monitor.o
OBJS-y += xc_mem_paging.o
OBJS-y += xc_mem_access.o
diff --git a/tools/libs/ctrl/xc_private.c b/tools/libs/ctrl/xc_private.c
index 6293a45531d8..fd4a13a57a9d 100644
--- a/tools/libs/ctrl/xc_private.c
+++ b/tools/libs/ctrl/xc_private.c
@@ -490,72 +490,6 @@ int xc_sysctl(xc_interface *xch, struct xen_sysctl *sysctl)
return do_sysctl(xch, sysctl);
}
-int xc_version(xc_interface *xch, int cmd, void *arg)
-{
- DECLARE_HYPERCALL_BOUNCE(arg, 0, XC_HYPERCALL_BUFFER_BOUNCE_OUT); /* Size
unknown until cmd decoded */
- size_t sz;
- int rc;
-
- switch ( cmd )
- {
- case XENVER_version:
- sz = 0;
- break;
- case XENVER_extraversion:
- sz = sizeof(xen_extraversion_t);
- break;
- case XENVER_compile_info:
- sz = sizeof(xen_compile_info_t);
- break;
- case XENVER_capabilities:
- sz = sizeof(xen_capabilities_info_t);
- break;
- case XENVER_changeset:
- sz = sizeof(xen_changeset_info_t);
- break;
- case XENVER_platform_parameters:
- sz = sizeof(xen_platform_parameters_t);
- break;
- case XENVER_get_features:
- sz = sizeof(xen_feature_info_t);
- break;
- case XENVER_pagesize:
- sz = 0;
- break;
- case XENVER_guest_handle:
- sz = sizeof(xen_domain_handle_t);
- break;
- case XENVER_commandline:
- sz = sizeof(xen_commandline_t);
- break;
- case XENVER_build_id:
- {
- xen_build_id_t *build_id = (xen_build_id_t *)arg;
- sz = sizeof(*build_id) + build_id->len;
- HYPERCALL_BOUNCE_SET_DIR(arg, XC_HYPERCALL_BUFFER_BOUNCE_BOTH);
- break;
- }
- default:
- ERROR("xc_version: unknown command %d\n", cmd);
- return -EINVAL;
- }
-
- HYPERCALL_BOUNCE_SET_SIZE(arg, sz);
-
- if ( (sz != 0) && xc_hypercall_bounce_pre(xch, arg) )
- {
- PERROR("Could not bounce buffer for version hypercall");
- return -ENOMEM;
- }
-
- rc = do_xen_version(xch, cmd, HYPERCALL_BUFFER(arg));
-
- if ( sz != 0 )
- xc_hypercall_bounce_post(xch, arg);
-
- return rc;
-}
-
unsigned long xc_make_page_below_4G(
xc_interface *xch, uint32_t domid, unsigned long mfn)
{
diff --git a/tools/libs/ctrl/xc_private.h b/tools/libs/ctrl/xc_private.h
index 8faabaea67f3..754da8840979 100644
--- a/tools/libs/ctrl/xc_private.h
+++ b/tools/libs/ctrl/xc_private.h
@@ -216,13 +216,6 @@ void xc__hypercall_buffer_cache_release(xc_interface *xch);
* Hypercall interfaces.
*/
-static inline int do_xen_version(xc_interface *xch, int cmd,
xc_hypercall_buffer_t *dest)
-{
- DECLARE_HYPERCALL_BUFFER_ARGUMENT(dest);
- return xencall2(xch->xcall, __HYPERVISOR_xen_version,
- cmd, HYPERCALL_BUFFER_AS_ARG(dest));
-}
-
static inline int do_physdev_op(xc_interface *xch, int cmd, void *op, size_t
len)
{
int ret = -1;
diff --git a/tools/libs/ctrl/xc_version.c b/tools/libs/ctrl/xc_version.c
new file mode 100644
index 000000000000..60e107dcee0b
--- /dev/null
+++ b/tools/libs/ctrl/xc_version.c
@@ -0,0 +1,83 @@
+/* SPDX-License-Identifier: LGPL-2.1 */
+/*
+ * xc_version.c
+ *
+ * Wrappers aound XENVER_* hypercalls
+ */
+
+#include "xc_private.h"
+#include <assert.h>
+
+static int do_xen_version(xc_interface *xch, int cmd,
+ xc_hypercall_buffer_t *dest)
+{
+ DECLARE_HYPERCALL_BUFFER_ARGUMENT(dest);
+ return xencall2(xch->xcall, __HYPERVISOR_xen_version,
+ cmd, HYPERCALL_BUFFER_AS_ARG(dest));
+}
+
+int xc_version(xc_interface *xch, int cmd, void *arg)
+{
+ DECLARE_HYPERCALL_BOUNCE(arg, 0, XC_HYPERCALL_BUFFER_BOUNCE_OUT); /* Size
unknown until cmd decoded */
+ size_t sz;
+ int rc;
+
+ switch ( cmd )
+ {
+ case XENVER_version:
+ sz = 0;
+ break;
+ case XENVER_extraversion:
+ sz = sizeof(xen_extraversion_t);
+ break;
+ case XENVER_compile_info:
+ sz = sizeof(xen_compile_info_t);
+ break;
+ case XENVER_capabilities:
+ sz = sizeof(xen_capabilities_info_t);
+ break;
+ case XENVER_changeset:
+ sz = sizeof(xen_changeset_info_t);
+ break;
+ case XENVER_platform_parameters:
+ sz = sizeof(xen_platform_parameters_t);
+ break;
+ case XENVER_get_features:
+ sz = sizeof(xen_feature_info_t);
+ break;
+ case XENVER_pagesize:
+ sz = 0;
+ break;
+ case XENVER_guest_handle:
+ sz = sizeof(xen_domain_handle_t);
+ break;
+ case XENVER_commandline:
+ sz = sizeof(xen_commandline_t);
+ break;
+ case XENVER_build_id:
+ {
+ xen_build_id_t *build_id = (xen_build_id_t *)arg;
+ sz = sizeof(*build_id) + build_id->len;
+ HYPERCALL_BOUNCE_SET_DIR(arg, XC_HYPERCALL_BUFFER_BOUNCE_BOTH);
+ break;
+ }
+ default:
+ ERROR("xc_version: unknown command %d\n", cmd);
+ return -EINVAL;
+ }
+
+ HYPERCALL_BOUNCE_SET_SIZE(arg, sz);
+
+ if ( (sz != 0) && xc_hypercall_bounce_pre(xch, arg) )
+ {
+ PERROR("Could not bounce buffer for version hypercall");
+ return -ENOMEM;
+ }
+
+ rc = do_xen_version(xch, cmd, HYPERCALL_BUFFER(arg));
+
+ if ( sz != 0 )
+ xc_hypercall_bounce_post(xch, arg);
+
+ return rc;
+}
--
2.30.2
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |