From nobody Tue Feb 10 00:22:29 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.39 as permitted sender) client-ip=209.132.183.39; envelope-from=libvir-list-bounces@redhat.com; helo=mx6-phx2.redhat.com; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.39 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; Return-Path: Received: from mx6-phx2.redhat.com (mx6-phx2.redhat.com [209.132.183.39]) by mx.zohomail.com with SMTPS id 1488161182721954.299212227991; Sun, 26 Feb 2017 18:06:22 -0800 (PST) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by mx6-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id v1R22mPQ044106; Sun, 26 Feb 2017 21:02:49 -0500 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v1R22kJu009161 for ; Sun, 26 Feb 2017 21:02:46 -0500 Received: from mx1.redhat.com (ext-mx06.extmail.prod.ext.phx2.redhat.com [10.5.110.30]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id v1R22kSF008794 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Sun, 26 Feb 2017 21:02:46 -0500 Received: from smtp2.provo.novell.com (smtp2.provo.novell.com [137.65.250.81]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id DBEE33B708 for ; Mon, 27 Feb 2017 02:02:45 +0000 (UTC) Received: from linux-tbji.provo.novell.com (prv-ext-foundry1int.gns.novell.com [137.65.251.240]) by smtp2.provo.novell.com with ESMTP (NOT encrypted); Sun, 26 Feb 2017 19:02:41 -0700 From: Jim Fehlig To: libvir-list@redhat.com Date: Sun, 26 Feb 2017 19:02:25 -0700 Message-Id: <20170227020227.15438-2-jfehlig@suse.com> In-Reply-To: <20170227020227.15438-1-jfehlig@suse.com> References: <20170227020227.15438-1-jfehlig@suse.com> X-Greylist: Sender passed SPF test, Sender IP whitelisted by DNSRBL, ACL 202 matched, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Mon, 27 Feb 2017 02:02:46 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Mon, 27 Feb 2017 02:02:46 +0000 (UTC) for IP:'137.65.250.81' DOMAIN:'smtp2.provo.novell.com' HELO:'smtp2.provo.novell.com' FROM:'jfehlig@suse.com' RCPT:'' X-RedHat-Spam-Score: -1.501 (BAYES_50, RCVD_IN_DNSWL_MED, SPF_PASS) 137.65.250.81 smtp2.provo.novell.com 137.65.250.81 smtp2.provo.novell.com X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Scanned-By: MIMEDefang 2.78 on 10.5.110.30 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 1/3] libxl: determine device model version from emulator name 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: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" libxl exposes a setting for specifying a device model version. The default is LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN, aka upstream qemu. But users can specify LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL if they are using the old forked qemu, aka qemu-dm. libvirt only supports specifying an emulator by name, specifying a version is not supported. Prior to this change libvirt would invoke the specified emulator with '--help' option in an attempt to determine the version. If the help output included the string "Options specific to the Xen version:" it was assumed the emulator was the old forked qemu-dm. This approach works well when creating libxl_domain_config to start a VM, but is problematic when simply creating libxl_domain_config for unit test purposes. Build/development systems running unit tests may not have the emulator installed. Even if installed, invoking the emulator during unit tests is bad form. This change takes the simple-minded approach of determining the device model version based on the emulator name. If it contains "qemu-dm" it is assumed to be LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL, otherwise LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN. Signed-off-by: Jim Fehlig --- src/libxl/libxl_capabilities.c | 37 +++++++++++++++---------------------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/src/libxl/libxl_capabilities.c b/src/libxl/libxl_capabilities.c index 2bbd2d1b4..7ad8e7b57 100644 --- a/src/libxl/libxl_capabilities.c +++ b/src/libxl/libxl_capabilities.c @@ -723,35 +723,28 @@ libxlMakeDomainCapabilities(virDomainCapsPtr domCaps, return 0; } =20 -#define LIBXL_QEMU_DM_STR "Options specific to the Xen version:" =20 +#define LIBXL_QEMU_DM_STR "qemu-dm" + +/* + * libxl exposes a setting for specifying a device model version. The defa= ult + * is LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN (aka upstream qemu). But users c= an + * specify LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL if they are usi= ng + * the old, forked qemu (aka qemu-dm). libvirt only supports specifying an + * emulator. This function makes a poor attempt at determining the device + * model version based on the emulator name. If the emulator name contains + * "qemu-dm", it is assumed to be a + * LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL emulator. + */ int libxlDomainGetEmulatorType(const virDomainDef *def) { - int ret =3D LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN; - virCommandPtr cmd =3D NULL; - char *output =3D NULL; - if (def->os.type =3D=3D VIR_DOMAIN_OSTYPE_HVM) { if (def->emulator) { - if (!virFileExists(def->emulator)) - goto cleanup; - - cmd =3D virCommandNew(def->emulator); - - virCommandAddArgList(cmd, "-help", NULL); - virCommandSetOutputBuffer(cmd, &output); - - if (virCommandRun(cmd, NULL) < 0) - goto cleanup; - - if (strstr(output, LIBXL_QEMU_DM_STR)) - ret =3D LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL; + if (strstr(def->emulator, LIBXL_QEMU_DM_STR)) + return LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL; } } =20 - cleanup: - VIR_FREE(output); - virCommandFree(cmd); - return ret; + return LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN; } --=20 2.11.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list