1. 18 2月, 2011 10 次提交
    • C
      add hash table rebalancing in virHashUpdateEntry · 5c5880e0
      Christophe Fergeau 提交于
      The code in virHashUpdateEntry and virHashAddEntry is really
      similar. However, the latter rebalances the hash table when
      one of its buckets contains too many elements while the former
      does not. Fix this discrepancy.
      5c5880e0
    • E
      hash: modernize debug code · aebe04d7
      Eric Blake 提交于
      * src/util/hash.c (virHashGrow) [DEBUG_GROW]: Use modern logging.
      Reported by Christophe Fergeau.
      aebe04d7
    • E
      build: improve 'make install' for VPATH builds · 31d094ca
      Eric Blake 提交于
      This still doesn't fix {html,devhelp}/libvirt-{libvirt-virterror}.html,
      but it's progress in the right direction.
      
      * docs/Makefile.am (%.html): Build into srcdir.
      31d094ca
    • W
      check more error info about whether drive_add failed · 34c13d0d
      Wen Congyang 提交于
      When we attach a disk, but we specify a wrong format of disk image,
      qemu monitor command drive_add will fail, but libvirt does not detect
      this error.
      Signed-off-by: NWen Congyang <wency@cn.fujitsu.com>
      34c13d0d
    • E
      logging: make VIR_ERROR and friends preserve errno · bb904f45
      Eric Blake 提交于
      Followup to commit 17e19add, and would have prevented the bug
      independently fixed in commit 76c57a7c.
      
      * src/util/logging.c (virLogMessage): Preserve errno, since
      logging should be as unintrusive as possible.
      bb904f45
    • E
      maint: avoid 'make syntax-check' from tarball · ce6fd650
      Eric Blake 提交于
      * .gnulib: update to latest gnulib for maint.mk fixes
      ce6fd650
    • L
      Give each virtual network bridge its own fixed MAC address · 5754dbd5
      Laine Stump 提交于
      This fixes https://bugzilla.redhat.com/show_bug.cgi?id=609463
      
      The problem was that, since a bridge always acquires the MAC address
      of the connected interface with the numerically lowest MAC, as guests
      are started and stopped, it was possible for the MAC address to change
      over time, and this change in the network was being detected by
      Windows 7 (it sees the MAC of the default route change), so on each
      reboot it would bring up a dialog box asking about this "new network".
      
      The solution is to create a dummy tap interface with a MAC guaranteed
      to be lower than any guest interface's MAC, and attach that tap to the
      bridge as soon as it's created. Since all guest MAC addresses start
      with 0xFE, we can just generate a MAC with the standard "0x52, 0x54,
      0" prefix, and it's guaranteed to always win (physical interfaces are
      never connected to these bridges, so we don't need to worry about
      competing numerically with them).
      
      Note that the dummy tap is never set to IFF_UP state - that's not
      necessary in order for the bridge to take its MAC, and not setting it
      to UP eliminates the clutter of having an (eg) "virbr0-nic" displayed
      in the output of the ifconfig command.
      
      I chose to not auto-generate the MAC address in the network XML
      parser, as there are likely to be consumers of that API that don't
      need or want to have a MAC address associated with the
      bridge.
      
      Instead, in bridge_driver.c when the network is being defined, if
      there is no MAC, one is generated. To account for virtual network
      configs that already exist when upgrading from an older version of
      libvirt, I've added a %post script to the specfile that searches for
      all network definitions in both the config directory
      (/etc/libvirt/qemu/networks) and the state directory
      (/var/lib/libvirt/network) that are missing a mac address, generates a
      random address, and adds it to the config (and a matching address to
      the state file, if there is one).
      
      docs/formatnetwork.html.in: document <mac address.../>
      docs/schemas/network.rng: add nac address to schema
      libvirt.spec.in: %post script to update existing networks
      src/conf/network_conf.[ch]: parse and format <mac address.../>
      src/libvirt_private.syms: export a couple private symbols we need
      src/network/bridge_driver.c:
          auto-generate mac address when needed,
          create dummy interface if mac address is present.
      tests/networkxml2xmlin/isolated-network.xml
      tests/networkxml2xmlin/routed-network.xml
      tests/networkxml2xmlout/isolated-network.xml
      tests/networkxml2xmlout/routed-network.xml: add mac address to some tests
      5754dbd5
    • L
      Allow brAddTap to create a tap device that is down · 13ae7a02
      Laine Stump 提交于
      An upcoming patch has a use for a tap device to be created that
      doesn't need to be actually put into the "up" state, and keeping it
      "down" keeps the output of ifconfig from being unnecessarily cluttered
      (ifconfig won't show down interfaces unless you add "-a").
      
      bridge.[ch]: add "up" as an arg to brAddTap()
      uml_conf.c, qemu_command.c: add "up" (set to "true") to brAddTap() call.
      13ae7a02
    • L
      Add txmode attribute to interface XML for virtio backend · e9bd5c0e
      Laine Stump 提交于
      This is in response to:
      
         https://bugzilla.redhat.com/show_bug.cgi?id=629662
      
      Explanation
      
      qemu's virtio-net-pci driver allows setting the algorithm used for tx
      packets to either "bh" or "timer". This is done by adding ",tx=bh" or
      ",tx=timer" to the "-device virtio-net-pci" commandline option.
      
      'bh' stands for 'bottom half'; when this is set, packet tx is all done
      in an iothread in the bottom half of the driver. (In libvirt, this
      option is called the more descriptive "iothread".)
      
      'timer' means that tx work is done in qemu, and if there is more tx
      data than can be sent at the present time, a timer is set before qemu
      moves on to do other things; when the timer fires, another attempt is
      made to send more data. (libvirt retains the name "timer" for this
      option.)
      
      The resulting difference, according to the qemu developer who added
      the option is:
      
          bh makes tx more asynchronous and reduces latency, but potentially
          causes more processor bandwidth contention since the cpu doing the
          tx isn't necessarily the cpu where the guest generated the
          packets.
      
      Solution
      
      This patch provides a libvirt domain xml knob to change the option on
      the qemu commandline, by adding a new attribute "txmode" to the
      <driver> element that can be placed inside any <interface> element in
      a domain definition. It's use would be something like this:
      
          <interface ...>
            ...
            <model type='virtio'/>
            <driver txmode='iothread'/>
            ...
          </interface>
      
      I chose to put this setting as an attribute to <driver> rather than as
      a sub-element to <tune> because it is specific to the virtio-net
      driver, not something that is generally usable by all network drivers.
      (note that this is the same placement as the "driver name=..."
      attribute used to choose kernel vs. userland backend for the
      virtio-net driver.)
      
      Actually adding the tx=xxx option to the qemu commandline is only done
      if the version of qemu being used advertises it in the output of
      
          qemu -device virtio-net-pci,?
      
      If a particular txmode is requested in the XML, and the option isn't
      listed in that help output, an UNSUPPORTED_CONFIG error is logged, and
      the domain fails to start.
      e9bd5c0e
    • L
      Restructure domain struct interface "driver" data for easier expansion · b670a412
      Laine Stump 提交于
      When the <driver> element (and its "name" attribute) was added to the
      domain XML's interface element, a "backend" enum was simply added to
      the toplevel of the virDomainNetDef struct.
      
      Ignoring the naming inconsistency ("name" vs. "backend"), this is fine
      when there's only a single item contained in the driver element of the
      XML, but doesn't scale well as we add more attributes that apply to
      the backend of the virtio-net driver, or add attributes applicable to
      other drivers.
      
      This patch changes virDomainNetDef in two ways:
      
      1) Rename the item in the struct from "backend" to "name", so that
         it's the same in the XML and in the struct, hopefully avoiding
         confusion for someone unfamiliar with the function of the
         attribute.
      
      2) Create a "driver" union within virDomainNetDef, and a "virtio"
         struct in that struct, which contains the "name" enum value.
      
      3) Move around the virDomainNetParse and virDomainNetFormat functions
         to allow for simple plugin of new attributes without disturbing
         existing code. (you'll note that this results in a seemingly
         redundant if() in the format function, but that will no longer be
         the case as soon as a 2nd attribute is added).
      
      In the future, new attributes for the virtio driver backend can be
      added to the "virtio" struct, and any other network device backend that
      needs an attribute will have its own struct added to the "driver"
      union.
      b670a412
  2. 17 2月, 2011 7 次提交
    • J
      build: Fix VPATH build · 85e601f8
      Jiri Denemark 提交于
      Even VPATH make dist succeeds now
      85e601f8
    • D
      Move all the QEMU migration code to a new file · 766de435
      Daniel P. Berrange 提交于
      The introduction of the v3 migration protocol, along with
      support for migration cookies, will significantly expand
      the size of the migration code. Move it all to a separate
      file to make it more manageable
      
      The functions are not moved 100%. The API entry points
      remain in the main QEMU driver, but once the public
      virDomainPtr is resolved to the internal virDomainObjPtr,
      all following code is moved.
      
      This will allow the new v3 API entry points to call into the
      same shared internal migration functions
      
      * src/qemu/qemu_domain.c, src/qemu/qemu_domain.h: Add
        qemuDomainFormatXML helper method
      * src/qemu/qemu_driver.c: Remove all migration code
      * src/qemu/qemu_migration.c, src/qemu/qemu_migration.h: Add
        all migration code.
      766de435
    • D
      Split all QEMU process mangement code into separate file · 48c2d6c6
      Daniel P. Berrange 提交于
      Move the qemudStartVMDaemon and qemudShutdownVMDaemon
      methods into a separate file, renaming them to
      qemuProcessStart, qemuProcessStop. All helper methods
      called by these are also moved & renamed to match
      
      * src/Makefile.am: Add qemu_process.c/.h
      * src/qemu/qemu_command.c: Add qemuDomainAssignPCIAddresses
      * src/qemu/qemu_command.h: Add VNC port min/max
      * src/qemu/qemu_domain.c, src/qemu/qemu_domain.h: Add
        domain event queue helpers
      * src/qemu/qemu_driver.c, src/qemu/qemu_driver.h: Remove
        all QEMU process startup/shutdown functions
      * src/qemu/qemu_process.c, src/qemu/qemu_process.h: Add
        all QEMU process startup/shutdown functions
      48c2d6c6
    • O
      storage: Allow to delete device mapper disk partition · df1011ca
      Osier Yang 提交于
      The name convention of device mapper disk is different, and 'parted'
      can't be used to delete a device mapper disk partition. e.g.
      
      Name                 Path
      -----------------------------------------
      3600a0b80005ad1d7000093604cae912fp1 /dev/mapper/3600a0b80005ad1d7000093604cae912fp1
      
      Error: Expecting a partition number.
      
      This patch introduces 'dmsetup' to fix it.
      
      Changes:
        - New function "virIsDevMapperDevice" in "src/utils/utils.c"
        - remove "is_dm_device" in "src/storage/parthelper.c", use
          "virIsDevMapperDevice" instead.
        - Requires "device-mapper" for 'with-storage-disk" in "libvirt.spec.in"
        - Check "dmsetup" in 'configure.ac' for "with-storage-disk"
        - Changes on "src/Makefile.am" to link against libdevmapper
        - New entry for "virIsDevMapperDevice" in "src/libvirt_private.syms"
      
      Changes from v1 to v3:
        - s/virIsDeviceMapperDevice/virIsDevMapperDevice/g
        - replace "virRun" with "virCommand"
        - sort the list of util functions in "libvirt_private.syms"
        - ATTRIBUTE_NONNULL(1) for virIsDevMapperDevice declaration.
      
      e.g.
      
      Name                 Path
      -----------------------------------------
      3600a0b80005ad1d7000093604cae912fp1 /dev/mapper/3600a0b80005ad1d7000093604cae912fp1
      
      Vol /dev/mapper/3600a0b80005ad1d7000093604cae912fp1 deleted
      
      Name                 Path
      -----------------------------------------
      df1011ca
    • D
      Release of libvirt-0.8.8 · 43f8773c
      Daniel Veillard 提交于
      * configure.ac docs/news.html.in libvirt.spec.in: bump version and add docs
      * po/*.po*: updated Gujarati, Polish and Dutch localisations and regenerated
      43f8773c
    • O
      qemu: Error prompt when saving a shutoff domain · cd951ad2
      Osier Yang 提交于
      "qemudDomainSaveFlag" goto wrong label "endjob", which will cause
      error when security manager trying to restore label (regression).
      
      As it's more reasonable to check if vm is shutoff immediately, and
      return right away if it is, remove the checking in "qemudDomainSaveFlag",
      and add checking in "qemudDomainSave".
      
      * src/qemu/qemu_driver.c
      cd951ad2
    • E
      maint: delete unused 'make install' step · 51ff630f
      Eric Blake 提交于
      Libxml2-Logo-90x34.gif was removed from the repository in Sep 2009
      (commit d6d528ca) because our docs no longer reference it.
      
      * docs/Makefile.am (install-data-local): Don't install missing file.
      51ff630f
  3. 16 2月, 2011 11 次提交
    • E
      cgroup: preserve correct errno on failure · 76c57a7c
      Eric Blake 提交于
      * src/util/cgroup.c (virCgroupSetValueStr, virCgroupGetValueStr)
      (virCgroupRemoveRecursively): VIR_DEBUG can clobber errno.
      (virCgroupRemove): Use VIR_DEBUG rather than DEBUG.
      76c57a7c
    • Z
      Update czech localization · 00c9cf50
      Zdenek Styblik 提交于
      00c9cf50
    • J
      qemu: Fix command line generation with faked host CPU · 453d05da
      Jiri Denemark 提交于
      The code expected that host CPU architecture matches the architecture on
      which libvirt runs. This is normally true but not in tests, where host
      CPU is faked to produce consistent results.
      453d05da
    • J
      tests: Fake host capabilities properly · aa3b2e40
      Jiri Denemark 提交于
      Since we fake host CPU we should also fake host arch instead of taking
      the real architecture tests are running on.
      aa3b2e40
    • E
      docs: fix typos · c106a837
      Eric Blake 提交于
      * docs/drvopenvz.html.in: Spell administrator correctly.
      * docs/drvuml.html.in: Likewise.
      * src/qemu/qemu.conf: Likewise.  Fix other typos, too.
      c106a837
    • M
      Avoid empty strings when --with-packager(-version) is not specified · 251ad3b2
      Matthias Bolte 提交于
      Make with_packager and with_packager_version default to "no". This way
      --without-packager-version (as shorthand for --with-packager(-version)=no)
      works correctly too.
      
      Prior to this patch libvirt outputs a line like this when
      --with-packager(-version) was not specified
      
      # ./daemon/libvirtd
      14:11:15.018: 31796: info : libvirt version: 0.8.8, package:  ()
      
      Now the unspecified parts are correctly omitted.
      
      Reported by Osier Yang.
      251ad3b2
    • E
      build: address clang reports about virCommand · 3db08aea
      Eric Blake 提交于
      clang had 5 reports against virCommand; three were false positives
      (a NULL deref in ProcessIO solved by sa_assert, and two uninitialized
      memory operations solved by adding an initializer), but two were real.
      
      * src/util/command.c (virCommandProcessIO): Fix real bug of
      possible NULL dereference.  Teach clang that buf is never NULL.
      (virCommandRun): Teach clang that infd is only ever accessed when
      initialized.
      3db08aea
    • E
      build: silence some clang warnings · 1a82c5f7
      Eric Blake 提交于
      * tools/virsh.c (cmdHelp): Kill dead variables.
      1a82c5f7
    • E
      qemu: don't mask real error with oom report · 56152be5
      Eric Blake 提交于
      * src/qemu/qemu_command.c (qemuBuildCommandLine): Don't report oom
      after qemuBuildControllerDevStr, which reported its own errors.
      56152be5
    • E
      qemu: avoid NULL derefs · abaa6560
      Eric Blake 提交于
      The processWatchdogEvent fix is real, although it can only trigger
      on OOM, since bad things happen if doCoreDump is called with a NULL
      pathname argument.  The other fixes silence clang, but aren't a real
      bug because virReportErrorHelper tolerates a NULL format string even
      though *printf does not.
      
      * src/qemu/qemu_driver.c (processWatchdogEvent): Exit on OOM.
      (qemuDomainIsActive, qemuDomainIsPersistent, qemuDomainIsUpdated):
      Provide valid message.
      abaa6560
    • E
      virDomainMemoryStats: avoid null dereference · ae891f95
      Eric Blake 提交于
      * src/libvirt.c (virDomainMemoryStats): Check domain before flags.
      ae891f95
  4. 15 2月, 2011 12 次提交