1. 25 3月, 2015 7 次提交
    • J
      libxl: Move setup of child processing code to driver initialization · 331a02a7
      Jim Fehlig 提交于
      Informing libxl how to handle its child proceses should be done once
      during driver initialization, not once for each domain-specific
      libxl_ctx object.  The related libxl documentation in
      $xen-src/tools/libxl/libxl_event.h even mentions that "it is best to
      call this at initialisation".
      Signed-off-by: NJim Fehlig <jfehlig@suse.com>
      331a02a7
    • J
      libxl: use driver-wide ctx in fd and timer event handling · 57db83ae
      Jim Fehlig 提交于
      Long ago I incorrectly associated libxl fd and timer registrations
      with per-domain libxl_ctx objects.  When creating a libxlDomainObjPrivate,
      a libxl_ctx is allocated, and libxl_osevent_register_hooks is called
      passing a pointer to the libxlDomainObjPrivate.  When an fd or timer
      registration occurred, the registration callback received the
      libxlDomainObjPrivate, containing the per-domain libxl_ctx.  This
      libxl_ctx was then used when informing libxl about fd events or
      timer expirations.
      
      The problem with this approach is that fd and timer registrations do not
      share the same lifespan as libxlDomainObjPrivate, and hence the per-domain
      libxl_ctx ojects.  The result is races between per-domain libxl_ctx's being
      destoryed and events firing on associated fds/timers, typically manifesting
      as an assert in libxl
      
      libxl_internal.h:2788: libxl__ctx_unlock: Assertion `!r' failed
      
      There is no need to associate libxlDomainObjPrivate objects with libxl's
      desire to use libvirt's event loop.  Instead, the driver-wide libxl_ctx can
      be used for the fd and timer registrations.
      
      This patch moves the fd and timer handling code away from the
      domain-specific code in libxl_domain.c into libxl_driver.c.  While at it,
      function names were changed a bit to better describe their purpose.
      
      The unnecessary locking was also removed since the code simply provides a
      wrapper over the event loop interface.  Indeed the locks may have been
      causing some deadlocks when repeatedly creating/destroying muliple domains.
      There have also been rumors about such deadlocks during parallel OpenStack
      Tempest runs.
      Signed-off-by: NJim Fehlig <jfehlig@suse.com>
      57db83ae
    • P
      qemu: fix set vcpus on host without NUMA · 6cf1e11c
      Pavel Hrdina 提交于
      We don't have to modify cpuset.mems on hosts without NUMA.  It also
      fixes an error message that you get instead of success if you trying
      update vcpus of a guest on a host without NUMA.
      
      error: internal error: NUMA isn't available on this host
      Signer-off-by: NPavel Hrdina <phrdina@redhat.com>
      6cf1e11c
    • P
      qemu: cleanup setvcpus · 5cd3c501
      Pavel Hrdina 提交于
      Remove unnecessary maximum variable.
      Signed-off-by: NPavel Hrdina <phrdina@redhat.com>
      5cd3c501
    • P
      qemu: move virDomainLiveConfigHelperMethod right after BeginJob · 5bb06665
      Pavel Hrdina 提交于
      We should call virDomainLiveConfigHelperMethod ASAP because this
      function transfers VIR_DOMAIN_AFFECT_CURRENT to VIR_DOMAIN_AFFECT_LIVE
      or VIR_DOMAIN_AFFECT_CONFIG.  All other additional checks for those two
      flags should consider that the user give us VIR_DOMAIN_AFFECT_CURRENT.
      
      Remove the unnecessary check whether the domain is live in case of
      VIR_DOMAIN_VCPU_GUEST because this check is done by
      virDomainLiveConfigHelperMethod.
      Signed-off-by: NPavel Hrdina <phrdina@redhat.com>
      5bb06665
    • J
      Document behavior of compat when creating qcow2 volumes · 7c8ae42d
      Ján Tomko 提交于
      Commit bab2eda6 changed the behavior for missing compat attribute,
      but failed to update the documentation.
      
      Before, the option was omitted from qemu-img command line and the
      qemu-img default was used. Now we always specify the compat value
      and the default is 0.10.
      
      Reported by Christophe Fergeau
      https://bugzilla.gnome.org/show_bug.cgi?id=746660#c4
      7c8ae42d
    • J
      Fix typo in error message · 68545ea6
      Ján Tomko 提交于
      by rewriting it completely from:
      error: unsupported configuration: virtio only support device address
      type 'PCI'
      
      to:
      
      error: unsupported configuration: virtio disk cannot have an address of type
      drive
      
      Since we now support CCW addresses as well.
      68545ea6
  2. 24 3月, 2015 3 次提交
  3. 23 3月, 2015 20 次提交
    • P
      qemu: Implement memory device hotunplug · 3b289a81
      Peter Krempa 提交于
      Add code to hot-remove memory devices from qemu. Unfortunately QEMU
      doesn't support this right now, so this is just for completenes.
      3b289a81
    • P
      qemu: Implement memory device hotplug · 9b4654f6
      Peter Krempa 提交于
      Add code to hot-add memory devices to running qemu instances.
      9b4654f6
    • P
      qemu: conf: Add support for memory device cold(un)plug · 96094fb2
      Peter Krempa 提交于
      Add a few helpers that allow to operate with memory device definitions
      on the domain config and use them to implement memory device coldplug in
      the qemu driver.
      96094fb2
    • P
      qemu: add support for memory devices · 8b54bffb
      Peter Krempa 提交于
      Add support to start qemu instance with 'pc-dimm' device. Thanks to the
      refactors we are able to reuse the existing function to determine the
      parameters.
      8b54bffb
    • P
      qemu: migration: Forbid migration with memory modules lacking info · c5710066
      Peter Krempa 提交于
      Make sure that libvirt has all vital information needed to reliably
      represent configuration of guest's memory devices in case of a
      migration.
      
      This patch forbids migration in case the required slot number and module
      base address are not present (failed to be loaded from qemu via
      monitor).
      c5710066
    • P
      qemu: memdev: Add infrastructure to load memory device information · 5cdfaa31
      Peter Krempa 提交于
      When using 'dimm' memory devices with qemu, some of the information
      like the slot number and base address need to be reloaded from qemu
      after process start so that it reflects the actual state. The state then
      allows to use memory devices across migrations.
      5cdfaa31
    • P
      conf: Add interface to parse and format memory device information · 3e4230d2
      Peter Krempa 提交于
      This patch adds code that parses and formats configuration for memory
      devices.
      
      A simple configuration would be:
      <memory model='dimm'>
        <target>
          <size unit='KiB'>524287</size>
          <node>0</node>
        </target>
      </memory>
      
      A complete configuration of a memory device:
      <memory model='dimm'>
        <source>
          <pagesize unit='KiB'>4096</pagesize>
          <nodemask>1-3</nodemask>
        </source>
        <target>
          <size unit='KiB'>524287</size>
          <node>1</node>
        </target>
      </memory>
      
      This patch preemptively forbids use of the <memory> device in individual
      drivers so the users are warned right away that the device is not
      supported.
      3e4230d2
    • P
      conf: Add device address type for dimm devices · 62b825a2
      Peter Krempa 提交于
      Dimm devices are described by the slot and base address. Add a new
      address type to be able to describe such address.
      62b825a2
    • P
      qemu: Implement setup of memory hotplug parameters · a41185d8
      Peter Krempa 提交于
      To enable memory hotplug the maximum memory size and slot count need to
      be specified. As qemu supports now other units than mebibytes when
      specifying memory, use the new interface in this case.
      a41185d8
    • P
      conf: Add support for parsing and formatting max memory and slot count · bffb9163
      Peter Krempa 提交于
      Add a XML element that will allow to specify maximum supportable memory
      and the count of memory slots to use with memory hotplug.
      
      To avoid possible confusion and misuse of the new element this patch
      also explicitly forbids the use of the maxMemory setting in individual
      drivers's post parse callbacks. This limitation will be lifted when the
      support is implemented.
      bffb9163
    • P
      libxl: Refactor logic in domain post parse callback · 19e85d84
      Peter Krempa 提交于
      With the current control flow the post parse callback returned success
      right away for fully virtualized VMs. To allow adding additional checks
      into the post parse callback tweak the conditions so that the function
      doesn't return early except for error cases.
      
      To clarify the original piece of code borrow the wording from the commit
      message for the patch that introduced the code.
      19e85d84
    • P
      qemu: monitor: Don't leak @props with non-JSON in qemuMonitorAddObject · b15f5883
      Peter Krempa 提交于
      The function comment states that @props is always consumed, even on
      failure. This was not true with the failure if the monitor is not using
      QMP.
      b15f5883
    • P
      qemu: Don't return memory device config on error in qemuBuildMemoryBackendStr · 104011ea
      Peter Krempa 提交于
      In the last section if the function determines that the config is
      invalid when QEMU doesn't support the memory device the JSON config
      object would be returned even if it doesn't make sense.
      
      Assign the object to be returned only on success.
      104011ea
    • B
      qemu: Set default SCSI controller model for S390 arch · c35b2776
      Boris Fiuczynski 提交于
      When no model is specified in the domain definition for
      a scsi controller and the architectur is s390 than virtio-scsi
      is set as default model.
      Signed-off-by: NBoris Fiuczynski <fiuczy@linux.vnet.ibm.com>
      Reviewed-by: NDaniel Hansel <daniel.hansel@linux.vnet.ibm.com>
      Reviewed-by: NStefan Zimmermann <stzi@linux.vnet.ibm.com>
      Reviewed-by: NJens Freimann <jfrei@linux.vnet.ibm.com>
      Reviewed-by: NMichal Privoznik <mprivozn@redhat.com>
      c35b2776
    • N
      Fix underlinking of libvirt_driver_interface.so · 6392a610
      Natanael Copa 提交于
      Always add udev linker flags when WITH_UDEV is enabled to avoid
      underlinking.
      
      See commit 43dbcb15 (interface: always build all available backends)
      Signed-off-by: NNatanael Copa <ncopa@alpinelinux.org>
      6392a610
    • M
      qemu: skip precreation of network disks · a1b18051
      Michael Chapman 提交于
      Commit cf54c606 introduced the ability
      to create missing storage volumes during migration. For network disks,
      however, we may not necessarily be able to detect whether they already
      exist -- there is no straight-forward way to map the disk to a storage
      volume, and even if there were it's possible no configured storage pool
      actually contains the disk.
      
      It is better to assume the network disk exists in this case, rather than
      aborting the migration completely. If the volume really is missing, QEMU
      will generate an appropriate error later in the migration.
      Signed-off-by: NMichael Chapman <mike@very.puzzling.org>
      a1b18051
    • M
      network_conf: Drop virNetworkObjIsDuplicate · d9706aea
      Michal Privoznik 提交于
      This function does not make any sense now, that network driver is
      (almost) dropped. I mean, previously, when threads were
      serialized, this function was there to check, if no other network
      with the same name or UUID exists. However, nowadays that threads
      can run more in parallel, this function is useless, in fact it
      gives misleading return values. Consider the following scenario.
      Two threads, both trying to define networks with same name but
      different UUID (e.g. because it was generated during XML parsing
      phase, whatever). Lets assume that both threads are about to call
      networkValidate() which immediately calls
      virNetworkObjIsDuplicate().
      
      T1: calls virNetworkObjIsDuplicate() and since no network with
      given name or UUID exist, success is returned.
      T2: calls virNetworkObjIsDuplicate() and since no network with
      given name or UUID exist, success is returned.
      
      T1: calls virNetworkAssignDef() and successfully places its
      network into the virNetworkObjList.
      T2: calls virNetworkAssignDef() and since network with the same
      name exists, the network definition is replaced.
      
      Okay, this is mainly because virNetworkAssignDef() does not check
      whether name and UUID matches. Well, lets make it so! And drop
      useless function too.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      d9706aea
    • M
      objecteventtest: Check for virNetwork* return values · cbbb9baa
      Michal Privoznik 提交于
      Lets not give a bad example and check for return values of
      virNetwork* APIs called within the test. Even though it's
      unlikely that any API will fail, it can happen. We're connected
      to the test driver after all, and our API sequence is correct. So
      test driver should fail only in case of bug or OOM.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      cbbb9baa
    • M
      networkStateInitialize: Don't lock network driver · dd7bfb2c
      Michal Privoznik 提交于
      There's no need to lock the network driver, as network driver
      initialization is done prior accepting any client. There's nobody
      to hop in and do something over partially initialized driver. Nor
      qemu driver is doing that.
      
      ==30532== Observed (incorrect) order is: acquisition of lock at 0x1439EF50
      ==30532==    at 0x4C31A26: pthread_mutex_lock (in /usr/lib64/valgrind/vgpreload_helgrind-amd64-linux.so)
      ==30532==    by 0x5324895: virMutexLock (virthread.c:88)
      ==30532==    by 0x5307E86: virObjectLock (virobject.c:323)
      ==30532==    by 0x5396440: virNetworkObjListForEach (network_conf.c:4511)
      ==30532==    by 0x19B29308: networkStateInitialize (bridge_driver.c:686)
      ==30532==    by 0x53E1CCC: virStateInitialize (libvirt.c:777)
      ==30532==    by 0x11DEB7: daemonRunStateInit (libvirtd.c:906)
      ==30532==    by 0x5324B6A: virThreadHelper (virthread.c:197)
      ==30532==    by 0x4C30456: ??? (in /usr/lib64/valgrind/vgpreload_helgrind-amd64-linux.so)
      ==30532==    by 0xA1EC1F2: start_thread (in /lib64/libpthread-2.19.so)
      ==30532==    by 0xA4EDC8C: clone (in /lib64/libc-2.19.so)
      ==30532==
      ==30532==  followed by a later acquisition of lock at 0x1439CD60
      ==30532==    at 0x4C31A26: pthread_mutex_lock (in /usr/lib64/valgrind/vgpreload_helgrind-amd64-linux.so)
      ==30532==    by 0x5324895: virMutexLock (virthread.c:88)
      ==30532==    by 0x19B27B2C: networkDriverLock (bridge_driver.c:102)
      ==30532==    by 0x19B27B60: networkGetDnsmasqCaps (bridge_driver.c:113)
      ==30532==    by 0x19B2856A: networkUpdateState (bridge_driver.c:389)
      ==30532==    by 0x53963E9: virNetworkObjListForEachHelper (network_conf.c:4488)
      ==30532==    by 0x52E2224: virHashForEach (virhash.c:521)
      ==30532==    by 0x539645B: virNetworkObjListForEach (network_conf.c:4512)
      ==30532==    by 0x19B29308: networkStateInitialize (bridge_driver.c:686)
      ==30532==    by 0x53E1CCC: virStateInitialize (libvirt.c:777)
      ==30532==    by 0x11DEB7: daemonRunStateInit (libvirtd.c:906)
      ==30532==    by 0x5324B6A: virThreadHelper (virthread.c:197)
      ==30532==
      ==30532== Required order was established by acquisition of lock at 0x1439CD60
      ==30532==    at 0x4C31A26: pthread_mutex_lock (in /usr/lib64/valgrind/vgpreload_helgrind-amd64-linux.so)
      ==30532==    by 0x5324895: virMutexLock (virthread.c:88)
      ==30532==    by 0x19B27B2C: networkDriverLock (bridge_driver.c:102)
      ==30532==    by 0x19B28DF9: networkStateInitialize (bridge_driver.c:609)
      ==30532==    by 0x53E1CCC: virStateInitialize (libvirt.c:777)
      ==30532==    by 0x11DEB7: daemonRunStateInit (libvirtd.c:906)
      ==30532==    by 0x5324B6A: virThreadHelper (virthread.c:197)
      ==30532==    by 0x4C30456: ??? (in /usr/lib64/valgrind/vgpreload_helgrind-amd64-linux.so)
      ==30532==    by 0xA1EC1F2: start_thread (in /lib64/libpthread-2.19.so)
      ==30532==    by 0xA4EDC8C: clone (in /lib64/libc-2.19.so)
      ==30532==
      ==30532==  followed by a later acquisition of lock at 0x1439EF50
      ==30532==    at 0x4C31A26: pthread_mutex_lock (in /usr/lib64/valgrind/vgpreload_helgrind-amd64-linux.so)
      ==30532==    by 0x5324895: virMutexLock (virthread.c:88)
      ==30532==    by 0x5307E86: virObjectLock (virobject.c:323)
      ==30532==    by 0x538A09C: virNetworkAssignDef (network_conf.c:527)
      ==30532==    by 0x5391EB2: virNetworkLoadState (network_conf.c:3008)
      ==30532==    by 0x53922D4: virNetworkLoadAllState (network_conf.c:3128)
      ==30532==    by 0x19B2929A: networkStateInitialize (bridge_driver.c:671)
      ==30532==    by 0x53E1CCC: virStateInitialize (libvirt.c:777)
      ==30532==    by 0x11DEB7: daemonRunStateInit (libvirtd.c:906)
      ==30532==    by 0x5324B6A: virThreadHelper (virthread.c:197)
      ==30532==    by 0x4C30456: ??? (in /usr/lib64/valgrind/vgpreload_helgrind-amd64-linux.so)
      ==30532==    by 0xA1EC1F2: start_thread (in /lib64/libpthread-2.19.so)
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      dd7bfb2c
    • M
      Fix common misspellings · 0e7457e5
      Martin Kletzander 提交于
      Wikipedia's list of common misspellings [1] has a machine-readable
      version.  This patch fixes those misspellings mentioned in the list
      which don't have multiple right variants (as e.g. "accension", which can
      be both "accession" and "ascension"), such misspellings are left
      untouched.  The list of changes was manually re-checked for false
      positives.
      
      [1] https://en.wikipedia.org/wiki/Wikipedia:Lists_of_common_misspellings/For_machinesSigned-off-by: NMartin Kletzander <mkletzan@redhat.com>
      0e7457e5
  4. 20 3月, 2015 4 次提交
  5. 19 3月, 2015 6 次提交
    • M
      parallels: fix libvirt crash if parallelsNetworkOpen fails · a4da09d2
      Maxim Nestratov 提交于
      If, by any reason, parallelsNetworkOpen fails it dereferences
      newly allocated privconn->networks via virObjectUnref, which in
      turn deallocates its memory.
      Subsequent call of parallelsNetworkClose calls virObjectUnref
      that leads to double memory free. To prevent this we should zero
      privconn->networks to make all subsequent virObjectUnref be safe.
      Signed-off-by: NMaxim Nestratov <mnestratov@parallels.com>
      a4da09d2
    • L
      qemu: do not overwrite the error in qemuDomainObjExitMonitor · 4f068209
      Luyao Huang 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=1196934
      
      When qemu exits during startup, libvirt includes the error from
      /var/log/libvirt/qemu/vm.log in the error message:
      
      $ virsh start test3
      error: Failed to start domain test3
      error: internal error: early end of file from monitor: possible problem:
      2015-02-27T03:03:16.985494Z qemu-kvm: -numa memdev is not supported by
      machine rhel6.5.0
      
      The check for domain liveness added to qemuDomainObjExitMonitor
      in commit dc2fd51f sometimes overwrites this error:
      $ virsh start test3
      error: Failed to start domain test3
      error: operation failed: domain is no longer running
      
      Fix the check to only report an error if there is none set.
      Signed-off-by: NLuyao Huang <lhuang@redhat.com>
      Signed-off-by: NJán Tomko <jtomko@redhat.com>
      4f068209
    • J
      libxl: Don't overwrite errors from xenconfig · bd235cd8
      Jim Fehlig 提交于
      When converting domXML from native, the libxl driver was overwriting
      useful errors from the xenconfig parsing code with a useless, generic
      error.  E.g. "internal error: parsing xm config failed" vs
      "internal error: config value usbdevice was malformed".  Remove the
      redundant (and useless) error reporting in the libxl driver.
      Signed-off-by: NJim Fehlig <jfehlig@suse.com>
      bd235cd8
    • J
      qemu: Fix two issues in qemuDomainSetVcpus error handling · e06e6f1e
      John Ferlan 提交于
      Issue #1 - A call to virBitmapNew did not check if the allocation
      failed which could lead to a NULL dereference
      
      Issue #2 - When deleting the pin entries from the config file, the
      code loops from the number of elements down to the "new" vcpu count;
      however, the pin id values are numbered 0..n-1 not 1..n, so the "first"
      pin attempt would never work. Luckily the check was for whether the
      incoming 'n' (vcpu id) matched the entry in the array from 0..arraysize
      rather than a dereference of the 'n' entry
      e06e6f1e
    • D
      doc: Fix doc for backingStore · 060f4c66
      Deepak Shetty 提交于
      I spent quite some time figuring that backingStore info
      isn't included in the dom xml, unless guest is up and
      running. Hopefully putting that in the doc should help.
      
      Also, several people have complained that libvirt reports
      a backing file as raw, even though they expected it to be
      qcow2; where the culprit is usually the user forgetting to
      create the file with qemu-img create -o backing_fmt=qcow2.
      
      This patch adds that info to the doc.
      Signed-off-by: NDeepak C Shetty <deepakcs@redhat.com>
      Signed-off-by: NEric Blake <eblake@redhat.com>
      060f4c66
    • E
      qemu: track 'cancelling' migration state · e2660cb8
      Eric Blake 提交于
      In qemu 2.3, the migration status will include 'cancelling' in the
      window between when an asynchronous cancel has been requested and
      when the migration is actually halted.  Previously, qemu hid this
      state and reported 'active'.  Libvirt manages the sequence okay
      even when the string is unrecognized (that is, it will report an
      unknown state:
      
      Migration: [ 69 %]^Cerror: internal error: unexpected migration status in cancelling.
      
      but the migration is still cancelled), but recognizing the string
      makes for a smoother user experience.
      
      * src/qemu/qemu_monitor.h
      (QEMU_MONITOR_MIGRATION_STATUS_CANCELLING): Add enum.
      * src/qemu/qemu_monitor.c (qemuMonitorMigrationStatus): Map it.
      * src/qemu/qemu_migration.c (qemuMigrationUpdateJobStatus): Adjust
      clients.
      * src/qemu/qemu_monitor_json.c
      (qemuMonitorJSONGetMigrationStatusReply): Likewise.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      e2660cb8