1. 23 4月, 2015 5 次提交
  2. 22 4月, 2015 14 次提交
    • M
      parallels: don't forget to unlock domain after successful virDomainObjListFindByUUID call · 0898d818
      Maxim Nestratov 提交于
      Also a typo is fixed (s/detached/attached/)
      
      Signed-off-by: Maxim Nestratov mnestratov@parallels.com
      0898d818
    • R
      vircommand: fix polling in virCommandProcessIO · e34cccf7
      Roman Bogorodskiy 提交于
      When running on FreeBSD, there's a bug in virCommandProcessIO
      polling that is triggered by the commandtest.
      
      A test that triggers EPIPE in commandtest (named "test20") hungs
      forever on FreeBSD.
      
      Apparently, this happens because FreeBSD sets POLLHUP flag on revents
      when stdin in closed. And as the current implementation only checks for
      POLLOUT and POLLERR, it ends up looping forever inside
      virCommandProcessIO and not trying to do one more write() that would
      trigger EPIPE.
      
      To fix that check for the POLLHUP flag along with POLLOUT and POLLERR.
      e34cccf7
    • P
      util: storage: Improve error message when requesting image above 'start' · dff92b3f
      Peter Krempa 提交于
      When a user would specify a backing chain index that is above the start
      point libvirt would report a rather unhelpful error:
      
      invalid argument: could not find backing store 1 in chain for 'sub/link2'
      
      This patch adds an explicit check that the index is below start point in
      the backing store and reports the following error if not:
      
      invalid argument: requested backing store index 1 is above 'sub/../qcow2' in chain for 'sub/link2'
      
      Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1177062
      dff92b3f
    • P
    • P
      util: storage: Fix possible crash when source path is NULL · 62a61d58
      Peter Krempa 提交于
      Some storage protocols allow to have the @path field in struct
      virStorageSource set to NULL. Add NULLSTR() wrappers to handle this
      possibility until I finish the storage source error formatter.
      62a61d58
    • P
      util: command: Deduplicate code in virCommandNewArgList · 64a9d2fa
      Peter Krempa 提交于
      virCommandNewArgList can use virCommandNewVAList.
      64a9d2fa
    • P
      qemu: migration: Refactor hostdev validation in migration check · bd579773
      Peter Krempa 提交于
      The hostdev check can error out right away.
      bd579773
    • R
      util: fix build on non-Linux · 584db105
      Roman Bogorodskiy 提交于
      Build fails on non-Linux systems with this error:
      
        CC       util/libvirt_util_la-virnetdev.lo
      util/virnetdev.c:364:1: error: unused function 'virNetDevReplaceMacAddress' [-Werror,-Wunused-function]
      virNetDevReplaceMacAddress(const char *linkdev,
      ^
      util/virnetdev.c:406:1: error: unused function 'virNetDevRestoreMacAddress' [-Werror,-Wunused-function]
      virNetDevRestoreMacAddress(const char *linkdev,
      ^
      2 errors generated.
      
      The virNetDev{Restore,Replace}MacAddress() functions are only used
      by VF-related routines that are available on Linux only. So move these
      functions under the same #ifdef.
      584db105
    • M
      processNicRxFilterChangedEvent: Take appropriate actions for NET_TYPE_NETWORK too · 74acc4ca
      Michal Privoznik 提交于
      Because packets going through the egress from a bridge (where our
      bandwidth limiting takes place) have no information about which
      interface they came from, the QoS rules that we create instead
      use the source MAC address of the packets to make their decisions
      about which QDisc the packet should be in.
      
      One flaw in this is that when a guest changed the MAC address it
      used, packets from the guest would no longer be put into the
      correct QDisc, but would instead be put in an "unprivileged"
      class, resulting in the bandwidth "floor" (minimum guaranteed)
      being no longer honored.
      
      Now that libvirt has infrastructure to capture and respond to
      RX_FILTER_CHANGE events from qemu (sent whenever a guest
      interface modifies its MAC address, among other things), we can
      notice when a guest MAC address changes, and update the QoS rules
      accordingly, so that bandwidth floor is honored even after a
      guest MAC address change.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      74acc4ca
    • M
      virDomainActualNetDefContentsFormat: Format class_id only for status XML · e128b4a4
      Michal Privoznik 提交于
      In one of my previous patches (b68a56bc) I made class_id to
      format more frequently. Well, now it's formatting way too
      frequent - even for regular active XML. Users don't need to see
      it, so lets format it only for the status XML where it's really
      needed.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      e128b4a4
    • L
      qemu: Fix issues with maxMemory in qemuDomainSetMemoryFlags() · d1743941
      Luyao Huang 提交于
      qemuDomainSetMemoryFlags() would allow to set the initial memory greater
      than the <maxMemory> field. While the configuration would not work as
      memory hotplug requires NUMA to be enabled and the
      qemuDomainSetMemoryFlags() API does not work on NUMA guests this just
      fixes a corner case.
      
      The fix is still worth though as it allows to induce an invalid
      configuration and make the VM vanish on libvirt restart.
      
      Additionally this tweaks error message to be more accurate.
      Signed-off-by: NLuyao Huang <lhuang@redhat.com>
      Signed-off-by: NPeter Krempa <pkrempa@redhat.com>
      d1743941
    • J
      libxl: Introduce configuration file for libxl driver · d0baac09
      Jim Fehlig 提交于
      Introduce libxl.conf configuration file, adding the 'autoballoon'
      setting as the first knob for controlling the libxl driver.
      Signed-off-by: NJim Fehlig <jfehlig@suse.com>
      d0baac09
    • L
      qemu: set macvtap physdevs online when macvtap is set online · 38172ed8
      Laine Stump 提交于
      A further fix for:
      
        https://bugzilla.redhat.com/show_bug.cgi?id=1113474
      
      Since there is no possibility that any type of macvtap will work if
      the parent physdev it's attached to is offline, we should bring the
      physdev online at the same time as the macvtap. When taking the
      macvtap offline, it's also necessary to take the physdev offline for
      macvtap passthrough mode (because the physdev has the same MAC address
      as the macvtap device, so could potentially cause problems with
      misdirected packets during migration, as outlined in commits 829770
      and 879c13). We can't set the physdev offline for other macvtap modes
      1) because there may be other macvtap devices attached to the same
      physdev (and/or the host itself may be using the device) in the other
      modes whereas passthrough mode is exclusive to one macvtap at a time,
      and 2) there's no practical reason to do so anyway.
      38172ed8
    • L
      util: set MAC address for VF via netlink message to PF+VF# when possible · cb3fe38c
      Laine Stump 提交于
      Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1113474
      
      When we set the MAC address of a network device as a part of setting
      up macvtap "passthrough" mode (where the domain has an emulated netdev
      connected to a host macvtap device that has exclusive use of the
      physical device, and sets the device MAC address to match its own,
      i.e. "<interface type='direct'> <source mode='passthrough' .../>"), we
      use ioctl(SIOCSIFHWADDR) giving it the name of that device. This is
      true even if it is an SRIOV Virtual Function (VF).
      
      But, when we are setting the MAC address / vlan ID of a VF in
      preparation for "hostdev network" passthrough (this is where we set
      the MAC address and vlan id of the VF after detaching the host net
      driver and before assigning the device to the domain with PCI
      passthrough, i.e. "<interface type='hostdev'>", we do the setting via
      a netlink RTM_SETLINK message for that VF's Physical Function (PF),
      telling it the VF# we want to change. This sets an "administratively
      changed MAC" flag for that VF in the PF's driver, and from that point
      on (until the PF driver is reloaded, *not* merely the VF driver) that
      VF's MAC address can't be changed using ioctl(SIOCSIFHWADDR) - the
      only way to change it is via the PF with RTM_SETLINK.
      
      This means that if a VF is used for hostdev passthrough, it will have
      the admin flag set, and future attempts to use that VF for macvtap
      passthrough will fail.
      
      The solution to this problem is to check if the device being used for
      macvtap passthrough is actually a VF; if so, we use the netlink
      RTM_SETLINK message to the PF to set the VF's mac address instead of
      ioctl(SIOCSIFHWADDR) directly to the VF; if not, behavior does not
      change from previously.
      
      There are three pieces to making this work:
      
      1) virNetDevMacVLan(Create|Delete)WithVPortProfile() now call
         virNetDev(Replace|Restore)NetConfig() rather than
         virNetDev(Replace|Restore)MacAddress() (simply passing -1 for VF#
         and vlanid).
      
      2) virNetDev(Replace|Restore)NetConfig() check to see if the device is
         a VF. If so, they find the PF's name and VF#, allowing them to call
         virNetDev(Replace|Restore)VfConfig().
      
      3) To prevent mixups when detaching a macvtap passthrough device that
         had been attached while running an older version of libvirt,
         virNetDevRestoreVfConfig() is potentially given the preserved name
         of the VF, and if the proper statefile for a VF can't be found in
         the stateDir (${stateDir}/${pfname}_vf${vfid}),
         virNetDevRestoreMacAddress() is called instead (which will look in
         the file named ${stateDir}/${vfname}).
      
      This problem has existed in every version of libvirt that has both
      macvtap passthrough and interface type='hostdev'. Fortunately people
      seem to use one or the other though, so it hasn't caused any real
      world problem reports.
      cb3fe38c
  3. 21 4月, 2015 21 次提交
    • C
      qemu: Always refresh capabilities if no <guests> found · 95546c43
      Cole Robinson 提交于
      - Remove all qemu emulators
      - Restart libvirtd
      - Install qemu emulators
      - Call 'virsh version' -> errors
      
      The only thing that will force the qemu driver to refresh it's cached
      capablities info is an explict API call to GetCapabilities.
      
      However in the case when the initial caps lookup at driver connect didn't
      find a single qemu emulator to poll, the driver is effectively useless
      and really can't do anything until it's populated some qemu capabilities
      info.
      
      With the above steps, the user would have to either know about the
      magic refresh capabilities call, or restart libvirtd to pick up the
      changes.
      
      Instead, this patch changes things so that every time a part of th
      driver requests access to capabilities info, check to see if
      we've previously seen any emulators. If not, force a refresh.
      
      In the case of 'still no emulators found', this is still very quick, so
      I can't think of a downside.
      
      https://bugzilla.redhat.com/show_bug.cgi?id=1000116
      95546c43
    • R
      vircapstest: fix build without LXC, QEMU or XEN · a7c1eb14
      Roman Bogorodskiy 提交于
      When building without lxc support enabled, build fails with:
      
      CLD     vircapstest
      vircapstest.o: In function `test_virCapsDomainDataLookupLXC':
      vircapstest.c:(.text+0x9ef): undefined reference to `testLXCCapsInit'
      
      Fix that by hiding LXC tests under appropriate #ifdef. Same applies
      for QEMU and XEN.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      a7c1eb14
    • J
      scsi: Adjust return values from processLU · 98322052
      John Ferlan 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=1171933
      
      Adjust the processLU error returns to be a bit more logical. Currently,
      the calling code cannot determine the difference between a non disk/lun
      volume and a processed/found disk/lun. It can also not differentiate
      between perhaps real/fatal error and one that won't necessarily stop
      the code from finding other volumes.
      
      After this patch virStorageBackendSCSIFindLUsInternal will stop processing
      as soon as a "fatal" message occurs rather than continuting processing
      for no apparent reason. It will also only set the *found value when
      at least one of the processLU's was successful.
      
      With the failed return, if the reason for the stop was that the pool
      target path did not exist, was /dev, was /dev/, or did not start with
      /dev, then iSCSI pool startup and refresh will fail.
      98322052
    • J
      scsi: Change return values for virStorageBackendSCSIFindLUs · 1e13eff4
      John Ferlan 提交于
      Rather than passing/returning a pointer to a boolean to indicate that
      perhaps we should try again - adjust the return of the call to return
      the count of LU's found during processing, then let the caller decide
      what to do with that value.
      1e13eff4
    • J
      scsi: Adjust return value for virStorageBackendSCSINewLun · adb182fa
      John Ferlan 提交于
      Use virStorageBackendPoolUseDevPath API to determine whether creation of
      stable target path is possible for the volume.
      
      This will differentiate a failed virStorageBackendStablePath which won't
      need to be fatal. Thus, we'll add a -2 return value to differentiate that
      the failure was a result of either the inability to find the symlink for
      the device or failure to open the target path directory
      adb182fa
    • J
      storage: Fix check for stable path check · 9e5e1ca1
      John Ferlan 提交于
      Fix the if (!STRPREFIX(path, "/dev")) to be if (!STRPREFIX(path, "/dev/"))
      to ensure a path such as "/device" isn't declared stable.
      9e5e1ca1
    • J
      storage: Split out the stable path check · 9126161d
      John Ferlan 提交于
      For virStorageBackendStablePath, in order to make decisions in other code
      split out the checks regarding whether the pool's target is empty, using /dev,
      using /dev/, or doesn't start with /dev
      9126161d
    • R
      xend: Remove a couple of unused function prototypes. · 093eea95
      Richard W.M. Jones 提交于
      Commit 70f44663 (from 2008) introduced
      some functions for testing whether xend was returning correct sound
      models.  Those functions have long gone, but the function prototypes
      remain.  This commit removes the unused prototypes.
      Signed-off-by: NRichard W.M. Jones <rjones@redhat.com>
      093eea95
    • M
      domtop: Properly free cpu status · 498d7b2b
      Michal Privoznik 提交于
      So, in the example the cpu stats are collected within a function
      called do_top. At the beginning of the function we ask the daemon for
      how much vCPUs can we get stats, and how many stats for a vCPU can we
      get. This is because it's how our API works - users are required to
      preallocate a chunk of memory for the results. Now, at the end, we try
      to free the allocated array, but we are not doing it correctly.
      There's this virTypedParamsFree() function which gets a pointer to the
      array and the length of the array. However, if there was an error in
      getting vCPU stats we pass a negative number instead of the originally
      computed value. This flaw results in SIGSEGV:
      
      libvirt: QEMU Driver error : Requested operation is not valid: domain is not running
      ERROR do_top:333 : Unable to get cpu stats
      ==29201== Invalid read of size 4
      ==29201==    at 0x4F1DF8B: virTypedParamsClear (virtypedparam.c:1145)
      ==29201==    by 0x4F1DFEB: virTypedParamsFree (virtypedparam.c:1165)
      ==29201==    by 0x4023C3: do_top (domtop.c:349)
      ==29201==    by 0x40260B: main (domtop.c:386)
      ==29201==  Address 0x131cd7c0 is 16 bytes after a block of size 768 alloc'd
      ==29201==    at 0x4C2C070: calloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
      ==29201==    by 0x401FF1: do_top (domtop.c:295)
      ==29201==    by 0x40260B: main (domtop.c:386)
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      498d7b2b
    • C
      domain: conf: Drop expectedVirtTypes · 835cf84b
      Cole Robinson 提交于
      This needs to specified in way too many places for a simple validation
      check. The ostype/arch/virttype validation checks later in
      DomainDefParseXML should catch most of the cases that this was covering.
      835cf84b
    • C
      caps: Use DomainDataLookup to replace GuestDefault* · 747761a7
      Cole Robinson 提交于
      This revealed that GuestDefaultEmulator was a bit buggy, capable
      of returning an emulator that didn't match the passed domain type. Fix
      up the test suite input to continue to pass.
      747761a7
    • C
      domain: conf: Use CapabilitiesDomainDataLookup for caps validation · 3f9868a5
      Cole Robinson 提交于
      The strange logic here is just to duplicate the previous behavior,
      which parts of the test suite are currently relying on.
      3f9868a5
    • C
      domain: conf: Do ostype/arch/machine parsing earlier · 4c96e682
      Cole Robinson 提交于
      Just move this code to where we parse virtType. Lots of things depend
      on os.type values so it should be handled early like virtType.
      4c96e682
    • C
      caps: Add virCapabilitiesDomainDataLookup · a6936523
      Cole Robinson 提交于
      This is a helper function to look up all capabilities data for all
      the OS bits that are relevant to <domain>. This is
      
      - os type
      - arch
      - domain type
      - emulator
      - machine type
      
      This will be used to replace several functions in later commits.
      a6936523
    • C
      caps: Convert to use VIR_DOMAIN_VIRT internally · 4fa6f9b4
      Cole Robinson 提交于
      4fa6f9b4
    • C
      domain: Convert os.type to VIR_DOMAIN_OSTYPE enum · 5f7c5994
      Cole Robinson 提交于
      5f7c5994
    • C
      caps: Switch AddGuest to take VIR_DOMAIN_OSTYPE value · d0440e32
      Cole Robinson 提交于
      Rather than an opencoded string. This should be a no-op
      d0440e32
    • C
      caps: Use an enum internally for ostype value · 4231485c
      Cole Robinson 提交于
      But the internal API stays the same, and we just convert the value as
      needed. Not useful yet, but this is the beginning step of using an enum
      for ostype throughout the code.
      4231485c
    • C
      domain: conf: Don't validate VM ostype/arch at daemon startup · f1a89a8b
      Cole Robinson 提交于
      When parsing XML, we validate the passed ostype + arch combo against
      the detected hypervisor capabilities. This has led to the following
      problem:
      
      - Define x86 qemu guest
      - qemu is inadvertently removed from the host
      - libvirtd is restarted. fails to parse VM config since arch is removed
      - 'virsh list --all' is now empty, user is wondering where their VMs went
      
      Add a new internal flag VIR_DOMAIN_DEF_PARSE_SKIP_OSTYPE_CHECKS. Use
      it when loading VM and snapshot configs from disk.
      
      https://bugzilla.redhat.com/show_bug.cgi?id=1043572
      f1a89a8b
    • C
      domain: conf: Better errors on bad os <type> values · 3700c065
      Cole Robinson 提交于
      If no <os><type> was specified:
        before: unknown OS type no OS type
        after : xml error: an os <type> must be specified
      
      If an <os><type> is specified that's not in our capabiliities data:
        before: unknown OS type: $type
        after : unsupported configuration: no support found for os <type> '$type'
      
      VIR_ERR_OS_TYPE is now unused (as it should be frankly) so drop its strings
      as well to save our translators some effort.
      3700c065
    • N
      parallels: make device addressing consistent · 6b7b677a
      Nikolay Shirokovskiy 提交于
      In Parallels we do not support device name hints
      aka <target dev=../> option and full-fledged device
      disk device addressing through
      <address type=.. controller=.. bus=.. target=.. unit=../>
      and have only one index instead.
      In this situation to be consistent we can only take
      one-to-one mapping from some reasonable subset
      of full address. Values outside this subset are
      invalid to create Parallels VMs.
      
      Reasonable mapping is default one defined in virDomainDiskDefAssignAddress.
      Signed-off-by: NNikolay Shirokovskiy <nshirokovskiy@parallels.com>
      6b7b677a