1. 16 9月, 2014 6 次提交
    • J
      qemu: Allow pinning specific IOThreads to a CPU · 9bef96ec
      John Ferlan 提交于
      Modify qemuProcessStart() in order to allowing setting affinity to
      specific CPU's for IOThreads. The process followed is similar to
      that for the vCPU's.
      
      This involves adding a function to fetch the IOThread id's via
      qemuMonitorGetIOThreads() and adding them to iothreadpids[] list.
      Then making sure all the cgroup data has been properly set up and
      finally assigning affinity.
      9bef96ec
    • J
      qemu_cgroup: Introduce cgroup functions for IOThreads · 5f6ad32c
      John Ferlan 提交于
      In order to support cpuset setting, introduce qemuSetupCgroupIOThreadsPin
      and qemuSetupCgroupForIOThreads to mimic the existing Vcpu API's.
      
      These will support having an 'iotrhreadpin' element in the 'cpuset' in
      order to pin named IOThreads to specific CPU's. The IOThread pin names
      will follow the IOThread naming scheme starting at 1 (eg "iothread1")
      up through an including the def->iothreads value.
      5f6ad32c
    • J
      qemu_domain: Add niothreadpids and iothreadpids · 58690551
      John Ferlan 提交于
      Add new 'niothreadpids' and 'iothreadpids' to mimic the 'ncpupids' and
      'vcpupids' that already exist.
      58690551
    • J
      vircgroup: Introduce virCgroupNewIOThread · 3abb95ca
      John Ferlan 提交于
      Add virCgroupNewIOThread() to mimic virCgroupNewVcpu() except the naming
      scheme with use "iothread" rather than "vcpu".
      3abb95ca
    • J
      qemu: Issue query-iothreads and to get list of active IOThreads · 4cf6bfab
      John Ferlan 提交于
      Generate infrastructure and test to handle fetching the QMP
      IOThreads data.
      4cf6bfab
    • J
      virsh: Add iothread to 'attach-disk' · bc5a8090
      John Ferlan 提交于
      Add an iothread parameter to allow attaching to an IOThread, such as:
      
      virsh attach-disk $dom $source $target --live --config --iothread 2 \
           --targetbus virtio --driver qemu --subdriver raw  --type disk
      bc5a8090
  2. 15 9月, 2014 17 次提交
    • M
    • E
      network: check for invalid forward delay time · 3aa05241
      Erik Skultety 提交于
      When spanning tree protocol is allowed in bridge settings, forward delay
      value is set as well (default is 0 if omitted). Until now, there was no
      check for delay value validity. Delay makes sense only as a positive
      numerical value.
      
      Note: However, even if you provide positive  numerical value, brctl
      utility only uses values from range <2,30>, so the number provided can
      be modified (kernel most likely) to fall within this range.
      
      Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1125764
      3aa05241
    • J
      qemu: Fix build breaker on printf directive · c29cad67
      John Ferlan 提交于
      %zu for size_t not %lu
      c29cad67
    • J
      daemon: Resolve Coverity FORWARD_NULL · 1f967758
      John Ferlan 提交于
      Coverity complains that the comparison:
      
        if (nfds && nfds > ((int)!!sock_path + (int)!!sock_path_ro))
      
      could mean 'sock_path' is NULL. Later in virNetSocketNewListenUNIX
      there's a direct dereference of path in the error path:
      
        if (path[0] != '@')
      
      A bit of sleuthing proves that upon entry to daemonSetupNetworking
      there is no way for 'sock_path' to be NULL since daemonUnixSocketPaths
      will set up 'sock_file' (although it may not set up 'sock_file_ro')
      in all 3 paths.
      
      Adjusted code to add ATTRIBUTE_NONNULL(3) on incoming path parameter and
      then fixup the comparison of nfds to be a comparison against 2 or 1
      depending on whether sock_path_ro is NULL or not.
      1f967758
    • J
      qemu: Resolve Coverity BAD_SIZEOF · 3a0002b5
      John Ferlan 提交于
      Coverity complains about the calculation of the buf & len within
      the PROBE macro.  So to quiet things down, do the calculation prior
      to usage in either write() or qemuMonitorIOWriteWithFD() calls and
      then have the PROBE use the calculated values - which works.
      3a0002b5
    • J
      Resolve Coverity CHECKED_RETURN · 07334ccb
      John Ferlan 提交于
      Coverity complained that checking the return of virDomainCreate()
      was not consistent amongst the callers - so added the return check
      to the objecteventtest.c and adjust the virt-login-shell to compare
      < 0 rather than just non zero for the failure condition.
      07334ccb
    • J
      virsh: Resolve Coverity DEADCODE · 0268a35d
      John Ferlan 提交于
      Coverity complains that on the first pass through the for loop that
      'params' cannot be true, thus the ternary setting to "&" cannot be
      done. Since we can only ever get to this point once, drop the ternary
      0268a35d
    • J
      domain_conf: Resolve Coverity COPY_PASTE_ERROR · 96aa6052
      John Ferlan 提交于
      Seems when commit id 'ea130e3b' added the checks to ensure each of
      the hard_limit, soft_limit, and swap_hard_limit wasn't set at
      VIR_DOMAIN_MEMORY_PARAM_UNLIMITED - a copy/paste error of using
      the 'hard_limit' for each comparison was done. Adjust the code.
      96aa6052
    • J
      virtime: Resolve Coverity DEADCODE · f26e6397
      John Ferlan 提交于
      Coverity complains that because of how 'offset' is initialized to
      0 (zero), the resulting math and comparison on rem is pointless.
      
      According to the origin commit id '3ec12898', the code is a
      replacement for gmtime(), but without the localtime() or GMT
      calculations - so just remove this code and add a comment
      indicating the removal
      f26e6397
    • J
      remote_driver: Resolve Coverity RESOURCE_LEAK · 9545d062
      John Ferlan 提交于
      Since 98b9acf5
      
      This was a false positive where Coverity was complaining that the
      remoteDeserializeTypedParameters() could allocate 'params', but
      none of the callers could return the allocated memory back to their
      caller since on input the param was passed by value. Additionally,
      the flow of the code was that if params was NULL on entry, then each
      function would return 'nparams' as the number of params entries the
      caller would need to allocate in order to call the function again
      with 'nparams' and 'params' being set.  By the time the deserialize
      routine was called params would have something.  For other callers
      where the 'params' was passed by reference as NULL since it's expected
      that the deserialize allocates the memory and then have that passed
      back to the original caller to dispose there was no Coverity issue.
      
      As it turns out Coverity didn't quite seem to understand the
      relationship between 'nparams' and 'params'; however, if the
      !userAllocated path of the deserialize code compared against
      limit in any manner, then the Coverity error went away which
      was quite strange, but useful.
      
      As it turns out one code path remoteDomainGetJobStats had a
      comparison against 'limit' while another remoteConnectGetAllDomainStats
      did not assuming that limit would be checked.  So I refactored the
      code a bit to cause the limit check to occur in deserialize for
      both conditions and then only made the check of current returned
      size against the incoming *nparams fail the non allocation case.
      This means the job code doesn't need to check the limit any more,
      while the stats code now does check the limit.
      
      Additionally, to help perhaps decipher which of the various
      callers to the deserialize code caused the failure - I used
      a #define to pass the __FUNCNAME__ of the caller along so that
      error messages could have something like:
      
      error: remoteConnectGetAllDomainStats: too many parameters '2' for nparams '0'
      error: Reconnected to the hypervisor
      
      (it's a contrived error just to show the funcname in the error)
      9545d062
    • L
      node_device_udev: Try harder to get human readable vendor:product · 3ef77a54
      Lubomir Rintel 提交于
      The manufacurer and product from USB device itself are usually not particularly
      useful -- they tend to be missing, or ugly (all-uppercase, padded with spaces,
      etc.). Prefer what's in the usb id database and fall back to descriptors only
      if the device is too new to be in database.
      
      https://bugzilla.redhat.com/show_bug.cgi?id=1138887
      3ef77a54
    • H
      add migration support for OpenVZ driver · 7e649c54
      Hongbin Lu 提交于
      This patch adds initial migration support to the OpenVZ driver,
      using the VIR_DRV_FEATURE_MIGRATION_PARAMS family of migration
      functions.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      7e649c54
    • M
      d00c6fd2
    • M
      aaaa2d56
    • M
      8035f2e6
    • M
      rpc: reformat the flow to make a bit more sense · 3951d4a6
      Martin Kletzander 提交于
      Just remove useless "else".  Best viewed with '-w'.
      Signed-off-by: NMartin Kletzander <mkletzan@redhat.com>
      3951d4a6
    • L
      network: try to eliminate default network conflict during package install · 5f719596
      Laine Stump 提交于
      Sometimes libvirt is installed on a host that is already using the
      network 192.168.122.0/24. If the libvirt-daemon-config-network package
      is installed, this creates a conflict, since that package has been
      hard-coded to create a virtual network that also uses
      192.168.122.0/24. In the past libvirt has attempted to warn of /
      remediate this situation by checking for conflicting routes when the
      network is started, but it turns out that isn't always useful (for
      example in the case that the *other* interface/network creating the
      conflict hasn't yet been started at the time libvirtd start its own
      networks).
      
      This patch attempts to catch the problem earlier - at install
      time. During the %post install script for
      libvirt-daemon-config-network, we use a case statement to look through
      the output of "ip route show" for a route that exactly matches
      192.168.122.0/24, and if found we search for a similar route that
      *doesn't* match (e.g. 192.168.124.0/24) (note that the search starts
      with "124" instead of 123 because of reports of people already
      modifying their L1 host's network to 192.168.123.0/24 in an attempt to
      solve exactly the problem we are also trying to solve).  When we find
      an available route, we just replace all occurrences of "122" in the
      default.xml that is being created with the newly found 192.168
      subnet. This could obviously be made more complicated - examine the
      template defaul.xml to automatically determine the existing network
      address and mask rather than hard coding it in the specfile, etc, but
      this scripting is simpler and gets the job done as long as we continue
      to use 192.168.122.0/24 in the template. (If anyone with mad bash
      skillz wants to suggest something to do that, by all means please do).
      
      This is intended to at least "further reduce" occurrence of the
      problems detailed in:
      
        https://bugzilla.redhat.com/show_bug.cgi?id=811967
      5f719596
  3. 12 9月, 2014 17 次提交
    • E
      blockjob: allow finer bandwidth tuning for set speed · 0a6a6b1a
      Eric Blake 提交于
      We stupidly modeled block job bandwidth after migration
      bandwidth, which in turn was an 'unsigned long' and therefore
      subject to 32-bit vs. 64-bit interpretations.  To work around
      the fact that 10-gigabit interfaces are possible but don't fit
      within 32 bits, the original interface took the number scaled
      as MiB/sec.  But this scaling is rather coarse, and it might
      be nice to tune bandwidth finer than in megabyte chunks.
      
      Several of the block job calls that can set speed are fed
      through a common interface, so it was easier to adjust them all
      at once.  Note that there is intentionally no flag for the new
      virDomainBlockCopy; there, since the API already uses a 64-bit
      type always, instead of a possible 32-bit type, and is brand
      new, it was easier to just avoid scaling issues.  As with the
      previous patch that adjusted the query side (commit db33cc24),
      omitting the new flag preserves old behavior, and the
      documentation now mentions limits of what happens when a 32-bit
      machine is on either client or server side.
      
      * include/libvirt/libvirt.h.in (virDomainBlockJobSetSpeedFlags)
      (virDomainBlockPullFlags)
      (VIR_DOMAIN_BLOCK_REBASE_BANDWIDTH_BYTES)
      (VIR_DOMAIN_BLOCK_COMMIT_BANDWIDTH_BYTES): New enums.
      * src/libvirt.c (virDomainBlockJobSetSpeed, virDomainBlockPull)
      (virDomainBlockRebase, virDomainBlockCommit): Document them.
      * src/qemu/qemu_driver.c (qemuDomainBlockJobSetSpeed)
      (qemuDomainBlockPull, qemuDomainBlockRebase)
      (qemuDomainBlockCommit, qemuDomainBlockJobImpl): Support new flag.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      0a6a6b1a
    • E
      blockcopy: add qemu implementation of new tunables · eef91f94
      Eric Blake 提交于
      Upstream qemu 1.4 added some drive-mirror tunables not present
      when it was first introduced in 1.3.  Management apps may want
      to set these in some cases (for example, without tuning
      granularity down to sector size, a copy may end up occupying
      more bytes than the original because an entire cluster is
      copied even when only a sector within the cluster is dirty,
      although tuning it down results in more CPU time to do the
      copy).  I haven't personally needed to use the parameters, but
      since they exist, and since the new API supports virTypedParams,
      we might as well expose them.
      
      Since the tuning parameters aren't often used, and omitted from
      the QMP command when unspecified, I think it is safe to rely on
      qemu 1.3 to issue an error about them being unsupported, rather
      than trying to create a new capability bit in libvirt.
      
      Meanwhile, all versions of qemu from 1.4 to 2.1 have a bug where
      a bad granularity (such as non-power-of-2) gives a poor message:
      error: internal error: unable to execute QEMU command 'drive-mirror': Invalid parameter 'drive-virtio-disk0'
      
      because of abuse of QERR_INVALID_PARAMETER (which is supposed to
      name the parameter that was given a bad value, rather than the
      value passed to some other parameter).  I don't see that a
      capability check will help, so we'll just live with it (and it
      has since been improved in upstream qemu).
      
      * src/qemu/qemu_monitor.h (qemuMonitorDriveMirror): Add
      parameters.
      * src/qemu/qemu_monitor.c (qemuMonitorDriveMirror): Likewise.
      * src/qemu/qemu_monitor_json.h (qemuMonitorJSONDriveMirror):
      Likewise.
      * src/qemu/qemu_monitor_json.c (qemuMonitorJSONDriveMirror):
      Likewise.
      * src/qemu/qemu_driver.c (qemuDomainBlockCopyCommon): Likewise.
      (qemuDomainBlockRebase, qemuDomainBlockCopy): Adjust callers.
      * src/qemu/qemu_migration.c (qemuMigrationDriveMirror): Likewise.
      * tests/qemumonitorjsontest.c (qemuMonitorJSONDriveMirror): Likewise.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      eef91f94
    • E
      blockcopy: add qemu implementation of new API · e3f5f8ee
      Eric Blake 提交于
      The hard part of managing the disk copy is already coded; all
      this had to do was convert the XML and virTypedParameters into
      the internal representation.
      
      With this patch, all blockcopy operations that used the old
      API should also work via the new API.  Additional extensions,
      such as supporting the granularity tunable or a network rather
      than file destination, will be added as later patches.
      
      * src/qemu/qemu_driver.c (qemuDomainBlockCopy): New function.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      e3f5f8ee
    • E
      blockcopy: tweak how rebase calls into copy · e53ee6c1
      Eric Blake 提交于
      In order to implement the new virDomainBlockCopy, the existing
      block copy internal implementation needs to be adjusted.  The
      new function will parse XML into a storage source, and parse
      typed parameters into integers, then call into the same common
      backend.  For now, it's easier to keep the same implementation
      limits that only local file destinations are suported, but now
      the check needs to be explicit.  Similar to qemuDomainBlockJobImpl
      consuming 'vm', this code also consumes the caller's 'mirror'
      description of the destination.
      
      * src/qemu/qemu_driver.c (qemuDomainBlockCopy): Rename...
      (qemuDomainBlockCopyCommon): ...and adjust parameters.
      (qemuDomainBlockRebase): Adjust caller.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      e53ee6c1
    • M
      formatdomain: Update <loader/> example to match the rest · dcf7d042
      Michal Privoznik 提交于
      At the beginning when I was inventing <loader/> attributes and
      <nvram/> I've introduced this @readonly attribute to the loader
      element. It accepted values 'on' and 'off'. However, later, during the
      review process, that has changed to 'yes' and 'no', but the example
      XML snippet wasn't updated, so while the description is correct, the
      example isn't.
      Reported-by: NLaszlo Ersek <lersek@redhat.com>
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      dcf7d042
    • M
      virDomainUndefineFlags: Allow NVRAM unlinking · 273b6581
      Michal Privoznik 提交于
      When a domain is undefined, there are options to remove it's
      managed save state or snapshots. However, there's another file
      that libvirt creates per domain: the NVRAM variable store file.
      Make sure that the file is not left behind if the domain is
      undefined.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      273b6581
    • J
      libxl: Resolve Coverity CHECKED_RETURN · 245134fc
      John Ferlan 提交于
      Add a check of the return for virDomainHostdevInsert() like every
      other call.
      Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
      245134fc
    • J
      qemu: Resolve Coverity FORWARD_NULL · 78fbc79d
      John Ferlan 提交于
      If we end up at the cleanup lable before we've VIR_EXPAND_N the list,
      then calling virQEMUCapsFreeStringList() with a NULL proplist could
      theoretically deref proplist if nproplist was set. Coverity doesn't
      seem to acknowledge the relationship between proplist and nproplist
      assuming in virQEMUCapsFreeStringList that nproplist could be at
      least 1 and thus have a null deref.  It only seems to follow the
      NULL proplist.
      Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
      78fbc79d
    • J
      virfile: Resolve Coverity RESOURCE_LEAK · 8d44f924
      John Ferlan 提交于
      With the virGetGroupList() change in place - Coverity further complains
      that if we fail to virFork(), the groups will be leaked - which aha seems
      to be the case. Adjust the logic to save off the -errno, free the groups,
      and then return the value we saved
      Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
      8d44f924
    • J
      virutil: Resolve Coverity RESOURCE_LEAK · 52e90b22
      John Ferlan 提交于
      This ends up being a very bizarre false positive. With an assist from
      eblake, the claim is that mgetgroups() could return a -1 value, but yet
      still have a groups buffer allocated, yet the example shown doesn't
      seem to prove that.
      
      Rather than fret about it, by adding a well placed sa_assert() on the
      returned *list value we can "assure" ourselves that the mgetgroups()
      failure path won't signal this condition.
      Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
      52e90b22
    • J
      daemon: Resolve Coverity RESOURCE_LEAK · c77ac79d
      John Ferlan 提交于
      With eblake's help - adjust the checks for stdinfd/stdoutfd to ensure the
      values are within the range we expect; otherwise the dup2()'s and subsequent
      VIR_CLOSE() calls cause Coverity to believe there's a resource leak.
      Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
      c77ac79d
    • J
      virsh: Resolve Coverity NEGATIVE_RETURNS · be365d8d
      John Ferlan 提交于
      Coverity notes that after we VIR_ALLOC_N(params, nparams) a failed call to
      virDomainGetCPUStats could result in nparams being set to -1. In that case,
      the subsequent virTypedParamsFree in cleanup will pass -1 which isn't good.
      
      Use the returned value as the number of stats to display in the loop as
      it will be the value reported from the hypervisor and may be less than
      nparams which is OK
      Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
      be365d8d
    • J
      virsh: Move --completed from resume to domjobinfo · 58252332
      Jiri Denemark 提交于
      Because of similar contexts, git rebase I did just before pushing the
      series which added --completed option patched the wrong command.
      58252332
    • P
      conf: snapshot: Don't default-snapshot empty drives · 2f2a9922
      Peter Krempa 提交于
      If a (floppy) drive isn't selected for snapshot explicitly and is empty
      don't try to snapshot it. For external snapshots this would fail as we
      can't generate a name for the snapshot from an empty drive.
      Reported-by: NPavel Hrdina <phrdina@redhat.com>
      2f2a9922
    • P
      util: Add function to check if a virStorageSource is "empty" · 5e3e9919
      Peter Krempa 提交于
      To express empty drive we historically use storage source with empty
      path. Unfortunately NBD disks may be declared without a path.
      
      Add a helper to wrap this logic.
      5e3e9919
    • M
      libvirt.spec: Fix permission even for libvirt-driver-qemu · 3c07693a
      Michal Privoznik 提交于
      In my previous patch (37d8c75f) I've tried to fix permissions
      for nvram store path. The aim was to give the nvram directory
      execute permission so that domain running under other users
      than qemu:qemu can access their nvram file. However, my fix
      was incomplete as the path belongs to libvirt-driver-qemu
      package too and I've fixed it only for the libvirt-daemon
      package.
      Reported-by: NLaszlo Ersek <lersek@redhat.com>
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      3c07693a
    • J
      libxl: fix mapping of libvirt and libxl lifecycle actions · 817206cd
      Jim Fehlig 提交于
      The libxl driver was blindly assigning libvirt's
      virDomainLifecycleAction to libxl's libxl_action_on_shutdown, when
      in fact the various actions take on different values in these enums.
      
      Introduce helpers to properly map the enum values.
      Signed-off-by: NJim Fehlig <jfehlig@suse.com>
      817206cd