|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH XEN 1/2] x86/libxc: add an arch domain config parameter to xc_domain_create
With the addition of HVMlite the hypervisor now always requires a non-null
arch domain config, which is different between HVM and PV guests.
Add a new parameter to xc_domain_create that contains a pointer to an arch
domain config. If the pointer is null, create a default arch domain config
based on guest type.
Fix all the in-tree callers to provide a null arch domain config in order to
mimic previous behaviour.
Signed-off-by: Roger Pau Monnà <roger.pau@xxxxxxxxxx>
---
tools/libxc/include/xenctrl.h | 14 +++-------
tools/libxc/xc_domain.c | 51 +++++++++++++++--------------------
tools/libxl/libxl_create.c | 5 ++--
tools/ocaml/libs/xc/xenctrl_stubs.c | 2 +-
tools/python/xen/lowlevel/xc/xc.c | 2 +-
tools/xenstore/init-xenstore-domain.c | 2 +-
6 files changed, 29 insertions(+), 47 deletions(-)
diff --git a/tools/libxc/include/xenctrl.h b/tools/libxc/include/xenctrl.h
index 2fec1fb..01a6dda 100644
--- a/tools/libxc/include/xenctrl.h
+++ b/tools/libxc/include/xenctrl.h
@@ -502,17 +502,9 @@ typedef union
typedef struct xen_arch_domainconfig xc_domain_configuration_t;
-int xc_domain_create_config(xc_interface *xch,
- uint32_t ssidref,
- xen_domain_handle_t handle,
- uint32_t flags,
- uint32_t *pdomid,
- xc_domain_configuration_t *config);
-int xc_domain_create(xc_interface *xch,
- uint32_t ssidref,
- xen_domain_handle_t handle,
- uint32_t flags,
- uint32_t *pdomid);
+int xc_domain_create(xc_interface *xch, uint32_t ssidref,
+ xen_domain_handle_t handle, uint32_t flags,
+ uint32_t *pdomid, xc_domain_configuration_t *config);
/* Functions to produce a dump of a given domain
diff --git a/tools/libxc/xc_domain.c b/tools/libxc/xc_domain.c
index e7278dd..0839e03 100644
--- a/tools/libxc/xc_domain.c
+++ b/tools/libxc/xc_domain.c
@@ -26,16 +26,31 @@
#include <xen/memory.h>
#include <xen/hvm/hvm_op.h>
-int xc_domain_create_config(xc_interface *xch,
- uint32_t ssidref,
- xen_domain_handle_t handle,
- uint32_t flags,
- uint32_t *pdomid,
- xc_domain_configuration_t *config)
+int xc_domain_create(xc_interface *xch, uint32_t ssidref,
+ xen_domain_handle_t handle, uint32_t flags,
+ uint32_t *pdomid, xc_domain_configuration_t *config)
{
+ xc_domain_configuration_t lconfig;
int err;
DECLARE_DOMCTL;
+ if ( config == NULL )
+ {
+ memset(&lconfig, 0, sizeof(lconfig));
+
+#if defined (__i386) || defined(__x86_64__)
+ if ( flags & XEN_DOMCTL_CDF_hvm_guest )
+ lconfig.emulation_flags = XEN_X86_EMU_ALL;
+#elif defined (__arm__) || defined(__aarch64__)
+ lconfig.gic_version = XEN_DOMCTL_CONFIG_GIC_NATIVE;
+ lconfig.nr_spis = 0;
+#else
+#error Architecture not supported
+#endif
+
+ config = &lconfig;
+ }
+
domctl.cmd = XEN_DOMCTL_createdomain;
domctl.domain = (domid_t)*pdomid;
domctl.u.createdomain.ssidref = ssidref;
@@ -52,30 +67,6 @@ int xc_domain_create_config(xc_interface *xch,
return 0;
}
-int xc_domain_create(xc_interface *xch,
- uint32_t ssidref,
- xen_domain_handle_t handle,
- uint32_t flags,
- uint32_t *pdomid)
-{
- xc_domain_configuration_t config;
-
- memset(&config, 0, sizeof(config));
-
-#if defined (__i386) || defined(__x86_64__)
- /* No arch-specific configuration for now */
-#elif defined (__arm__) || defined(__aarch64__)
- config.gic_version = XEN_DOMCTL_CONFIG_GIC_NATIVE;
- config.nr_spis = 0;
-#else
- errno = ENOSYS;
- return -1;
-#endif
-
- return xc_domain_create_config(xch, ssidref, handle,
- flags, pdomid, &config);
-}
-
int xc_domain_cacheflush(xc_interface *xch, uint32_t domid,
xen_pfn_t start_pfn, xen_pfn_t nr_pfns)
{
diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c
index f0fee00..4fbe7ac 100644
--- a/tools/libxl/libxl_create.c
+++ b/tools/libxl/libxl_create.c
@@ -528,9 +528,8 @@ int libxl__domain_make(libxl__gc *gc, libxl_domain_config
*d_config,
/* Valid domid here means we're soft resetting. */
if (!libxl_domid_valid_guest(*domid)) {
- ret = xc_domain_create_config(ctx->xch, info->ssidref,
- handle, flags, domid,
- xc_config);
+ ret = xc_domain_create(ctx->xch, info->ssidref, handle, flags, domid,
+ xc_config);
if (ret < 0) {
LOGE(ERROR, "domain creation fail");
rc = ERROR_FAIL;
diff --git a/tools/ocaml/libs/xc/xenctrl_stubs.c
b/tools/ocaml/libs/xc/xenctrl_stubs.c
index b7de615..393156c 100644
--- a/tools/ocaml/libs/xc/xenctrl_stubs.c
+++ b/tools/ocaml/libs/xc/xenctrl_stubs.c
@@ -175,7 +175,7 @@ CAMLprim value stub_xc_domain_create(value xch, value
ssidref,
}
caml_enter_blocking_section();
- result = xc_domain_create(_H(xch), c_ssidref, h, c_flags, &domid);
+ result = xc_domain_create(_H(xch), c_ssidref, h, c_flags, &domid, NULL);
caml_leave_blocking_section();
if (result < 0)
diff --git a/tools/python/xen/lowlevel/xc/xc.c
b/tools/python/xen/lowlevel/xc/xc.c
index 26290a3..5a0ea33 100644
--- a/tools/python/xen/lowlevel/xc/xc.c
+++ b/tools/python/xen/lowlevel/xc/xc.c
@@ -136,7 +136,7 @@ static PyObject *pyxc_domain_create(XcObject *self,
}
if ( (ret = xc_domain_create(self->xc_handle, ssidref,
- handle, flags, &dom)) < 0 )
+ handle, flags, &dom, NULL)) < 0 )
return pyxc_error_to_exception(self->xc_handle);
if ( target )
diff --git a/tools/xenstore/init-xenstore-domain.c
b/tools/xenstore/init-xenstore-domain.c
index 0d12169..297afe5 100644
--- a/tools/xenstore/init-xenstore-domain.c
+++ b/tools/xenstore/init-xenstore-domain.c
@@ -28,7 +28,7 @@ static int build(xc_interface *xch, int argc, char** argv)
rv = xc_flask_context_to_sid(xch, argv[3], strlen(argv[3]), &ssid);
if (rv) goto err;
- rv = xc_domain_create(xch, ssid, handle, 0, &domid);
+ rv = xc_domain_create(xch, ssid, handle, 0, &domid, NULL);
if (rv) goto err;
rv = xc_domain_max_vcpus(xch, domid, 1);
if (rv) goto err;
--
1.9.5 (Apple Git-50.3)
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |