[Libvirt-cim] [PATCH] Add distinction between QEMU guests and hardware accelerated KVM guests
Richard Maciel
rmaciel at linux.vnet.ibm.com
Tue Apr 7 01:42:03 UTC 2009
+1
Kaitlin Rupert wrote:
> # HG changeset patch
> # User Kaitlin Rupert <karupert at us.ibm.com>
> # Date 1238533479 25200
> # Node ID e5aee0f0edc128d41148ec4cedaba2bdd53cf05e
> # Parent d08b52d4da57fc8bbe946f8b4f9ddccdccf9dee6
> Add distinction between QEMU guests and hardware accelerated KVM guests
>
> If the host system doesn't support KVM guests, then the providers should
> create a QEMU guest. This code generates the proper XML for the given guest
> type.
>
> Signed-off-by: Kaitlin Rupert <karupert at us.ibm.com>
>
> diff -r d08b52d4da57 -r e5aee0f0edc1 libxkutil/device_parsing.c
> --- a/libxkutil/device_parsing.c Fri Apr 03 09:38:52 2009 -0700
> +++ b/libxkutil/device_parsing.c Tue Mar 31 14:04:39 2009 -0700
> @@ -827,9 +827,10 @@
> if ((STREQC(dominfo->os_info.fv.type, "hvm")) &&
> (STREQC(dominfo->typestr, "xen")))
> dominfo->type = DOMAIN_XENFV;
> - else if ((STREQC(dominfo->typestr, "kvm")) ||
> - (STREQC(dominfo->typestr, "qemu")))
> + else if (STREQC(dominfo->typestr, "kvm"))
> dominfo->type = DOMAIN_KVM;
> + else if (STREQC(dominfo->typestr, "qemu"))
> + dominfo->type = DOMAIN_QEMU;
> else if (STREQC(dominfo->typestr, "lxc"))
> dominfo->type = DOMAIN_LXC;
> else if (STREQC(dominfo->os_info.pv.type, "linux"))
> @@ -994,7 +995,7 @@
> free(dom->os_info.pv.initrd);
> free(dom->os_info.pv.cmdline);
> } else if ((dom->type == DOMAIN_XENFV) ||
> - (dom->type == DOMAIN_KVM)) {
> + (dom->type == DOMAIN_KVM) || (dom->type == DOMAIN_QEMU)) {
> free(dom->os_info.fv.type);
> free(dom->os_info.fv.loader);
> free(dom->os_info.fv.boot);
> diff -r d08b52d4da57 -r e5aee0f0edc1 libxkutil/device_parsing.h
> --- a/libxkutil/device_parsing.h Fri Apr 03 09:38:52 2009 -0700
> +++ b/libxkutil/device_parsing.h Tue Mar 31 14:04:39 2009 -0700
> @@ -107,7 +107,11 @@
> };
>
> struct domain {
> - enum { DOMAIN_XENPV, DOMAIN_XENFV, DOMAIN_KVM, DOMAIN_LXC } type;
> + enum { DOMAIN_XENPV,
> + DOMAIN_XENFV,
> + DOMAIN_KVM,
> + DOMAIN_QEMU,
> + DOMAIN_LXC } type;
> char *name;
> char *typestr; /*xen, kvm, etc */
> char *uuid;
> diff -r d08b52d4da57 -r e5aee0f0edc1 libxkutil/xml_parse_test.c
> --- a/libxkutil/xml_parse_test.c Fri Apr 03 09:38:52 2009 -0700
> +++ b/libxkutil/xml_parse_test.c Tue Mar 31 14:04:39 2009 -0700
> @@ -41,7 +41,7 @@
> print_value(d, "Loader", dom->os_info.fv.loader);
> print_value(d, "Boot", dom->os_info.fv.boot);
>
> - } else if (dom->type == DOMAIN_KVM) {
> + } else if ((dom->type == DOMAIN_KVM) || (dom->type == DOMAIN_QEMU)) {
> print_value(d, "Domain Type", "KVM/QEMU");
> print_value(d, "Type", dom->os_info.fv.type);
> print_value(d, "Loader", dom->os_info.fv.loader);
> diff -r d08b52d4da57 -r e5aee0f0edc1 libxkutil/xmlgen.c
> --- a/libxkutil/xmlgen.c Fri Apr 03 09:38:52 2009 -0700
> +++ b/libxkutil/xmlgen.c Tue Mar 31 14:04:39 2009 -0700
> @@ -545,7 +545,7 @@
> return _xenpv_os_xml(os, domain);
> else if (domain->type == DOMAIN_XENFV)
> return _xenfv_os_xml(os, domain);
> - else if (domain->type == DOMAIN_KVM)
> + else if ((domain->type == DOMAIN_KVM) || (domain->type == DOMAIN_QEMU))
> return _kvm_os_xml(os, domain);
> else if (domain->type == DOMAIN_LXC)
> return _lxc_os_xml(os, domain);
> @@ -694,6 +694,8 @@
> domtype = "xen";
> else if (dominfo->type == DOMAIN_KVM)
> domtype = "kvm";
> + else if (dominfo->type == DOMAIN_QEMU)
> + domtype = "qemu";
> else if (dominfo->type == DOMAIN_LXC)
> domtype = "lxc";
> else
> diff -r d08b52d4da57 -r e5aee0f0edc1 src/Virt_VSSD.c
> --- a/src/Virt_VSSD.c Fri Apr 03 09:38:52 2009 -0700
> +++ b/src/Virt_VSSD.c Tue Mar 31 14:04:39 2009 -0700
> @@ -144,7 +144,7 @@
>
>
> if ((dominfo->type == DOMAIN_XENFV) ||
> - (dominfo->type == DOMAIN_KVM))
> + (dominfo->type == DOMAIN_KVM) || (dominfo->type == DOMAIN_QEMU))
> _set_fv_prop(dominfo, inst);
> else if (dominfo->type == DOMAIN_XENPV)
> _set_pv_prop(dominfo, inst);
> diff -r d08b52d4da57 -r e5aee0f0edc1 src/Virt_VirtualSystemManagementService.c
> --- a/src/Virt_VirtualSystemManagementService.c Fri Apr 03 09:38:52 2009 -0700
> +++ b/src/Virt_VirtualSystemManagementService.c Tue Mar 31 14:04:39 2009 -0700
> @@ -174,6 +174,29 @@
> return true;
> }
>
> +static bool system_has_kvm(const char *pfx)
> +{
> + CMPIStatus s;
> + virConnectPtr conn;
> + char *caps = NULL;
> + bool kvm = false;
> +
> + conn = connect_by_classname(_BROKER, pfx, &s);
> + if ((conn == NULL) || (s.rc != CMPI_RC_OK)) {
> + return false;
> + }
> +
> + caps = virConnectGetCapabilities(conn);
> + if (caps != NULL)
> + kvm = (strstr(caps, "kvm") != NULL);
> +
> + free(caps);
> +
> + virConnectClose(conn);
> +
> + return kvm;
> +}
> +
> static int fv_vssd_to_domain(CMPIInstance *inst,
> struct domain *domain,
> const char *pfx)
> @@ -182,7 +205,10 @@
> const char *val;
>
> if (STREQC(pfx, "KVM")) {
> - domain->type = DOMAIN_KVM;
> + if (system_has_kvm(pfx))
> + domain->type = DOMAIN_KVM;
> + else
> + domain->type = DOMAIN_QEMU;
> } else if (STREQC(pfx, "Xen")) {
> domain->type = DOMAIN_XENFV;
> } else {
>
> _______________________________________________
> Libvirt-cim mailing list
> Libvirt-cim at redhat.com
> https://www.redhat.com/mailman/listinfo/libvirt-cim
--
Richard Maciel, MSc
IBM Linux Technology Center
rmaciel at linux.vnet.ibm.com
More information about the Libvirt-cim
mailing list