1. 12 3月, 2010 4 次提交
    • C
      Make nodeGetInfo report the correct number of NUMA nodes. · 83988bd4
      Chris Lalancette 提交于
      The nodeGetInfo code was always assuming that machine had a
      single NUMA node, which is not correct.  The good news is that
      libnuma gives us this information pretty easily, so let's
      properly report it.
      
      NOTE: With recent hardware starting to support CPU hot-add
      and hot-remove, both this code and the nodeCapsInitNUMA()
      code are quickly going to become obsolete.  We'll have to
      think of a more dynamic solution for dealing with NUMA
      nodes and CPUs that can come and go at will.
      Signed-off-by: NChris Lalancette <clalance@redhat.com>
      83988bd4
    • L
      Silence compiler complaints about non-literal format strings · ca842a6b
      Laine Stump 提交于
      * src/util/macvtap.c: replace _("....") with "%s", _("...") in two places
      ca842a6b
    • C
      Fix hang in qemudDomainCoreDump. · d376b7d6
      Chris Lalancette 提交于
      Currently if you dump the core of a qemu guest with
      qemudDomainCoreDump, subsequent commands will hang
      up libvirtd.  This is because qemudDomainCoreDump
      uses qemuDomainWaitForMigrationComplete, which expects
      the qemuDriverLock to be held when it's called.  This
      patch does the simple thing and moves the qemuDriveUnlock
      to the end of the qemudDomainCoreDump so that the driver
      lock is held for the entirety of the call (as it is done
      in qemudDomainSave).  We will probably want to make the
      lock more fine-grained than that in the future, but
      we can fix both qemudDomainCoreDump and qemudDomainSave
      at the same time.
      Signed-off-by: NChris Lalancette <clalance@redhat.com>
      d376b7d6
    • C
      Make sure qemudDomainSetVcpus doesn't hang. · 2c555d87
      Chris Lalancette 提交于
      The code to add job support into libvirtd caused a problem
      in qemudDomainSetVcpus.  In particular, a qemuDomainObjEndJob()
      call was added at the end of the function, but a
      corresponding qemuDomainObjBeginJob() was not.  Additionally,
      a call to qemuDomainObj{Enter,Exit}Monitor() was also missed
      in qemudDomainHotplugVcpus().  These missing calls conspired to
      cause a hang in the libvirtd process after the command was
      finished.  Fix this by adding the missing calls.
      Signed-off-by: NChris Lalancette <clalance@redhat.com>
      2c555d87
  2. 11 3月, 2010 4 次提交
  3. 10 3月, 2010 5 次提交
    • C
      Fix up nodeinfo parsing code. · 7be9270c
      Chris Lalancette 提交于
      As pointed out by eblake, I made a real hash of the
      nodeinfo code with commit
      aa2f6f96.  This patch
      cleans it up:
      
      1)  Do more work at compile time instead of runtime (minor)
      2)  Properly handle the hex digits that come from
      /sys/devices/system/cpu/cpu*/topology/thread_siblings
      3)  Fix up some error paths that could cause SEGV
      4)  Used unsigned's for the cpu numbers (cpu -1 doesn't
      make any sense)
      
      Along with the recent patch from jdenemar to zero out
      the nodeinfo structure, I've re-tested this on the
      machines having the problems, and it seems to be good.
      Signed-off-by: NChris Lalancette <clalance@redhat.com>
      7be9270c
    • E
      build: consistently indent preprocessor directives · 36d8e7d8
      Eric Blake 提交于
      * global: patch created by running:
      for f in $(git ls-files '*.[ch]') ; do
          cppi $f > $f.t && mv $f.t $f
      done
      36d8e7d8
    • E
      virsh: fix existing N_ uses · f6876e10
      Eric Blake 提交于
      It is a bad idea to call gettext on an already-translated
      string.  In cases where a string must be translated separately
      from where it is exposed to xgettext, the gettext manual
      recommends the idiom of N_() wrapping gettext_noop for
      marking the string.
      
      * src/internal.h (N_): Fix definition to match gettext manual.
      * tools/virsh.c: (cmdHelp, cmdList, cmdDomstate, cmdDominfo)
      (cmdVcpuinfo, vshUsage): Replace incorrect use of N_ with _.
      (vshCmddefHelp): Likewise.  Mark C format strings appropriately.
      f6876e10
    • J
      06b83560
    • J
      Wipe nodeinfo structure before filling it · 22e39d0e
      Jiri Denemark 提交于
      The nodeinfo structure wasn't initialized in qemu driver and with the
      recent change in CPU topology parsing, old value of nodeinfo->sockets
      could be used and incremented giving totally bogus results.
      
      Let's just wipe the structure completely.
      Signed-off-by: NJiri Denemark <jdenemar@redhat.com>
      22e39d0e
  4. 09 3月, 2010 2 次提交
    • L
      Fix format string warnings · 618dc80c
      Laine Stump 提交于
      A few more non-literal format strings in error log messages have crept
      in. Fix them in the standard way - turn the format string into "%s"
      with the original string as the arg.
      618dc80c
    • S
      Fix virDomainGetXMLDesc cache settings output · 1c36d068
      Soren Hansen 提交于
      If a special cache strategy for a disk has been specified in a domain
      definition, but no driverName has been set, virDomainGetXMLDesc would not
      include the <driver> tag at all.
      
      * src/conf/domain_conf.c: make sure any <driver> tag setting is
        serialized if set.
      1c36d068
  5. 08 3月, 2010 4 次提交
    • C
      Get thread and socket information in virsh nodeinfo. · aa2f6f96
      Chris Lalancette 提交于
      The current code for "nodeinfo" is pretty naive
      about socket and thread information.  To determine the
      sockets, it just takes the number of cpus and divides
      by the number of cores.  For the thread count, it always
      sets it to 1.  With more recent Intel machines, however,
      hyperthreading is again an option, meaning that these
      heuristics no longer work and give bogus numbers.  This
      patch goes through /sys to get the additional
      information so we properly report it.
      
      Note that I had to edit the tests not to report on
      socket and thread counts, since these are determined
      dynamically now.
      
      v2: As pointed out by Eric Blake, gnulib provides
          count-one-bits (which is LGPLv2+).  Use it instead
          of a hand-coded popcnt.
      Signed-off-by: NChris Lalancette <clalance@redhat.com>
      aa2f6f96
    • A
      Fix locking in qemudDomainMemoryStats · 5140a2f6
      Adam Litke 提交于
      When adding domainMemoryStats API support for the qemu driver, I didn't
      follow the locking rules exactly.  The job condition must be held when
      executing monitor commands.  This corrects the segfaults I was seeing
      when calling domainMemoryStats in a multi-threaded environment.
      
      * src/qemu/qemu_driver.c: in qemudDomainMemoryStats() add missing
        calls to qemuDomainObjBeginJob/qemuDomainObjEndJob
      5140a2f6
    • L
      Eliminate large stack buffer in doTunnelSendAll · ecb5cf7c
      Laine Stump 提交于
      doTunnelSendAll function (used by QEMU migration) uses a 64k buffer on
      the stack, which could be problematic. This patch replaces that with a
      buffer from the heap.
      
      While in the neighborhood, this patch also improves error reporting in
      the case that saferead fails - previously, virStreamAbort() was called
      (resetting errno) before reporting the error. It's been changed to
      report the error first.
      
      * src/qemu/qemu_driver.c: fix doTunnelSendAll() to use a malloc'ed
        buffer
      ecb5cf7c
    • E
      build: consistently use C99 varargs macros · 2e56fb2b
      Eric Blake 提交于
      Prior to this patch, there was an inconsistent mix between GNU and C99.
      
      For consistency, and potential portability to other compilers, stick
      with the C99 vararg macro syntax.
      
      * src/conf/cpu_conf.c (virCPUReportError): Use C99 rather than GNU
        vararg macro syntax.
      * src/conf/domain_conf.c (virDomainReportError): Likewise.
      * src/conf/domain_event.c (eventReportError): Likewise.
      * src/conf/interface_conf.c (virInterfaceReportError): Likewise.
      * src/conf/network_conf.c (virNetworkReportError): Likewise.
      * src/conf/node_device_conf.h (virNodeDeviceReportError): Likewise.
      * src/conf/secret_conf.h (virSecretReportError): Likewise.
      * src/conf/storage_conf.h (virStorageReportError): Likewise.
      * src/esx/esx_device_monitor.c (ESX_ERROR): Use C99 rather than
        GNU vararg macro syntax.
      * src/esx/esx_driver.c (ESX_ERROR): Likewise.
      * src/esx/esx_interface_driver.c (ESX_ERROR): Likewise.
      * src/esx/esx_network_driver.c (ESX_ERROR): Likewise.
      * src/esx/esx_secret_driver.c (ESX_ERROR): Likewise.
      * src/esx/esx_storage_driver.c (ESX_ERROR): Likewise.
      * src/esx/esx_util.c (ESX_ERROR): Likewise.
      * src/esx/esx_vi.c (ESX_VI_ERROR): Likewise.
      * src/esx/esx_vi_methods.c (ESX_VI_ERROR): Likewise.
      * src/esx/esx_vi_types.c (ESX_VI_ERROR): Likewise.
      * src/esx/esx_vmx.c (ESX_ERROR): Likewise.
      * src/util/hostusb.c (usbReportError): Use C99 rather than GNU
        vararg macro syntax.
      * src/util/json.c (virJSONError): Likewise.
      * src/util/macvtap.c (ReportError): Likewise.
      * src/util/pci.c (pciReportError): Likewise.
      * src/util/stats_linux.c (virStatsError): Likewise.
      * src/util/util.c (virUtilError): Likewise.
      * src/util/xml.c (virXMLError): Likewise.
      * src/xen/proxy_internal.c (virProxyError): Use C99 rather than
        GNU vararg macro syntax.
      * src/xen/sexpr.c (virSexprError): Likewise.
      * src/xen/xen_driver.c (xenUnifiedError): Likewise.
      * src/xen/xen_hypervisor.c (virXenError): Likewise.
      * src/xen/xen_inotify.c (virXenInotifyError): Likewise.
      * src/xen/xend_internal.c (virXendError): Likewise.
      * src/xen/xm_internal.c (xenXMError): Likewise.
      * src/xen/xs_internal.c (virXenStoreError): Likewise.
      * src/cpu/cpu.h (virCPUReportError): Use C99 rather than GNU
        vararg macro syntax.
      * src/datatypes.c (virLibConnError): Likewise.
      * src/interface/netcf_driver.c (interfaceReportError): Likewise.
      * src/libvirt.c (virLibStreamError): Likewise.
      * src/lxc/lxc_conf.h (lxcError): Likewise.
      * src/network/bridge_driver.c (networkReportError): Likewise.
      * src/nodeinfo.c (nodeReportError): Likewise.
      * src/opennebula/one_conf.h (oneError): Likewise.
      * src/openvz/openvz_conf.h (openvzError): Likewise.
      * src/phyp/phyp_driver.c (PHYP_ERROR): Likewise.
      * src/qemu/qemu_conf.h (qemuReportError): Likewise.
      * src/remote/remote_driver.c (errorf): Likewise.
      * src/security/security_driver.h (virSecurityReportError): Likewise.
      * src/test/test_driver.c (testError): Likewise.
      * src/uml/uml_conf.h (umlReportError): Likewise.
      * src/vbox/vbox_driver.c (vboxError): Likewise.
      * src/vbox/vbox_tmpl.c (vboxError): Likewise.
      2e56fb2b
  6. 06 3月, 2010 8 次提交
    • J
      ebtablesAddRemoveRule: avoid dead store · 4dbed7d9
      Jim Meyering 提交于
      * src/util/ebtables.c (ebtablesAddRemoveRule): Avoid dead store
      to local, "s".
      4dbed7d9
    • J
      virInterfaceDefParseBond: avoid dead stores · c101092a
      Jim Meyering 提交于
      * src/conf/interface_conf.c (virInterfaceDefParseBond): Avoid dead stores
      to local, "node".  Remove declaration, too.
      c101092a
    • J
      xenXMDomainConfigParse: avoid dead store · fbe65e5e
      Jim Meyering 提交于
      * src/xen/xm_internal.c (xenXMDomainConfigParse): Avoid dead store
      to local, "data".  Remove declaration, too.
      fbe65e5e
    • J
      qemudDomainAttachSCSIDisk: handle empty controller list · f5a6ce44
      Jim Meyering 提交于
      * src/qemu/qemu_driver.c (qemudDomainAttachSCSIDisk): Handle
      the (theoretical) case of an empty controller list, so that
      clang does not think the subsequent dereference of "cont"
      would dereference an undefined variable (due to preceding
      loop not iterating even once).
      f5a6ce44
    • J
      qemu restore: don't let corrupt input provoke unwarranted OOM · 1a4d5c95
      Jim Meyering 提交于
      * src/qemu/qemu_driver.c (qemudDomainRestore): A corrupt save file
      (in particular, a too-large header.xml_len value) would cause an
      unwarranted out-of-memory error.  Do not trust the just-read
      header.xml_len.  Instead, merely use that as a hint, and
      read/allocate up to that number of bytes from the file.
      Also verify that header.xml_len is positive; if it were negative,
      passing it to virFileReadLimFD could cause trouble.
      1a4d5c95
    • J
      virFileReadLimFD: diagnose maxlen <= 0, rather than passing it on... · 32884a7e
      Jim Meyering 提交于
      to saferead_lim, which interprets it as a size_t.
      * src/util/util.c (virFileReadLimFD): Do not malfunction when
      maxlen < -1.  Return -1,EINVAL in that case.  Handle maxlen==0
      in the same manner.
      32884a7e
    • J
      xen: don't let bogus packets trigger over-allocation and segfault · ba918ac1
      Jim Meyering 提交于
      * src/xen/proxy_internal.c (xenProxyDomainDumpXML): An invalid packet
      could include a too-large "ans.len" value, which would make us allocate
      too much memory and then copy data from beyond the end of "ans",
      possibly evoking a segfault.  Ensure that the value we use is no
      larger than the remaining portion of "ans".
      Also, change unnecessary memmove to memcpy (src and dest obviously
      do not overlap, so no need to use memmove).
      (xenProxyDomainGetOSType): Likewise.
      (xenProxyGetCapabilities): Likewise.
      ba918ac1
    • J
      qemuMonitorTextGetMemoryStats: decrease risk of false positive in parsing · 4697def6
      Jim Meyering 提交于
      The code erroneously searched the entire "reply" for a comma, when
      its intent was to search only that portion after "balloon: actual="
      * src/qemu/qemu_monitor_text.c (qemuMonitorTextGetMemoryStats):
      Search for "," only starting *after* the BALLOON_PREFIX string.
      Otherwise, we'd be more prone to false positives.
      4697def6
  7. 05 3月, 2010 8 次提交
    • D
      Fix USB passthrough based on product/vendor · 09ed0729
      Daniel P. Berrange 提交于
      Changeset
      
        commit 5073aa99
        Author: Cole Robinson <crobinso@redhat.com>
        Date:   Mon Jan 11 11:40:46 2010 -0500
      
      Added support for product/vendor based passthrough, but it only
      worked at the security driver layer. The main guest XML config
      was not updated with the resolved bus/device ID. When the QEMU
      argv refactoring removed use of product/vendor, this then broke
      launching guests.
      
      THe solution is to move the product/vendor resolution up a layer
      into the QEMU driver. So the first thing QEMU does is resolve
      the product/vendor to a bus/device and updates the XML config
      with this info. The rest of the code, including security drivers
      and QEMU argv generated can now rely on bus/device always being
      set.
      
      * src/util/hostusb.c, src/util/hostusb.h: Split vendor/product
        resolution code out of usbGetDevice and into usbFindDevice.
        Add accessors for bus/device ID
      * src/security/virt-aa-helper.c, src/security/security_selinux.c,
        src/qemu/qemu_security_dac.c: Remove vendor/product from the
        usbGetDevice() calls
      * src/qemu/qemu_driver.c: Use usbFindDevice to resolve vendor/product
        into a bus/device ID
      09ed0729
    • D
      Convert QEMU driver all hotunplug code from pci_del to device_del · 84a25570
      Daniel P. Berrange 提交于
      The pci_del command is not being ported to QMP. Convert all the
      QEMU hotplug code over to use device_del whenever it is available
      to avoid the pci_del problem
      
      * src/qemu/qemu_driver.c: Convert unplug code to device_del
      84a25570
    • D
      Support hot-unplug for USB devices in QEMU · 8c82479d
      Daniel P. Berrange 提交于
      Previously hot-unplug could not be supported for USB devices
      in QEMU, since usb_del required the guest visible address
      which libvirt never knows. With 'device_del' command we can
      now unplug based on device alias, so support that.
      
      * src/qemu/qemu_driver.c: Use device_del to remove USB devices
      8c82479d
    • D
      Tweak container initialization to make upstart/init happier · b70a1f45
      Daniel P. Berrange 提交于
      Upstart crashes & burns in a heap if $TERM environment variable
      is missing. Presumably the kernel always sets this when booting
      init on a real machine, so libvirt should set it for containers
      too.
      
      To make a typical inittab / mingetty setup happier, we need to
      symlink the primary console /dev/pts/0 to /dev/tty1.
      
      Improve logging in certain scenarios to make troubleshooting
      easier
      
      * src/lxc/lxc_container.c: Create /dev/tty1 and set $TERM
      b70a1f45
    • D
      Misc fixes for LXC cgroups setup · 57db02e8
      Daniel P. Berrange 提交于
      When using the 'ns' cgroup controller, the moment a process calls
      'unshare(CLONE_NEWNS)', it will be given a private cgroup tree
      under its current location. This really messages up the LXC
      controller process, because it ends up creating the containers'
      cgroup in the wrong place. The fix is fairly easy, just move
      the cgroup setup before the code which calls unshare(). The
      'ns' controller will still create extra undesired cgroups, but
      they at least won't break libvirt's setup now.
      
      The patch also adds a missing cgroups allow rule for /dev/tty
      device node
      57db02e8
    • D
      Avoid creating top level cgroups if just querying for existance · ede3bc11
      Daniel P. Berrange 提交于
      When getting the driver/domain cgroup it is possible to specify
      whether it should be auto created. If auto-creation was turned
      off, libvirt still mistakenly created its own top level cgroup
      
      * src/util/cgroup.c: Honour autocreate flag for top level cgroup
      ede3bc11
    • L
      Change default for storage uid/gid from getuid()/getgid() to -1/-1 · 219305df
      Laine Stump 提交于
      This allows the config to have a setting that means "leave it alone",
      eg when building a pool where the directory already exists the user
      may want the current uid/gid of the directory left intact. This
      actually gets us back to older behavior - before recent changes to the
      pool building code, we weren't as insistent about honoring the uid/gid
      settings in the XML, and virt-manager was taking advantage of this
      behavior.
      
      As a side benefit, removing calls to getuid/getgid from the XML
      parsing functions also seems like a good idea. And having a default
      that is different from a common/useful value (0 == root) is a good
      thing in general, as it removes ambiguity from decisions (at least one
      place in the code was checking for (perms.uid == 0) to see if a
      special uid was requested).
      
      Note that this will only affect newly created pools and volumes. Due
      to the way that the XML is parsed, then formatted for newly created
      volumes, all existing pools/volumes already have an explicit uid and
      gid set.
      
      src/conf/storage_conf.c: Remove calls to setuid/setgid for default values
                               of uid/gid, and set them to -1 instead
      
      src/storage/storage_backend.c:
      src/storage/storage_backend_fs.c:
              Make account for the new default values of perms.uid
              and perms.gid.
      219305df
    • D
      build: vbox: avoid build failure when linking with --no-add-needed · c7434706
      Diego Elio Pettenò 提交于
      With the recent changes to the linking defaults in Fedora 13 (namely
      enabling --no-add-needed behaviour by default), we have to pass the
      dlopen()-providing libraries directly at the link of the module; use the
      same AC_SEARCH_LIBS function as used before to look for it and add it to
      the Makefile.
      c7434706
  8. 04 3月, 2010 5 次提交
    • D
      Support VCPU hotplug in QEMU guests · e8d6c289
      Daniel P. Berrange 提交于
      QEMU has a monitor command 'set_cpu' which allows a specific
      CPU to be toggled between online& offline state. libvirt CPU
      hotplug does not work in terms of individual indexes CPUs.
      Thus to support this, we iteratively toggle the online state
      when the total number of vCPUs is adjusted via libvirt
      
      NB, currently untested since QEMU segvs when running this!
      
      * src/qemu/qemu_driver.c: Toggle online state for CPUs when
        doing hotplug
      * src/qemu/qemu_monitor.c, src/qemu/qemu_monitor.h,
        src/qemu/qemu_monitor_json.c, src/qemu/qemu_monitor_json.h,
        src/qemu/qemu_monitor_text.c, src/qemu/qemu_monitor_text.h: Add
        monitor API for toggling a CPU's online status via 'set_cpu
      e8d6c289
    • D
      Fix parser checking of storage pool device · ce5ced1d
      Daniel P. Berrange 提交于
      The storage backend implementations all presume that the XML parser
      is validating correctness of the source specification. The check for
      a source device was lost at some point. This allowed for a potential
      crash in the disk backend. Re-introduce the sanity check
      
      * src/conf/storage_conf.c: Re-add check for source device
      ce5ced1d
    • D
      Fix mis-leading error message in pool delete API · e609aae6
      Daniel P. Berrange 提交于
      When trying to delete a pool the error message claimed the volume
      could not be deleted.
      
      * src/storage/storage_driver.c: Error message referred to
        volumes instead of pools
      e609aae6
    • D
      Fix typo in QEMU migration command name · 1227d086
      Daniel P. Berrange 提交于
      The QMP code was running query-migration instead of query-migrate.
      This doesn't work so well
      
      * src/qemu/qemu_monitor_json.c: s/query-migration/query-migrate/
      1227d086
    • D
      Don't raise error message from cgroups if QEMU fails to start · b50d48b1
      Daniel P. Berrange 提交于
      The code to remove the cgroup after QEMU failed to startup could
      be obscuring a real error from earlier on. It is not neccessary
      to raise an error in this case, so tell cgroups to keep quiet
      
      * src/qemu/qemu_driver.c: Don't raise cgroups error in QEMU start
        cleanup code.
      b50d48b1