*/
#define LIBXL_HAVE_SET_PARAMETERS 1
+/*
+ * LIBXL_HAVE_PV_SHIM
+ *
+ * If this is defined, libxl_domain_build_info's pvh type information
+ * contains members pvshim, pvshim_path, pvshim_cmdline.
+ */
+#define LIBXL_HAVE_PV_SHIM 1
+
typedef char **libxl_string_list;
void libxl_string_list_dispose(libxl_string_list *sl);
int libxl_string_list_length(const libxl_string_list *sl);
}
break;
case LIBXL_DOMAIN_TYPE_PVH:
+ libxl_defbool_setdefault(&b_info->u.pvh.pvshim, false);
+ if (libxl_defbool_val(b_info->u.pvh.pvshim)) {
+ if (!b_info->u.pvh.pvshim_path)
+ b_info->u.pvh.pvshim_path =
+ libxl__sprintf(NOGC, "%s/%s",
+ libxl__xenfirmwaredir_path(),
+ PVSHIM_BASENAME);
+ if (!b_info->u.pvh.pvshim_cmdline)
+ b_info->u.pvh.pvshim_cmdline =
+ libxl__strdup(NOGC, PVSHIM_CMDLINE);
+ }
+
break;
default:
LOG(ERROR, "invalid domain type %s in create info",
break;
case LIBXL_DOMAIN_TYPE_PV:
- ret = libxl__build_pv(gc, domid, info, state);
- if (ret)
- goto out;
-
vments = libxl__calloc(gc, 11, sizeof(char *));
i = 0;
vments[i++] = "image/ostype";
break;
case LIBXL_DOMAIN_TYPE_PVH:
+ state->shim_path = info->u.pvh.pvshim_path;
+ state->shim_cmdline = info->u.pvh.pvshim_cmdline;
+
ret = libxl__build_hvm(gc, domid, d_config, state);
if (ret)
goto out;
xc_dom_loginit(ctx->xch);
- /* FIXME */
-#define LIBXL_PVSHIM_PATH "LIBXL_PVSHIM_PATH"
-#define LIBXL_PVSHIM_CMDLINE "LIBXL_PVSHIM_CMDLINE"
- state->shim_path = getenv(LIBXL_PVSHIM_PATH);
- if (state->shim_path) {
- state->shim_cmdline = getenv(LIBXL_PVSHIM_CMDLINE);
- LOG(WARN, "LIBXL_PVSHIM_PATH detected, using pv shim %s cmd %s",
- state->shim_path, state->shim_cmdline);
- }
-
/*
* If PVH and we have a shim override, use the shim cmdline.
* If PVH and no shim override, use the pv cmdline.
#define TAP_DEVICE_SUFFIX "-emu"
#define DOMID_XS_PATH "domid"
#define INVALID_DOMID ~0
+#define PVSHIM_BASENAME "xen-shim"
+#define PVSHIM_CMDLINE "pv-shim console=xen,pv sched=null loglvl=all guest_loglvl=all apic_verbosity=debug e820-verbose"
/* Size macros. */
#define __AC(X,Y) (X##Y)
# Use host's E820 for PCI passthrough.
("e820_host", libxl_defbool),
])),
- ("pvh", None),
+ ("pvh", Struct(None, [("pvshim", libxl_defbool),
+ ("pvshim_path", string),
+ ("pvshim_cmdline", string),
+ ])),
("invalid", None),
], keyvar_init_val = "LIBXL_DOMAIN_TYPE_INVALID")),