1. 26 5月, 2017 1 次提交
  2. 23 5月, 2017 1 次提交
  3. 28 4月, 2017 5 次提交
    • L
      qemu: don't kill qemu process on restart if networkNotify fails · cb182eb1
      Laine Stump 提交于
      Nothing that could happen during networkNotifyActualDevice() could
      justify unceremoniously killing the qemu process, but that's what we
      were doing.
      
      In particular, new code added in commit 85bcc022 (first appearred in
      libvirt-3.2.0) attempts to reattach tap devices to their assigned
      bridge devices when libvirtd restarts (to make it easier to recover
      from a restart of a libvirt network). But if the network has been
      stopped and *not* restarted, the bridge device won't exist and
      networkNotifyActualDevice() will fail.
      
      This patch changes networkNotifyActualDevice() and
      qemuProcessNotifyNets() to return void, so that qemuProcessReconnect()
      will soldier on regardless of what happens (any errors will still be
      logged though).
      
      Partially resolves: https://bugzilla.redhat.com/1442700
      cb182eb1
    • P
      qemu: Move freeing of PCI address list to qemuProcessStop · 44f8e00b
      Peter Krempa 提交于
      Rather than freeing the list before starting a new VM clear it after
      stopping the old instance when the data becomes invalid.
      44f8e00b
    • P
      qemu: process: Clean up priv->migTLSAlias · 8c1fee5f
      Peter Krempa 提交于
      The alias would be leaked, since it's not freed on the vm stop path.
      8c1fee5f
    • P
      qemu: process: Don't leak priv->usbaddrs after VM restart · 3ab802d6
      Peter Krempa 提交于
      Since the private data structure is not freed upon stopping a VM, the
      usbaddrs pointer would be leaked:
      
      ==15388== 136 (16 direct, 120 indirect) bytes in 1 blocks are definitely lost in loss record 893 of 1,019
      ==15388==    at 0x4C2CF55: calloc (vg_replace_malloc.c:711)
      ==15388==    by 0x54BF64A: virAlloc (viralloc.c:144)
      ==15388==    by 0x5547588: virDomainUSBAddressSetCreate (domain_addr.c:1608)
      ==15388==    by 0x144D38A2: qemuDomainAssignUSBAddresses (qemu_domain_address.c:2458)
      ==15388==    by 0x144D38A2: qemuDomainAssignAddresses (qemu_domain_address.c:2515)
      ==15388==    by 0x144ED1E3: qemuProcessPrepareDomain (qemu_process.c:5398)
      ==15388==    by 0x144F51FF: qemuProcessStart (qemu_process.c:5979)
      [...]
      3ab802d6
    • P
      qemu: process: Clean automatic NUMA/cpu pinning information on shutdown · 1730cdc6
      Peter Krempa 提交于
      Clean the stale data after shutting down the VM. Otherwise the data
      would be leaked on next VM start. This happens due to the fact that the
      private data object is not freed on destroy of the VM.
      1730cdc6
  4. 27 4月, 2017 2 次提交
  5. 19 4月, 2017 3 次提交
    • J
      qemu: Use more data for comparing CPUs · 5b4a6adb
      Jiri Denemark 提交于
      With QEMU older than 2.9.0 libvirt uses CPUID instruction to determine
      what CPU features are supported on the host. This was later used when
      checking compatibility of guest CPUs. Since QEMU 2.9.0 we ask QEMU for
      the host CPU data. But the two methods we use usually provide disjoint
      sets of CPU features because QEMU/KVM does not support all features
      provided by the host CPU and on the other hand it can enable some
      feature even if the host CPU does not support them.
      
      So if there is a domain which requires a CPU features disabled by
      QEMU/KVM, libvirt will refuse to start it with QEMU > 2.9.0 as its guest
      CPU is incompatible with the host CPU data we got from QEMU. But such
      domain would happily start on older QEMU (of course, the features would
      be missing the guest CPU). To fix this regression, we need to combine
      both CPU feature sets when checking guest CPU compatibility.
      
      https://bugzilla.redhat.com/show_bug.cgi?id=1439933Signed-off-by: NJiri Denemark <jdenemar@redhat.com>
      5b4a6adb
    • J
      qemu: Pass migratable host CPU model to virCPUUpdate · 56bd7edc
      Jiri Denemark 提交于
      We already know from QEMU which CPU features will block migration. Let's
      use this information to make a migratable copy of the host CPU model and
      use it for updating guest CPU specification. This will allow us to drop
      feature filtering from virCPUUpdate where it was just a hack.
      Signed-off-by: NJiri Denemark <jdenemar@redhat.com>
      56bd7edc
    • J
      qemu: Prepare qemuCaps for multiple host CPU defs · 1fe517c6
      Jiri Denemark 提交于
      Soon we will need to store multiple host CPU definitions in
      virQEMUCapsHostCPUData and qemuCaps users will want to request the one
      they need. This patch introduces virQEMUCapsHostCPUType enum which will
      be used for specifying the requested CPU definition.
      Signed-off-by: NJiri Denemark <jdenemar@redhat.com>
      1fe517c6
  6. 10 4月, 2017 2 次提交
  7. 07 4月, 2017 6 次提交
  8. 06 4月, 2017 1 次提交
    • J
      qemu: Fix regression when hyperv/vendor_id feature is used · ae102b5d
      Jiri Denemark 提交于
      qemuProcessVerifyHypervFeatures is supposed to check whether all
      requested hyperv features were actually honored by QEMU/KVM. This is
      done by checking the corresponding CPUID bits reported by the virtual
      CPU. In other words, it doesn't work for string properties, such as
      VIR_DOMAIN_HYPERV_VENDOR_ID (there is no CPUID bit we could check). We
      could theoretically check all 96 bits corresponding to the vendor
      string, but luckily we don't have to check the feature at all. If QEMU
      is too old to support hyperv features, the domain won't even start.
      Otherwise, it is always supported.
      
      Without this patch, libvirt refuses to start a domain which contains
      
        <features>
          <hyperv>
            <vendor_id state='on' value='...'/>
          </hyperv>
        </features>
      
      reporting internal error: "unknown CPU feature __kvm_hv_vendor_id.
      
      This regression was introduced by commit v3.1.0-186-ge9dbe701, which
      (by fixing the virCPUDataCheckFeature condition in
      qemuProcessVerifyHypervFeatures) revealed an old bug in the feature
      verification code. It's been there ever since the verification was
      implemented by commit v1.3.3-rc1-5-g95bbe4bf, which effectively did not
      check VIR_DOMAIN_HYPERV_VENDOR_ID at all.
      
      https://bugzilla.redhat.com/show_bug.cgi?id=1439424Signed-off-by: NJiri Denemark <jdenemar@redhat.com>
      ae102b5d
  9. 03 4月, 2017 1 次提交
    • M
      Introduce and use virDomainDiskEmptySource · 462c4b66
      Michal Privoznik 提交于
      Currently, if we want to zero out disk source (e,g, due to
      startupPolicy when starting up a domain) we use
      virDomainDiskSetSource(disk, NULL). This works well for file
      based storage (storage type file, dir, or block). But it doesn't
      work at all for other types like volume and network.
      
      So imagine that you have a domain that has a CDROM configured
      which source is a volume from an inactive pool. Because it is
      startupPolicy='optional', the CDROM is empty when the domain
      starts. However, the source element is not cleared out in the
      status XML and thus when the daemon restarts and tries to
      reconnect to the domain it refreshes the disks (which fails - the
      storage pool is still not running) and thus the domain is killed.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      462c4b66
  10. 27 3月, 2017 3 次提交
  11. 25 3月, 2017 1 次提交
    • J
      qemu: Set up the migration TLS objects for target · 1a6b6d9a
      John Ferlan 提交于
      If the migration flags indicate this migration will be using TLS,
      then set up the destination during the prepare phase once the target
      domain has been started to add the TLS objects to perform the migration.
      
      This will create at least an "-object tls-creds-x509,endpoint=server,..."
      for TLS credentials and potentially an "-object secret,..." to handle the
      passphrase response to access the TLS credentials. The alias/id used for
      the TLS objects will contain "libvirt_migrate".
      
      Once the objects are created, the code will set the "tls-creds" and
      "tls-hostname" migration parameters to signify usage of TLS.
      
      During the Finish phase we'll be sure to attempt to clear the
      migration parameters and delete those objects (whether or not they
      were created). We'll also perform the same reset during recovery
      if we've reached FINISH3.
      
      If the migration isn't using TLS, then be sure to check if the
      migration parameters exist and clear them if so.
      1a6b6d9a
  12. 20 3月, 2017 1 次提交
  13. 17 3月, 2017 7 次提交
  14. 16 3月, 2017 1 次提交
  15. 10 3月, 2017 1 次提交
    • M
      qemuProcessHandleMonitorEOF: Disable namespace for domain · e915942b
      Michal Privoznik 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=1430634
      
      If a qemu process has died, we get EOF on its monitor. At this
      point, since qemu process was the only one running in the
      namespace kernel has already cleaned the namespace up. Any
      attempt of ours to enter it has to fail.
      
      This really happened in the bug linked above. We've tried to
      attach a disk to qemu and while we were in the monitor talking to
      qemu it just died. Therefore our code tried to do some roll back
      (e.g. deny the device in cgroups again, restore labels, etc.).
      However, during the roll back (esp. when restoring labels) we
      still thought that domain has a namespace. So we used secdriver's
      transactions. This failed as there is no namespace to enter.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      e915942b
  16. 08 3月, 2017 1 次提交
  17. 06 3月, 2017 1 次提交
    • M
      qemu: Enforce qemuSecurity wrappers · 4da534c0
      Michal Privoznik 提交于
      Now that we have some qemuSecurity wrappers over
      virSecurityManager APIs, lets make sure everybody sticks with
      them. We have them for a reason and calling virSecurityManager
      API directly instead of wrapper may lead into accidentally
      labelling a file on the host instead of namespace.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      4da534c0
  18. 04 3月, 2017 1 次提交
  19. 24 2月, 2017 1 次提交
    • M
      qemuProcessInit: Jump onto correct label in case of error · 9f26de12
      Michal Privoznik 提交于
      After eca76884 in case of error in qemuDomainSetPrivatePaths()
      in pretended start we jump to stop. I've changed this during
      review from 'cleanup' which turned out to be correct. Well, sort
      of. We can't call qemuProcessStop() as it decrements
      driver->nactive and we did not increment it. However, it calls
      virDomainObjRemoveTransientDef() which is basically the only
      function we need to call. So call that function and goto cleanup;
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      9f26de12