From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jim Fehlig Subject: Re: [libvirt] [PATCH 3/5] libxl: Add function to determine device model type Date: Fri, 10 Oct 2014 15:22:18 -0600 Message-ID: <54384E0A.6020209@suse.com> References: <1411154594-14871-1-git-send-email-jfehlig@suse.com> <1411154594-14871-4-git-send-email-jfehlig@suse.com> <54324CF3.8050507@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <54324CF3.8050507@redhat.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Michal Privoznik Cc: libvir-list@redhat.com, xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org Michal Privoznik wrote: > On 19.09.2014 21:23, Jim Fehlig wrote: >> This patch introduces a function to detect whether the specified >> emulator is QEMU_XEN or QEMU_XEN_TRADITIONAL. Detection is based on the >> string "Options specific to the Xen version:" in '$qemu -help' output. >> AFAIK, the only qemu containing that string in help output is the >> old Xen fork (aka qemu-dm). >> >> Note: >> QEMU_XEN means a qemu that contains support for Xen. >> >> QEMU_XEN_TRADITIONAL means Xen's old forked qemu 0.10.2 >> >> Signed-off-by: Jim Fehlig >> --- >> src/libxl/libxl_conf.c | 32 ++++++++++++++++++++++++++++++++ >> src/libxl/libxl_conf.h | 3 +++ >> 2 files changed, 35 insertions(+) >> >> diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c >> index 0a781f9..ff3f6b5 100644 >> --- a/src/libxl/libxl_conf.c >> +++ b/src/libxl/libxl_conf.c >> @@ -40,6 +40,7 @@ >> #include "viralloc.h" >> #include "viruuid.h" >> #include "capabilities.h" >> +#include "vircommand.h" >> #include "libxl_domain.h" >> #include "libxl_conf.h" >> #include "libxl_utils.h" >> @@ -796,6 +797,37 @@ libxlDiskSetDiscard(libxl_device_disk *x_disk, >> int discard) >> } >> >> >> +#define LIBXL_QEMU_DM_STR "Options specific to the Xen version:" >> + >> +int >> +libxlDomainGetEmulatorType(const virDomainDef *def) >> +{ >> + int ret = LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN; >> + virCommandPtr cmd = NULL; >> + char *output = NULL; >> + >> + if (STREQ(def->os.type, "hvm")) { >> + if (def->emulator) { >> + cmd = 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 = LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL; >> + } >> + } >> + >> + cleanup: >> + VIR_FREE(output); >> + virCommandFree(cmd); >> + return ret; >> +} >> + >> + >> int >> libxlMakeDisk(virDomainDiskDefPtr l_disk, libxl_device_disk *x_disk) >> { >> diff --git a/src/libxl/libxl_conf.h b/src/libxl/libxl_conf.h >> index da66b4e..25f77ea 100644 >> --- a/src/libxl/libxl_conf.h >> +++ b/src/libxl/libxl_conf.h >> @@ -163,6 +163,9 @@ virCapsPtr >> libxlMakeCapabilities(libxl_ctx *ctx); >> >> int >> +libxlDomainGetEmulatorType(const virDomainDef *def); >> + >> +int >> libxlMakeDisk(virDomainDiskDefPtr l_dev, libxl_device_disk *x_dev); >> int >> libxlMakeNic(virDomainDefPtr def, >> > > Well, we've tried hard to move away from parsing 'qemu -help' output. Yep, understood. > But on the other hand, this is trivial compared to virQEMUCaps code > we've developed. Right :). This is only detecting if the qemu is Xen's old fork. I really don't know of any other way to do that. > So I'd give green flag to this. Thanks! Regards, Jim