1. 04 4月, 2012 2 次提交
  2. 03 4月, 2012 1 次提交
    • J
      qemu: Start nested job in qemuDomainCheckEjectableMedia · 66cab01a
      Jiri Denemark 提交于
      Originally, qemuDomainCheckEjectableMedia was entering monitor with qemu
      driver lock. Commit 2067e31b, which I
      made to fix that, revealed another issue we had (but didn't notice it
      since the driver was locked): we didn't set nested job when
      qemuDomainCheckEjectableMedia is called during migration. Thus the
      original fix I made was wrong.
      66cab01a
  3. 02 4月, 2012 1 次提交
    • P
      Support clock=variable relative to localtime · b8bf79aa
      Philipp Hahn 提交于
      Since Xen 3.1 the clock=variable semantic is supported. In addition to
      qemu/kvm Xen also knows about a variant where the offset is relative to
      'localtime' instead of 'utc'.
      
      Extends the libvirt structure with a flag 'basis' to specify, if the
      offset is relative to 'localtime' or 'utc'.
      
      Extends the libvirt structure with a flag 'reset' to force the reset
      behaviour of 'localtime' and 'utc'; this is needed for backward
      compatibility with previous versions of libvirt, since they report
      incorrect XML.
      
      Adapt the only user 'qemu' to the new name.
      Extend the RelaxNG schema accordingly.
      Document the new 'basis' attribute in the HTML documentation.
      Adapt test for the new attribute.
      Signed-off-by: NPhilipp Hahn <hahn@univention.de>
      b8bf79aa
  4. 31 3月, 2012 5 次提交
    • E
      qemu: reflect any memory rounding back to xml · 095b0bc4
      Eric Blake 提交于
      If we round up a user's memory request, we should update the XML
      to reflect the actual value in use by the VM, rather than giving
      an artificially small value back to the user.
      
      * src/qemu/qemu_command.c (qemuBuildNumaArgStr)
      (qemuBuildCommandLine): Reflect rounding back to XML.
      095b0bc4
    • H
      qemu: support live change of the bridge used by a guest network device · 2711ac87
      Hendrik Schwartke 提交于
      This patch was created to resolve this upstream bug:
      
        https://bugzilla.redhat.com/show_bug.cgi?id=784767
      
      and is at least a partial solution to this RHEL RFE:
      
        https://bugzilla.redhat.com/show_bug.cgi?id=805071
      
      Previously the only attribute of a network device that could be
      modified by virUpdateDeviceFlags() ("virsh update-device") was the
      link state; attempts to change any other attribute would log an error
      and fail.
      
      This patch adds recognition of a change in bridge device name, and
      supports reconnecting the guest's interface to the new device.
      Standard audit logs for detaching and attaching a network device are
      also generated. Although the current auditing function doesn't log the
      bridge being attached to, this will later be changed in a separate
      patch.
      2711ac87
    • L
      qemu: eliminate nested switch, simplify code · ecde1591
      Laine Stump 提交于
      qemuBuildHostNetStr had a switch-within-a-switch where both were
      looking at the same variable. This was apparently to take advantage of
      code common to three different cases (while also taking care of some
      code that was different). However, there were only 2 lines common to
      all, one of those can be eliminated by merging it into the
      virAsprintfs that are in each case. On top of that, all the extra
      empty cases cause Coverity complaints (because they are unreachable),
      but absence of the empty cases causes a compile error due to
      "enumeration value not handled in switch".
      
      The solution is to just make each toplevel case independent, folding
      in the common code to each.
      ecde1591
    • L
      qemu: set default name for SPICE agent channel when generating command · 3269ee65
      Laine Stump 提交于
      commit b0e2bb33 set a default value for the SPICE agent channel by
      inserting it during parsing of the channel XML. That method of setting
      a default is problematic because it makes a format/parse roundtrip
      unclean, and experience with setting other values as a side effect of
      parsing has led to headaches (e.g. automatically setting a MAC address
      in the parser when one isn't specified in the input XML).
      
      This patch does not revert commit b0e2bb33 (it will be reverted in a
      separate patch) but adds the alternate implementation of simply
      inserting the default value in the appropriate place on the qemu
      commandline when no value is provided.
      3269ee65
    • M
      qemu_agent: Issue guest-sync prior to every command · 075c8518
      Michal Privoznik 提交于
      If we issue guest command and GA is not running, the issuing thread
      will block endlessly. We can check for GA presence by issuing
      guest-sync with unique ID (timestamp). We don't want to issue real
      command as even if GA is not running, once it is started, it process
      all commands written to GA socket.
      075c8518
  5. 30 3月, 2012 2 次提交
    • D
      Consistent style for usage of sizeof operator · ec8cae93
      Daniel P. Berrange 提交于
      The code is splattered with a mix of
      
        sizeof foo
        sizeof (foo)
        sizeof(foo)
      
      Standardize on sizeof(foo) and add a syntax check rule to
      enforce it
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      ec8cae93
    • W
      fix a deadlock when qemu cannot start · ff68d6ee
      Wen Congyang 提交于
      When qemu cannot start, we may call qemuProcessStop() twice.
      We have check whether the vm is running at the beginning of
      qemuProcessStop() to avoid libvirt deadlock. We call
      qemuProcessStop() with driver and vm locked. It seems that
      we can avoid libvirt deadlock. But unfortunately we may
      unlock driver and vm in the function qemuProcessKill() while
      vm->def->id is not -1. So qemuProcessStop() will be run twice,
      and monitor will be freed unexpectedly. So we should set
      vm->def->id to -1 at the beginning of qemuProcessStop().
      ff68d6ee
  6. 29 3月, 2012 1 次提交
    • C
      qemu: Make migration fail when port profile association fails on the dst host · a02500d0
      Christian Benvenuti 提交于
      In the current V3 migration protocol, Libvirt does not
      check the result of the function
      
        qemuMigrationVPAssociatePortProfiles
      
      This means that it is possible for a migration to complete
      successfully even when the VM loses network connectivity on
      the destination host.
      
      With this change libvirt aborts the migration
      (during the "finish" step) when the above function fails, that
      is to say when at least one of the port profile associations fails.
      
      Signed-off by: Christian Benvenuti <benve@cisco.com>
      a02500d0
  7. 27 3月, 2012 6 次提交
    • E
      snapshot: don't pass NULL to QMP command creation · a14eda31
      Eric Blake 提交于
      Commit d42a2ffc caused a regression in creating a disk-only snapshot
      of a qcow2 disk; by passing the wrong variable to the monitor call,
      libvirt ended up creating JSON that looked like "format":null instead
      of the intended "format":"qcow2".
      
      To make it easier to diagnose this in the future, make JSON creation
      error out if "s:arg" is paired with NULL (it is still possible to
      use "n:arg" in the rare cases where qemu will accept a null).
      
      * src/qemu/qemu_driver.c
      (qemuDomainSnapshotCreateSingleDiskActive): Pass correct value.
      * src/qemu/qemu_monitor_json.c (qemuMonitorJSONMakeCommandRaw):
      Improve error message.
      a14eda31
    • D
      qemu,util: on restart of libvirt restart vepa callbacks · bd6b0a05
      D. Herrendoerfer 提交于
      When libvirtd is restarted, also restart the netlink event
      message callbacks for existing VEPA connections and send
      a message to lldpad for these existing links, so it learns
      the new libvirtd pid.
      Signed-off-by: ND. Herrendoerfer <d.herrendoerfer@herrendoerfer.name>
      bd6b0a05
    • J
      qemu: Avoid entering monitor with locked driver · 2067e31b
      Jiri Denemark 提交于
      This avoids possible deadlock of the qemu driver in case a domain is
      begin migrated (in Begin phase) and unrelated connection to qemu driver
      is closed at the right time.
      
      I checked all callers of qemuDomainCheckEjectableMedia() and they are
      calling this function with qemu driver locked.
      2067e31b
    • L
      build: fix "missing initializer" error in qemu_process.c · ecb4d92d
      Laine Stump 提交于
      Found when attempting to build on Fedora 17 alpha with:
      
         ./autogen.sh --system --enable-compile-warnings=error
      
      (this same build command works without problem on Fedora 16). Since
      the consumer of the qemuProcessReconnectData doesn't assume that the
      other fields of the struct are initialized (although it uses them
      internally), the simpler solution is to just switch to C99-style
      struct initialization (which doesn't require specification of all
      fields).
      ecb4d92d
    • L
      build: avoid frame size error when building without -O2 · cf57d345
      Laine Stump 提交于
      libvirt always adds -Werror-frame-larger-than=4096 to the flags when
      it builds. When building on Fedora 17, two functions with multiple
      1024 buffers declared inside if {} blocks would generate frame size
      errors; apparently the version of gcc on Fedora 16 will merge these
      multiple buffers into a single buffer even when optimization is off,
      but Fedora 17 won't.
      
      The fix is to declare a single 1024 buffer at the top of the two
      offending functions, and reuse the single buffer throughout the
      functions.
      cf57d345
    • M
      Cleanup for a return statement in source files · 9943276f
      Martin Kletzander 提交于
      Return statements with parameter enclosed in parentheses were modified
      and parentheses were removed. The whole change was scripted, here is how:
      
      List of files was obtained using this command:
      git grep -l -e '\<return\s*([^()]*\(([^()]*)[^()]*\)*)\s*;' |             \
      grep -e '\.[ch]$' -e '\.py$'
      
      Found files were modified with this command:
      sed -i -e                                                                 \
      's_^\(.*\<return\)\s*(\(\([^()]*([^()]*)[^()]*\)*\))\s*\(;.*$\)_\1 \2\4_' \
      -e 's_^\(.*\<return\)\s*(\([^()]*\))\s*\(;.*$\)_\1 \2\3_'
      
      Then checked for nonsense.
      
      The whole command looks like this:
      git grep -l -e '\<return\s*([^()]*\(([^()]*)[^()]*\)*)\s*;' |             \
      grep -e '\.[ch]$' -e '\.py$' | xargs sed -i -e                            \
      's_^\(.*\<return\)\s*(\(\([^()]*([^()]*)[^()]*\)*\))\s*\(;.*$\)_\1 \2\4_' \
      -e 's_^\(.*\<return\)\s*(\([^()]*\))\s*\(;.*$\)_\1 \2\3_'
      9943276f
  8. 24 3月, 2012 7 次提交
    • O
      spec: Add missed dependancy for numad · beb76e37
      Osier Yang 提交于
      numad is available since Fedora 17 and RHEL6.X. And it's not supported
      on s390[x] and ARM.
      beb76e37
    • E
      snapshot: improve qemu handling of reused snapshot targets · d42a2ffc
      Eric Blake 提交于
      The oVirt developers have stated that the real reasons they want
      to have qemu reuse existing volumes when creating a snapshot are:
      1. the management framework is set up so that creation has to be
      done from a central node for proper resource tracking, and having
      libvirt and/or qemu create things violates the framework, and
      2. qemu defaults to creating snapshots with an absolute path to
      the backing file, but oVirt wants to manage a backing chain that
      uses just relative names, to allow for easier migration of a chain
      across storage locations.
      
      When 0.9.10 added VIR_DOMAIN_SNAPSHOT_CREATE_REUSE_EXT (commit
      4e9953a4), it only addressed point 1, but libvirt was still using
      O_TRUNC which violates point 2.  Meanwhile, the new qemu
      'transaction' monitor command includes a new optional mode argument
      that will force qemu to reuse the metadata of the file it just
      opened (with the burden on the caller to have valid metadata there
      in the first place).  So, this tweaks the meaning of the flag to
      cover both points as intended for use by oVirt.  It is not strictly
      backward-compatible to 0.9.10 behavior, but it can be argued that
      the O_TRUNC of 0.9.10 was a bug.
      
      Note that this flag is all-or-nothing, and only selects between
      'existing' and the default 'absolute-paths'.  A more flexible
      approach that would allow per-disk selections, as well as adding
      support for the 'no-backing-file' mode, would be possible by
      extending the <domainsnapshot> xml to have a per-disk mode, but
      until we have a management application expressing a need for that
      additional complexity, it is not worth doing.
      
      * src/libvirt.c (virDomainSnapshotCreateXML): Tweak documentation.
      * src/qemu/qemu_monitor.h (qemuMonitorDiskSnapshot): Add
      parameters.
      * src/qemu/qemu_monitor_json.h (qemuMonitorJSONDiskSnapshot):
      Likewise.
      * src/qemu/qemu_monitor.c (qemuMonitorDiskSnapshot): Pass them
      through.
      * src/qemu/qemu_monitor_json.c (qemuMonitorJSONDiskSnapshot): Use
      new monitor command arguments.
      * src/qemu/qemu_driver.c (qemuDomainSnapshotCreateDiskActive)
      (qemuDomainSnapshotCreateSingleDiskActive): Adjust callers.
      (qemuDomainSnapshotDiskPrepare): Allow qed, modify rules on reuse.
      d42a2ffc
    • E
      snapshot: wire up qemu transaction command · 0436d328
      Eric Blake 提交于
      The hardest part about adding transactions is not using the new
      monitor command, but undoing the partial changes we made prior
      to a failed transaction.
      
      * src/qemu/qemu_driver.c (qemuDomainSnapshotCreateDiskActive): Use
      transaction when available.
      (qemuDomainSnapshotUndoSingleDiskActive): New function.
      (qemuDomainSnapshotCreateSingleDiskActive): Pass through actions.
      (qemuDomainSnapshotCreateXML): Adjust caller.
      0436d328
    • E
      snapshot: add support for qemu transaction command · 64d5e815
      Eric Blake 提交于
      QEmu 1.1 is adding a 'transaction' command to the JSON monitor.
      Each element of a transaction corresponds to a top-level command,
      with the additional guarantee that the transaction flushes all
      pending I/O, then guarantees that all actions will be successful
      as a group or that failure will roll back the state to what it
      was before the monitor command.  The difference between a
      top-level command:
      
      { "execute": "blockdev-snapshot-sync", "arguments":
        { "device": "virtio0", ... } }
      
      and a transaction:
      
      { "execute": "transaction", "arguments":
        { "actions": [
          { "type": "blockdev-snapshot-sync", "data":
            { "device": "virtio0", ... } } ] } }
      
      is just a couple of changed key names and nesting the shorter
      command inside a JSON array to the longer command.  This patch
      just adds the framework; the next patch will actually use a
      transaction.
      
      * src/qemu/qemu_monitor_json.c (qemuMonitorJSONMakeCommand): Move
      guts...
      (qemuMonitorJSONMakeCommandRaw): ...into new helper.  Add support
      for array element.
      (qemuMonitorJSONTransaction): New command.
      (qemuMonitorJSONDiskSnapshot): Support use in a transaction.
      * src/qemu/qemu_monitor_json.h (qemuMonitorJSONDiskSnapshot): Add
      argument.
      (qemuMonitorJSONTransaction): New declaration.
      * src/qemu/qemu_monitor.h (qemuMonitorTransaction): Likewise.
      (qemuMonitorDiskSnapshot): Add argument.
      * src/qemu/qemu_monitor.c (qemuMonitorTransaction): New wrapper.
      (qemuMonitorDiskSnapshot): Pass argument on.
      * src/qemu/qemu_driver.c
      (qemuDomainSnapshotCreateSingleDiskActive): Update caller.
      64d5e815
    • E
      snapshot: rudimentary qemu support for atomic disk snapshot · 4c4cc1b9
      Eric Blake 提交于
      Taking an external snapshot of just one disk is atomic, without having
      to pause and resume the VM.  This also paves the way for later patches
      to interact with the new qemu 'transaction' monitor command.
      
      The various scenarios when requesting atomic are:
      online, 1 disk, old qemu - safe, allowed by this patch
      online, more than 1 disk, old qemu - failure, this patch
      offline snapshot - safe, once a future patch implements offline disk snapshot
      online, 1 or more disks, new qemu - safe, once future patch uses transaction
      
      Taking an online system checkpoint snapshot is atomic, since it is
      done via a single 'savevm' monitor command.  Taking an offline system
      checkpoint snapshot is atomic, thanks to the previous patch.
      
      * src/qemu/qemu_driver.c (qemuDomainSnapshotCreateXML): Support
      new flag for single-disk setups.
      (qemuDomainSnapshotDiskPrepare): Check for atomic here.
      (qemuDomainSnapshotCreateDiskActive): Skip pausing the VM when
      atomic supported.
      (qemuDomainSnapshotIsAllowed): Use bool instead of int.
      4c4cc1b9
    • E
      snapshot: make offline qemu snapshots atomic · 922d498e
      Eric Blake 提交于
      Offline internal snapshots can be rolled back with just a little
      bit of refactoring, meaning that we are now automatically atomic.
      
      * src/qemu/qemu_domain.c (qemuDomainSnapshotForEachQcow2): Move
      guts...
      (qemuDomainSnapshotForEachQcow2Raw): ...to new helper, to allow
      rollbacks.
      922d498e
    • E
      snapshot: add qemu capability for 'transaction' command · 311357d9
      Eric Blake 提交于
      We need a capability bit to gracefully error out if some of the
      additions in future patches can't be implemented by the running qemu.
      
      * src/qemu/qemu_capabilities.h (QEMU_CAPS_TRANSACTION): New cap.
      * src/qemu/qemu_capabilities.c (qemuCaps): Name it.
      * src/qemu/qemu_monitor_json.c (qemuMonitorJSONCheckCommands): Set
      it.
      311357d9
  9. 23 3月, 2012 10 次提交
    • O
      qemu: Update domain status to running while wakeup event is emitted · 7c5a0c94
      Osier Yang 提交于
      This introduces a new running reason VIR_DOMAIN_RUNNING_WAKEUP,
      and new suspend event type VIR_DOMAIN_EVENT_STARTED_WAKEUP.
      
      While a wakeup event is emitted, the domain which entered into
      VIR_DOMAIN_PMSUSPENDED will be transferred to "running"
      with reason VIR_DOMAIN_RUNNING_WAKEUP, and a new domain lifecycle
      event emitted with type VIR_DOMAIN_EVENT_STARTED_WAKEUP.
      7c5a0c94
    • O
      321fa64b
    • O
      Add support for the suspend event · 487c0633
      Osier Yang 提交于
      This patch introduces a new event type for the QMP event
      SUSPEND:
      
          VIR_DOMAIN_EVENT_ID_PMSUSPEND
      
      The event doesn't take any data, but considering there might
      be reason for wakeup in future, the callback definition is:
      
      typedef void
      (*virConnectDomainEventSuspendCallback)(virConnectPtr conn,
                                              virDomainPtr dom,
                                              int reason,
                                              void *opaque);
      
      "reason" is unused currently, always passes "0".
      487c0633
    • O
      Add support for the wakeup event · 57ddcc23
      Osier Yang 提交于
      This patch introduces a new event type for the QMP event
      WAKEUP:
      
          VIR_DOMAIN_EVENT_ID_PMWAKEUP
      
      The event doesn't take any data, but considering there might
      be reason for wakeup in future, the callback definition is:
      
      typedef void
      (*virConnectDomainEventWakeupCallback)(virConnectPtr conn,
                                             virDomainPtr dom,
                                             int reason,
                                             void *opaque);
      
      "reason" is unused currently, always passes "0".
      57ddcc23
    • O
      qemu: Update tray status while tray moved event is emitted · 2d19e33f
      Osier Yang 提交于
      With this patch, libvirt won't start the guest with the medium
      source which already ejected by guest when doing migration, or
      saving/restoring.
      2d19e33f
    • O
      7fcf943b
    • O
      qemu: Do not start with source for removable disks if tray is open · ad7db439
      Osier Yang 提交于
      This is similiar with physical world, one will be surprised if the
      box starts with medium exists while the tray is open.
      
      New tests are added, tests disk-{cdrom,floppy}-tray are for the qemu
      supports "-device" flag, and disk-{cdrom,floppy}-no-device-cap are
      for old qemu, i.e. which doesn't support "-device" flag.
      ad7db439
    • O
      Add support for event tray moved of removable disks · a26a1969
      Osier Yang 提交于
      This patch introduces a new event type for the QMP event
      DEVICE_TRAY_MOVED, which occurs when the tray of a removable
      disk is moved (i.e opened or closed):
      
          VIR_DOMAIN_EVENT_ID_TRAY_CHANGE
      
      The event's data includes the device alias and the reason
      for tray status' changing, which indicates why the tray
      status was changed. Thus the callback definition for the event
      is:
      
      enum {
          VIR_DOMAIN_EVENT_TRAY_CHANGE_OPEN = 0,
          VIR_DOMAIN_EVENT_TRAY_CHANGE_CLOSE,
      
      \#ifdef VIR_ENUM_SENTINELS
          VIR_DOMAIN_EVENT_TRAY_CHANGE_LAST
      \#endif
      } virDomainEventTrayChangeReason;
      
      typedef void
      (*virConnectDomainEventTrayChangeCallback)(virConnectPtr conn,
                                                 virDomainPtr dom,
                                                 const char *devAlias,
                                                 int reason,
                                                 void *opaque);
      a26a1969
    • D
      Centralize error reporting for URI parsing/formatting problems · 1f66c18f
      Daniel P. Berrange 提交于
      Move error reporting out of the callers, into virURIParse
      and virURIFormat, to get consistency.
      
      * include/libvirt/virterror.h, src/util/virterror.c: Add VIR_FROM_URI
      * src/util/viruri.c, src/util/viruri.h: Add error reporting
      * src/esx/esx_driver.c, src/libvirt.c, src/libxl/libxl_driver.c,
        src/lxc/lxc_driver.c, src/openvz/openvz_driver.c,
        src/qemu/qemu_driver.c, src/qemu/qemu_migration.c,
        src/remote/remote_driver.c, src/uml/uml_driver.c,
        src/vbox/vbox_tmpl.c, src/vmx/vmx.c, src/xen/xen_driver.c,
        src/xen/xend_internal.c, tests/viruritest.c: Remove error
        reporting
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      1f66c18f
    • D
      Use virURIFree instead of xmlFreeURI · c33dae31
      Daniel P. Berrange 提交于
      Since we defined a custom virURIPtr type, we should use a
      virURIFree method instead of assuming it will always be
      a typedef for xmlURIPtr
      
      * src/util/viruri.c, src/util/viruri.h, src/libvirt_private.syms:
        Add a virURIFree method
      * src/datatypes.c, src/esx/esx_driver.c, src/libvirt.c,
        src/qemu/qemu_migration.c, src/vmx/vmx.c, src/xen/xend_internal.c,
        tests/viruritest.c: s/xmlFreeURI/virURIFree/
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      c33dae31
  10. 22 3月, 2012 5 次提交
    • J
      qemu: Avoid dangling migration-out job when client dies · 1fdc53c3
      Jiri Denemark 提交于
      When a client which started non-p2p migration dies in a bad time, the
      source libvirtd never clears the migration job and almost nothing can be
      done with the domain without restarting the daemon. This patch makes use
      of connection close callbacks and ensures that migration job is properly
      discarded when the client disconnects.
      1fdc53c3
    • J
      527d867a
    • J
      qemu: Add connection close callbacks · 79127360
      Jiri Denemark 提交于
      Add support for registering arbitrary callback to be called for a domain
      when a connection gets closed.
      79127360
    • J
      qemu: Avoid dangling migration-in job on shutoff domains · 4f061ea6
      Jiri Denemark 提交于
      Destination daemon should not rely on the client or source daemon
      (depending on the type of migration) to call Finish when migration
      fails, because the client may crash before it can do so. The domain
      prepared for incoming migration is set to be destroyed (and migration
      job cleaned up) when connection with the client closes but this is not
      enough. If the associated qemu process crashes after Prepare step and
      the domain is cleaned up before the connection gets closed, autodestroy
      is not called for the domain and migration jobs remains set. In case the
      domain is defined on destination host (i.e., it is not completely
      removed once destroyed) we keep the job set for ever. To fix this, we
      register a cleanup callback which is responsible to clean migration-in
      job when a domain dies anywhere between Prepare and Finish steps. Note
      that we can't blindly clean any job when spotting EOF on monitor since
      normally an API is running at that time.
      4f061ea6
    • J
      qemu: Add support for domain cleanup callbacks · bf9f0a97
      Jiri Denemark 提交于
      Add support for registering cleanup callbacks to be run when a domain
      transitions to shutoff state.
      bf9f0a97