From nobody Thu Jul 3 16:54:33 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1533505797912326.21767001370176; Sun, 5 Aug 2018 14:49:57 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 3B5963084041; Sun, 5 Aug 2018 21:49:56 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id F064E18828; Sun, 5 Aug 2018 21:49:55 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 9F7DD18037F2; Sun, 5 Aug 2018 21:49:55 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w75LnVs7006463 for ; Sun, 5 Aug 2018 17:49:31 -0400 Received: by smtp.corp.redhat.com (Postfix) id 09B6817B06; Sun, 5 Aug 2018 21:49:31 +0000 (UTC) Received: from mx1.redhat.com (ext-mx08.extmail.prod.ext.phx2.redhat.com [10.5.110.32]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 01D0118A3A for ; Sun, 5 Aug 2018 21:49:28 +0000 (UTC) Received: from out1-smtp.messagingengine.com (out1-smtp.messagingengine.com [66.111.4.25]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id C0B9AC057F92 for ; Sun, 5 Aug 2018 21:49:26 +0000 (UTC) Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailout.nyi.internal (Postfix) with ESMTP id 37C7B20DC6; Sun, 5 Aug 2018 17:49:26 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Sun, 05 Aug 2018 17:49:26 -0400 Received: from localhost.localdomain (ip5b40bfaa.dynamic.kabel-deutschland.de [91.64.191.170]) by mail.messagingengine.com (Postfix) with ESMTPA id 7F9E310269; Sun, 5 Aug 2018 17:49:25 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:in-reply-to:in-reply-to:message-id:mime-version :references:references:subject:to:x-me-sender:x-me-sender :x-sasl-enc; s=fm3; bh=HEfs9yrzTOt8CrAZdcVQVxwfME6wrtCDCSTaX9CuH 6w=; b=Nju40sgKobVVOF+MC76Lbc9BXBcx/uc9tGi4hNXJG/9Unc8eqLPItXBNQ vbVSH42UeDvJ/D/C5EWi/it3Sm1mpngGj0/dGZ0fNnrD43y+EheNiPLhwmMgCrbi sgGBacXKKHLc4eM1V0hbKeySTAuUCipsCjimXSMyY0/E1G/ZWH5AOJ5Md0nzyFmY KmKXJSPuMoFZ1SeezbqS2C1DMqXAmzy3eY54uFJ6lDgXTVWPcYnggsfduSNc8BgH wiawckFT4+gv3M31g1B+VdO8QYS6kwYCJDzNcUSQXpckVola112c/Mchmgo+V3ai rWhzHhV+QvApkuO01DzRjvw9r3YGg== X-ME-Proxy: X-ME-Sender: From: =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?= To: libvir-list@redhat.com Date: Sun, 5 Aug 2018 23:48:49 +0200 Message-Id: <28cfe4a30ef7014c19267faf3bd65af31fa1659c.1533505662.git-series.marmarek@invisiblethingslab.com> In-Reply-To: References: MIME-Version: 1.0 In-Reply-To: References: X-Greylist: Sender passed SPF test, Sender IP whitelisted by DNSRBL, ACL 209 matched, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Sun, 05 Aug 2018 21:49:26 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Sun, 05 Aug 2018 21:49:26 +0000 (UTC) for IP:'66.111.4.25' DOMAIN:'out1-smtp.messagingengine.com' HELO:'out1-smtp.messagingengine.com' FROM:'marmarek@invisiblethingslab.com' RCPT:'' X-RedHat-Spam-Score: -0.701 (DKIM_SIGNED, DKIM_VALID, RCVD_IN_DNSWL_LOW, SPF_HELO_PASS) 66.111.4.25 out1-smtp.messagingengine.com 66.111.4.25 out1-smtp.messagingengine.com X-Scanned-By: MIMEDefang 2.78 on 10.5.110.32 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 07/10] libxl: add support for PVH X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.40]); Sun, 05 Aug 2018 21:49:56 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Since this is something between PV and HVM, it makes sense to put the setting in place where domain type is specified. To enable it, use .... It is also included in capabilities.xml, for every supported HVM guest type - it doesn't seems to be any other requirement (besides new enough Xen). Signed-off-by: Marek Marczykowski-G=C3=B3recki --- docs/formatcaps.html.in | 4 +-- docs/schemas/domaincommon.rng | 1 +- src/libxl/libxl_capabilities.c | 23 ++++++++++++++++++-- src/libxl/libxl_conf.c | 41 ++++++++++++++++++++++++++++++----- src/libxl/libxl_driver.c | 6 +++-- 5 files changed, 64 insertions(+), 11 deletions(-) diff --git a/docs/formatcaps.html.in b/docs/formatcaps.html.in index 34a74a9..1f17aa9 100644 --- a/docs/formatcaps.html.in +++ b/docs/formatcaps.html.in @@ -104,8 +104,8 @@
machine
Machine type, for use in machine= attribute of os/type element in domain XML. For example Xen - supports xenfv for HVM or xenpv for - PV.
+ supports xenfv for HVM, xenpv for + PV, or xenpvh for PVHv2.
domain
Supported domain type, named b= y the type attribute.
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index eded1ca..d32b0cb 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -341,6 +341,7 @@ xenpv xenfv + xenpvh diff --git a/src/libxl/libxl_capabilities.c b/src/libxl/libxl_capabilities.c index 18596c7..e7b26f1 100644 --- a/src/libxl/libxl_capabilities.c +++ b/src/libxl/libxl_capabilities.c @@ -57,6 +57,7 @@ struct guest_arch { virArch arch; int bits; int hvm; + int pvh; int pae; int nonpae; int ia64_be; @@ -491,13 +492,29 @@ libxlCapsInitGuests(libxl_ctx *ctx, virCapsPtr caps) guest_archs[i].nonpae =3D nonpae; if (ia64_be) guest_archs[i].ia64_be =3D ia64_be; + + /* On Xen >=3D 4.9 add PVH for each HVM guest, and do it only = once */ + if ((ver_info->xen_version_major > 4 || + (ver_info->xen_version_major =3D=3D 4 && + ver_info->xen_version_minor >=3D 9)) && + hvm && i =3D=3D nr_guest_archs-1) { + i =3D nr_guest_archs; + /* Too many arch flavours - highly unlikely ! */ + if (i >=3D ARRAY_CARDINALITY(guest_archs)) + continue; + nr_guest_archs++; + guest_archs[i].arch =3D arch; + guest_archs[i].pvh =3D 1; + } } } regfree(®ex); =20 for (i =3D 0; i < nr_guest_archs; ++i) { virCapsGuestPtr guest; - char const *const xen_machines[] =3D {guest_archs[i].hvm ? "xenfv"= : "xenpv"}; + char const *const xen_machines[] =3D { + guest_archs[i].hvm ? "xenfv" : + (guest_archs[i].pvh ? "xenpvh" : "xenpv")}; virCapsGuestMachinePtr *machines; =20 if ((machines =3D virCapabilitiesAllocMachines(xen_machines, 1)) = =3D=3D NULL) @@ -557,7 +574,9 @@ libxlCapsInitGuests(libxl_ctx *ctx, virCapsPtr caps) 1, 0) =3D=3D NULL) return -1; + } =20 + if (guest_archs[i].hvm || guest_archs[i].pvh) { if (virCapabilitiesAddGuestFeature(guest, "hap", 1, @@ -580,7 +599,7 @@ libxlMakeDomainOSCaps(const char *machine, =20 os->supported =3D true; =20 - if (STREQ(machine, "xenpv")) + if (STREQ(machine, "xenpv") || STREQ(machine, "xenpvh")) return 0; =20 capsLoader->supported =3D true; diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c index f3da0ed..2df40ec 100644 --- a/src/libxl/libxl_conf.c +++ b/src/libxl/libxl_conf.c @@ -133,8 +133,11 @@ libxlMakeDomCreateInfo(libxl_ctx *ctx, =20 libxl_domain_create_info_init(c_info); =20 - if (def->os.type =3D=3D VIR_DOMAIN_OSTYPE_HVM) { - c_info->type =3D LIBXL_DOMAIN_TYPE_HVM; + if (def->os.type =3D=3D VIR_DOMAIN_OSTYPE_HVM || + (def->os.type =3D=3D VIR_DOMAIN_OSTYPE_XEN && + STREQ(def->os.machine, "xenpvh"))) { + c_info->type =3D def->os.type =3D=3D VIR_DOMAIN_OSTYPE_HVM ? + LIBXL_DOMAIN_TYPE_HVM : LIBXL_DOMAIN_TYPE_PVH; switch ((virTristateSwitch) def->features[VIR_DOMAIN_FEATURE_HAP])= { case VIR_TRISTATE_SWITCH_OFF: libxl_defbool_set(&c_info->hap, false); @@ -276,7 +279,8 @@ libxlMakeDomBuildInfo(virDomainDefPtr def, virDomainClockDef clock =3D def->clock; libxl_ctx *ctx =3D cfg->ctx; libxl_domain_build_info *b_info =3D &d_config->b_info; - int hvm =3D def->os.type =3D=3D VIR_DOMAIN_OSTYPE_HVM; + bool hvm =3D def->os.type =3D=3D VIR_DOMAIN_OSTYPE_HVM; + bool pvh =3D STREQ(def->os.machine, "xenpvh"); size_t i; size_t nusbdevice =3D 0; =20 @@ -284,6 +288,8 @@ libxlMakeDomBuildInfo(virDomainDefPtr def, =20 if (hvm) libxl_domain_build_info_init_type(b_info, LIBXL_DOMAIN_TYPE_HVM); + else if (pvh) + libxl_domain_build_info_init_type(b_info, LIBXL_DOMAIN_TYPE_PVH); else libxl_domain_build_info_init_type(b_info, LIBXL_DOMAIN_TYPE_PV); =20 @@ -375,7 +381,7 @@ libxlMakeDomBuildInfo(virDomainDefPtr def, def->mem.cur_balloon =3D VIR_ROUND_UP(def->mem.cur_balloon, 1024); b_info->max_memkb =3D virDomainDefGetMemoryInitial(def); b_info->target_memkb =3D def->mem.cur_balloon; - if (hvm) { + if (hvm || pvh) { if (caps && def->cpu && def->cpu->mode =3D=3D (VIR_CPU_MODE_HOST_PASSTHROU= GH)) { bool hasHwVirt =3D false; @@ -647,6 +653,31 @@ libxlMakeDomBuildInfo(virDomainDefPtr def, return -1; } #endif + } else if (pvh) { +#ifdef LIBXL_HAVE_BUILDINFO_KERNEL + if (VIR_STRDUP(b_info->cmdline, def->os.cmdline) < 0) + return -1; + if (VIR_STRDUP(b_info->kernel, def->os.kernel) < 0) + return -1; + if (VIR_STRDUP(b_info->ramdisk, def->os.initrd) < 0) + return -1; +#else + /* + * Shouldn't happen as LIBXL_HAVE_BUILDINFO_KERNEL is there since = Xen + * 4.5, but PVHv2 since 4.9. + */ + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("PVH guest type not supported")); +#endif +#ifdef LIBXL_HAVE_BUILDINFO_BOOTLOADER + if (VIR_STRDUP(b_info->bootloader, def->os.bootloader) < 0) + return -1; + if (def->os.bootloaderArgs) { + if (!(b_info->bootloader_args =3D + virStringSplit(def->os.bootloaderArgs, " \t\n", 0))) + return -1; + } +#endif } else { /* * For compatibility with the legacy xen toolstack, default to pyg= rub @@ -1230,7 +1261,7 @@ libxlMakeNic(virDomainDefPtr def, STRNEQ(l_nic->model, "netfront")) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("only model 'netfront' is supported for " - "Xen PV domains")); + "Xen PV(H) domains")); return -1; } if (VIR_STRDUP(x_nic->model, l_nic->model) < 0) diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c index 5a5e792..052a0da 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -6271,9 +6271,11 @@ libxlConnectGetDomainCapabilities(virConnectPtr conn, emulatorbin =3D "/usr/bin/qemu-system-x86_64"; =20 if (machine) { - if (STRNEQ(machine, "xenpv") && STRNEQ(machine, "xenfv")) { + if (STRNEQ(machine, "xenpv") && + STRNEQ(machine, "xenpvh") && + STRNEQ(machine, "xenfv")) { virReportError(VIR_ERR_INVALID_ARG, "%s", - _("Xen only supports 'xenpv' and 'xenfv' machin= es")); + _("Xen only supports 'xenpv', 'xenpvh' and 'xen= fv' machines")); goto cleanup; } } else { --=20 git-series 0.9.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list