1. 02 5月, 2013 1 次提交
    • M
      virutil: Move string related functions to virstring.c · 7c9a2d88
      Michal Privoznik 提交于
      The source code base needs to be adapted as well. Some files
      include virutil.h just for the string related functions (here,
      the include is substituted to match the new file), some include
      virutil.h without any need (here, the include is removed), and
      some require both.
      7c9a2d88
  2. 30 4月, 2013 2 次提交
    • L
      qemu: put usb cgroup setup in common function · 811143c0
      Laine Stump 提交于
      The USB-specific cgroup setup had been inserted inline in
      qemuDomainAttachHostUsbDevice and qemuSetupCgroup, but now there is a
      common cgroup setup function called for all hostdevs, so it makes sens
      to put the usb-specific setup there and just rely on that function
      being called.
      
      The one thing I'm uncertain of here (and a reason for not pushing
      until after release) is that previously hostdev->missing was checked
      only when starting a domain (and cgroup setup for the device skipped
      if missing was true), but with this consolidation, it is now checked
      in the case of hotplug as well. I don't know if this will have any
      practical effect (does it make sense to hotplug a "missing" usb
      device?)
      811143c0
    • L
      qemu: add vfio devices to cgroup ACL when appropriate · 6e13860c
      Laine Stump 提交于
      PCIO device assignment using VFIO requires read/write access by the
      qemu process to /dev/vfio/vfio, and /dev/vfio/nn, where "nn" is the
      VFIO group number that the assigned device belongs to (and can be
      found with the function virPCIDeviceGetVFIOGroupDev)
      
      /dev/vfio/vfio can be accessible to any guest without danger
      (according to vfio developers), so it is added to the static ACL.
      
      The group device must be dynamically added to the cgroup ACL for each
      vfio hostdev in two places:
      
      1) for any devices in the persistent config when the domain is started
         (done during qemuSetupCgroup())
      
      2) at device attach time for any hotplug devices (done in
         qemuDomainAttachHostDevice)
      
      The group device must be removed from the ACL when a device it
      "hot-unplugged" (in qemuDomainDetachHostDevice())
      
      Note that USB devices are already doing their own cgroup setup and
      teardown in the hostdev-usb specific function. I chose to make the new
      functions generic and call them in a common location though. We can
      then move the USB-specific code (which is duplicated in two locations)
      to this single location. I'll be posting a followup patch to do that.
      6e13860c
  3. 27 4月, 2013 2 次提交
    • L
      conf: remove extraneous _TYPE from driver backend enums · 19635f7d
      Laine Stump 提交于
      This isn't strictly speaking a bugfix, but I realized I'd gotten a bit
      too verbose when I chose the names for
      VIR_DOMAIN_HOSTDEV_PCI_BACKEND_TYPE_*. This shortens them all a bit.
      19635f7d
    • P
      qemu: launch bridge helper from libvirtd · 2d80fbb1
      Paolo Bonzini 提交于
      <source type='bridge'> uses a helper application to do the necessary
      TUN/TAP setup to use an existing network bridge, thus letting
      unprivileged users use TUN/TAP interfaces.
      
      However, libvirt should be preventing QEMU from running any setuid
      programs at all, which would include this helper program.  From
      a security POV, any setuid helper needs to be run by libvirtd itself,
      not QEMU.
      
      This is what this patch does.  libvirt now invokes the setuid helper,
      gets the TAP fd and then passes it to QEMU in the normal manner.
      The path to the helper is specified in qemu.conf.
      
      As a small advantage, this adds a <target dev='tap0'/> element to the
      XML of an active domain using <interface type='bridge'>.
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      2d80fbb1
  4. 26 4月, 2013 3 次提交
    • L
      qemu: set qemu process' RLIMIT_MEMLOCK when VFIO is used · 93958945
      Laine Stump 提交于
      VFIO requires all of the guest's memory and IO space to be lockable in
      RAM. The domain's max_balloon is the maximum amount of memory the
      domain can have (in KiB). We add a generous 1GiB to that for IO space
      (still much better than KVM device assignment, where the KVM module
      actually *ignores* the process limits and locks everything anyway),
      and convert from KiB to bytes.
      
      In the case of hotplug, we are changing the limit for the already
      existing qemu process (prlimit() is used under the hood), and for
      regular commandline additions of vfio devices, we schedule a call to
      setrlimit() that will happen after the qemu process is forked.
      93958945
    • L
      qemu: use vfio-pci on commandline when appropriate · 731b0f36
      Laine Stump 提交于
      The device option for vfio-pci is nearly identical to that for
      pci-assign - only the configfd parameter isn't supported (or needed).
      
      Checking for presence of the bootindex parameter is done separately
      from constructing the commandline, similar to how it is done for
      pci-assign.
      
      This patch contains tests to check for proper commandline
      construction. It also includes tests for parser-formatter-parser
      roundtrips (xml2xml), because those tests use the same data files, and
      would have failed had they been included before now.
      
      qemu: xml/args tests for VFIO hostdev and <interface type='hostdev'/>
      
      These should be squashed in with the patch that adds commandline
      handling of vfio (they would fail at any earlier time).
      731b0f36
    • L
      conf: put hostdev pci address in a struct · 9f80fc1b
      Laine Stump 提交于
      There will soon be other items related to pci hostdevs that need to be
      in the same part of the hostdevsubsys union as the pci address (which
      is currently a single member called "pci". This patch replaces the
      single member named pci with a struct named pci that contains a single
      member named "addr".
      9f80fc1b
  5. 19 4月, 2013 2 次提交
  6. 16 4月, 2013 1 次提交
  7. 27 3月, 2013 1 次提交
    • G
      qemu: Don't set address type too early during virtio disk hotplug · ea2e31fa
      Guido Günther 提交于
      f946462e changed behavior by settings
      VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI upfront. If we do so before invoking
      qemuDomainPCIAddressEnsureAddr we merely try to set the PCI slot via
      qemuDomainPCIAddressReserveSlot instead reserving a new address via
      qemuDomainPCIAddressSetNextAddr which fails with
      
      $ ~/run-tck-test domain/200-disk-hotplug.t
      ./scripts/domain/200-disk-hotplug.t .. # Creating a new transient domain
      ./scripts/domain/200-disk-hotplug.t .. 1/5 # Attaching the new disk /var/lib/jenkins/jobs/libvirt-tck-build/workspace/scratchdir/200-disk-hotplug/extra.img
      
       #   Failed test 'disk has been attached'
       #   at ./scripts/domain/200-disk-hotplug.t line 67.
       # died: Sys::Virt::Error (libvirt error code: 1, message: internal error unable to reserve PCI address 0:0:0.0
       # )
      ea2e31fa
  8. 21 3月, 2013 1 次提交
  9. 14 3月, 2013 1 次提交
  10. 21 2月, 2013 1 次提交
    • O
      qemu: Remove the shared disk entry if the operation is ejecting or updating · d0172d2b
      Osier Yang 提交于
      For both AttachDevice and UpdateDevice APIs, if the disk device
      is 'cdrom' or 'floppy', the operations could be ejecting, updating,
      and inserting. For either ejecting or updating, the shared disk
      entry of the original disk src has to be removed, because it's
      not useful anymore.
      
      And since the original disk def will be changed, new disk def passed
      as argument will be free'ed in qemuDomainChangeEjectableMedia, so
      we need to copy the orignal disk def before
      qemuDomainChangeEjectableMedia, to use it for qemuRemoveSharedDisk.
      d0172d2b
  11. 20 2月, 2013 1 次提交
    • J
      qemu: switch PCI address alocation to use virDevicePCIAddress · bc28e56b
      Ján Tomko 提交于
      Some functions were using virDomainDeviceInfo where virDevicePCIAddress
      would suffice. Some were only using integers for slots and functions,
      assuming the bus numbers are always 0.
      
      Switch from virDomainDeviceInfoPtr to virDevicePCIAddressPtr:
      qemuPCIAddressAsString
      qemuDomainPCIAddressCheckSlot
      qemuDomainPCIAddressReserveAddr
      qemuDomainPCIAddressReleaseAddr
      
      Switch from int slot to virDevicePCIAddressPtr:
      qemuDomainPCIAddressReserveSlot
      qemuDomainPCIAddressReleaseSlot
      qemuDomainPCIAddressGetNextSlot
      
      Deleted functions (they would take the same parameters
      as ReserveAddr/ReleaseAddr do now.)
      qemuDomainPCIAddressReserveFunction
      qemuDomainPCIAddressReleaseFunction
      bc28e56b
  12. 13 2月, 2013 1 次提交
    • D
      Remove qemuDriverLock from almost everywhere · a9e97e0c
      Daniel P. Berrange 提交于
      With the majority of fields in the virQEMUDriverPtr struct
      now immutable or self-locking, there is no need for practically
      any methods to be using the QEMU driver lock. Only a handful
      of helper APIs in qemu_conf.c now need it
      a9e97e0c
  13. 09 2月, 2013 1 次提交
  14. 08 2月, 2013 1 次提交
  15. 06 2月, 2013 5 次提交
  16. 05 2月, 2013 1 次提交
    • D
      Introduce a virQEMUDriverConfigPtr object · b090aa7d
      Daniel P. Berrange 提交于
      Currently the virQEMUDriverPtr struct contains an wide variety
      of data with varying access needs. Move all the static config
      data into a dedicated virQEMUDriverConfigPtr object. The only
      locking requirement is to hold the driver lock, while obtaining
      an instance of virQEMUDriverConfigPtr. Once a reference is held
      on the config object, it can be used completely lockless since
      it is immutable.
      
      NB, not all APIs correctly hold the driver lock while getting
      a reference to the config object in this patch. This is safe
      for now since the config is never updated on the fly. Later
      patches will address this fully.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      b090aa7d
  17. 27 1月, 2013 1 次提交
    • M
      qemu_hotplug: Rework media changing process · 84c59ffa
      Michal Privoznik 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=892289
      
      It seems like with new udev within guest OS, the tray is locked,
      so we need to:
      - 'eject'
      - wait for tray to open
      - 'change'
      
      Moreover, even when doing bare 'eject', we should check for
      'tray_open' as guest may have locked the tray. However, the
      waiting phase shouldn't be unbounded, so I've chosen 10 retries
      maximum, each per 500ms. This should give enough time for guest
      to eject a media and open the tray.
      84c59ffa
  18. 22 1月, 2013 1 次提交
    • J
      qemu: Add coverity[negative_returns] tag · 6c2e4c38
      John Ferlan 提交于
      This avoids "Event negative_returns: A negative constant "-1" is passed as
      an argument to a parameter that cannot be negative.".  The called function
      uses -1 to determine whether it needs to traverse all the hostdevs.
      6c2e4c38
  19. 21 12月, 2012 5 次提交
  20. 18 12月, 2012 1 次提交
  21. 14 12月, 2012 1 次提交
    • L
      qemu: don't fail update netdev on bridge detach failure · 9cf8734e
      Laine Stump 提交于
      When a network device's bridge connection is changed by
      virDomainUpdateDevice, libvirt first removes the netdev's tap from its
      old bridge, then adds it to the new bridge. Sometimes, due to a
      network being destroyed while a guest device is still attached, the
      tap may already be "removed" from the old bridge (or the old bridge
      may not even exist any more); the existing code was needlessly failing
      the update when this happened, making it impossible to recover from
      the situation without completely detaching (i.e. removing) the netdev
      from the guest and re-attaching.
      
      Instead of failing the entire operation when removal of the tap from
      the old bridge fails, this patch changes qemuDomainChangeNetBridge to
      just log a warning and continue, allowing a reasonable recover from
      the situation.
      
      (you'll appreciate this change if you ever accidentally destroy a
      network while your guests are still using it).
      9cf8734e
  22. 11 12月, 2012 1 次提交
    • L
      qemu: eliminate bogus error log when changing netdev's bridge · e5577872
      Laine Stump 提交于
      This fixes a problem that showed up during testing of:
      
        https://bugzilla.redhat.com/show_bug.cgi?id=881480
      
      Due to a logic error in the function that gets the name of the bridge
      an interface connects to, any time a bridge was specified directly
      (type='bridge') rather than indirectly (type='network'), An error
      would be logged (although the operation would then complete
      successfully):
      
         Network type 6 is not supported
      
      The final virReportError() in the function
      qemuDomainNetGetBridgeName() was apparently avoided in the past with a
      "goto cleanup" at the end of each case, but the case of bridge somehow
      no longer has that final goto cleanup.
      
      The proper solution is anyway to not rely on goto's, but put the error
      log inside an else {} clause, so that it's executed only if the type
      is neither bridge nor network (in reality, this function should only
      ever be called for those two types, that's why this is an internal
      error).
      
      While making this change, the error message was also tuned to be more
      correct (since it's not really the type of the network, but the type
      of the interface, and it *is* otherwise supported, it's just that the
      interface type in question doesn't *have* a bridge device associated
      with it, or at least we don't know how to get it).
      e5577872
  23. 04 12月, 2012 1 次提交
    • L
      qemu: support live update of an interface's filter · 258fb278
      Laine Stump 提交于
      Since we can't (currently) rely on the ability to provide blanket
      support for all possible network changes by calling the toplevel
      netdev hostside disconnect/connect functions (due to qemu only
      supporting a lockstep between initialization of host side and guest
      side of devices), in order to support live change of an interface's
      nwfilter we need to make a special purpose function to only call the
      nwfilter teardown and setup functions if the filter for an interface
      (or its parameters) changes. The pattern is nearly identical to that
      used to change the bridge that an interface is connected to.
      
      This patch was inspired by a request from Guido Winkelmann
      <guido@sagersystems.de>, who tested an earlier version.
      258fb278
  24. 30 11月, 2012 1 次提交
    • E
      storage: fix scsi detach regression with cgroup ACLs · ddd103d3
      Eric Blake 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=876828
      
      Commit 38c4a9cc introduced a regression in hot unplugging of disks
      from qemu, where cgroup device ACLs were no longer being revoked
      (thankfully not a security hole: cgroup ACLs only prevent open()
      of the disk; so reverting the ACL prevents future abuse but doesn't
      stop abuse from an fd that was already opened before the ACL change).
      
      Commit 1b2ebf95 overlooked that there were two spots affected.
      
      * src/qemu/qemu_hotplug.c (qemuDomainDetachDiskDevice):
      Transfer backing chain before deletion.
      * src/qemu/qemu_driver.c (qemuDomainDetachDeviceDiskLive): Fix
      spacing (partly to ensure a different-looking patch).
      ddd103d3
  25. 29 11月, 2012 1 次提交
  26. 27 11月, 2012 1 次提交
    • E
      storage: fix device detach regression with cgroup ACLs · 1b2ebf95
      Eric Blake 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=876828
      
      Commit 38c4a9cc introduced a regression in hot unplugging of disks
      from qemu, where cgroup device ACLs were no longer being revoked
      (thankfully not a security hole: cgroup ACLs only prevent open()
      of the disk; so reverting the ACL prevents future abuse but doesn't
      stop abuse from an fd that was already opened before the ACL change).
      
      The actual regression is due to a latent bug.  The hot unplug code
      was computing the set of files needing cgroup ACL revocation based
      on the XML passed in by the user, rather than based on the domain's
      details on which disk was being deleted.  As long as the revoke
      path was always recomputing the backing chain, this didn't really
      matter; but now that we want to compute the chain exactly once and
      remember that computation, we need to hang on to the backing chain
      until after the revoke has happened.
      
      * src/qemu/qemu_hotplug.c (qemuDomainDetachPciDiskDevice):
      Transfer backing chain before deletion.
      1b2ebf95
  27. 02 11月, 2012 1 次提交