1. 23 1月, 2019 1 次提交
  2. 14 12月, 2018 1 次提交
    • D
      Remove all Author(s): lines from source file headers · 60046283
      Daniel P. Berrangé 提交于
      In many files there are header comments that contain an Author:
      statement, supposedly reflecting who originally wrote the code.
      In a large collaborative project like libvirt, any non-trivial
      file will have been modified by a large number of different
      contributors. IOW, the Author: comments are quickly out of date,
      omitting people who have made significant contribitions.
      
      In some places Author: lines have been added despite the person
      merely being responsible for creating the file by moving existing
      code out of another file. IOW, the Author: lines give an incorrect
      record of authorship.
      
      With this all in mind, the comments are useless as a means to identify
      who to talk to about code in a particular file. Contributors will always
      be better off using 'git log' and 'git blame' if they need to  find the
      author of a particular bit of code.
      
      This commit thus deletes all Author: comments from the source and adds
      a rule to prevent them reappearing.
      
      The Copyright headers are similarly misleading and inaccurate, however,
      we cannot delete these as they have legal meaning, despite being largely
      inaccurate. In addition only the copyright holder is permitted to change
      their respective copyright statement.
      Reviewed-by: NErik Skultety <eskultet@redhat.com>
      Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
      60046283
  3. 24 9月, 2018 1 次提交
  4. 20 9月, 2018 2 次提交
  5. 27 7月, 2018 3 次提交
  6. 15 5月, 2018 1 次提交
  7. 18 4月, 2018 1 次提交
    • M
      virobject: Introduce VIR_CLASS_NEW() macro · 10f94828
      Michal Privoznik 提交于
      So far we are repeating the following lines over and over:
      
        if (!(virSomeObjectClass = virClassNew(virClassForObject(),
                                   "virSomeObject",
                                   sizeof(virSomeObject),
                                   virSomeObjectDispose)))
            return -1;
      
      While this works, it is impossible to do some checking. Firstly,
      the class name (the 2nd argument) doesn't match the name in the
      code in all cases (the 3rd argument). Secondly, the current style
      is needlessly verbose. This commit turns example into following:
      
        if (!(VIR_CLASS_NEW(virSomeObject,
                            virClassForObject)))
            return -1;
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      Reviewed-by: NDaniel P. Berrangé <berrange@redhat.com>
      10f94828
  8. 14 8月, 2017 1 次提交
    • L
      util: fix improper assignment of return value in virHostdevReadNetConfig() · 83074cc9
      Laine Stump 提交于
      Commit 9a94af6d restructured virHostdevReadNetConfig() so that it
      would manually set ret = 0 after successfully reading the device's
      config, but Coverity pointed out that "ret = 0" was erroneously placed
      outside of an "else" clause, meaning that the the value of ret set in
      the "if" clause was unnecessarily and incorrectly overwritten.
      
      This patch moves ret = 0 into the else clause, which should silence
      Coverity.
      83074cc9
  9. 12 8月, 2017 3 次提交
    • L
      util: restructure virNetDevReadNetConfig() to eliminate false error logs · 9a081683
      Laine Stump 提交于
      virHostdevRestoreNetConfig() calls virNetDevReadNetConfig() to try and
      read the "original config" of a netdev, and if that fails, it tries
      again with a different directory/netdev name. This achieves the
      desired effect (we end up finding the config wherever it may be), but
      for each failure, virNetDevReadNetConfig() places a nice error message
      in the system logs. Experience has shown that false-positive error
      logs like this lead to erroneous bug reports, and can often mislead
      those searching for *real* bugs.
      
      This patch changes virNetDevReadNetConfig() to explicitly check if the
      file exists before calling virFileReadAll(); if it doesn't exist,
      virNetDevReadNetConfig() returns a success, but leaves all the
      variables holding the results as NULL. (This makes sense if you define
      the purpose of the function as "read a netdev's config from its config
      file *if that file exists*).
      
      To take advantage of that change, the caller,
      virHostdevRestoreNetConfig() is modified to fail immediately if
      virNetDevReadNetConfig() returns an error, and otherwise to try the
      different directory/netdev name if adminMAC & vlan & MAC are all NULL
      after the preceding attempt.
      9a081683
    • L
      util: save the correct VF's info when using a dual port SRIOV NIC in single port mode · b67eaa63
      Laine Stump 提交于
      Mellanox ConnectX-3 dual port SRIOV NICs present a bit of a challenge
      when assigning one of their VFs to a guest using VFIO device
      assignment.
      
      These NICs have only a single PCI PF device, and that single PF has
      two netdevs sharing the single PCI address - one for port 1 and one
      for port 2. When a VF is created it can also have 2 netdevs, or it can
      be setup in "single port" mode, where the VF has only a single netdev,
      and that netdev is connected either to port 1 or to port 2.
      
      When the VF is created in dual port mode, you get/set the MAC
      address/vlan tag for the port 1 VF by sending a netlink message to the
      PF's port1 netdev, and you get/set the MAC address/vlan tag for the
      port 2 VF by sending a netlink message to the PF's port 2 netdev. (Of
      course libvirt doesn't have any way to describe MAC/vlan info for 2
      ports in a single hostdev interface, so that's a bit of a moot point)
      
      When the VF is created in single port mode, you can *set* the MAC/vlan
      info by sending a netlink message to *either* PF netdev - the driver
      is smart enough to understand that there's only a single netdev, and
      set the MAC/vlan for that netdev. When you want to *get* it, however,
      the driver is more accurate - it will return 00:00:00:00:00:00 for the
      MAC if you request it from the port 1 PF netdev when the VF was
      configured to be single port on port 2, or if you request if from the
      port 2 PF netdev when the VF was configured to be single port on port
      1.
      
      Based on this information, when *getting* the MAC/vlan info (to save
      the original setting prior to assignment), we determine the correct PF
      netdev by matching phys_port_id between VF and PF.
      
      (IMPORTANT NOTE: this implies that to do PCI device assignment of the
      VFs on dual port Mellanox cards using <interface type='hostdev'>
      (i.e. if you want the MAC address/vlan tag to be set), not only must
      the VFs be configured in single port mode, but also the VFs *must* be
      bound to the host VF net driver, and libvirt must use managed='yes')
      
      By the time libvirt is ready to set the new MAC/vlan tag, the VF has
      already been unbound from the host net driver and bound to
      vfio-pci. This isn't problematic though because, as stated earlier,
      when a VF is created in single port mode, commands to configure it can
      be sent to either the port 1 PF netdev or the port 2 PF netdev.
      
      When it is time to restore the original MAC/vlan tag, again the VF
      will *not* be bound to a host net driver, so it won't be possible to
      learn from sysfs whether to use the port 1 or port 2 PF netdev for the
      netlink commands. And again, it doesn't matter which netdev you
      use. However, we must keep in mind that we saved the original settings
      to a file called "${PF}_${VFNUM}". To solve this problem, we just
      check for the existence of ${PF1}_${VFNUM} and ${PF2}_${VFNUM}, and
      use whichever one we find (since we know that only one can be there)
      b67eaa63
    • L
      util: make virPCIGetNetName() more versatile · b3b5aa75
      Laine Stump 提交于
      A single PCI device may have multiple netdevs associated with it. Each
      of those netdevs will have a different phys_port_id entry in
      sysfs. This patch modifies virPCIGetNetName() to allow selecting one
      of the potential many netdevs in two different ways:
      
      1) by setting the "idx" argument, the caller can select the 1st (0),
      2nd (1), etc. netdev from the PCI device's net subdirectory.
      
      2) If the physPortID arg is set (to a null-terminated string) then
      virPCIGetNetName() returns the netdev that has that phys_port_id in
      the sysfs file of the same name in the netdev's directory.
      b3b5aa75
  10. 04 5月, 2017 1 次提交
    • E
      mdev: Fix daemon crash on domain shutdown after reconnect · 92e30a4d
      Erik Skultety 提交于
      The problem resides in virHostdevUpdateActiveMediatedDevices which gets
      called during qemuProcessReconnect. The issue here is that
      virMediatedDeviceListAdd takes a pointer to the item to be added to the
      list to which VIR_APPEND_ELEMENT is used, which also clears the pointer.
      However, in this case only the local copy of the pointer got cleared,
      leaving the original pointing to valid memory. To sum it up, during
      cleanup phase, the original pointer is freed and the daemon crashes
      basically any time it would access it.
      
      Backtrace:
      0x00007ffff3ccdeba in __strcmp_sse2_unaligned
      0x00007ffff72a444a in virMediatedDeviceListFindIndex
      0x00007ffff7241446 in virHostdevReAttachMediatedDevices
      0x00007fffc60215d9 in qemuHostdevReAttachMediatedDevices
      0x00007fffc60216dc in qemuHostdevReAttachDomainDevices
      0x00007fffc6046e6f in qemuProcessStop
      0x00007fffc6091596 in processMonitorEOFEvent
      0x00007fffc6091793 in qemuProcessEventHandler
      0x00007ffff7294bf5 in virThreadPoolWorker
      0x00007ffff7294184 in virThreadHelper
      0x00007ffff3fdc3c4 in start_thread () from /lib64/libpthread.so.0
      0x00007ffff3d269cf in clone () from /lib64/libc.so.6
      
      Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1446455Signed-off-by: NErik Skultety <eskultet@redhat.com>
      Reviewed-by: NLaine Stump <laine@laine.org>
      92e30a4d
  11. 27 3月, 2017 6 次提交
    • L
    • L
      util: after hostdev assignment, restore VF MAC address via setting admin MAC · d6ef331f
      Laine Stump 提交于
      It takes longer to explain this than to fix it...
      
      In the past we weren't able to save the VF's own MAC address *at all*
      when using it for hostdev assignment, because we had already unbound
      the VF from the host net driver prior to saving its config. With the
      previous patch, that problem has been solved, so we now have the VF's
      MAC address saved and can move on to the *next* problem, which is twofold:
      
      1) during teardown we restore the config before we've re-bound, so the
         VF doesn't have a net driver, and thus we can't set its MAC address
         directly.
      
      2) even if we delay restoring the config until the VF is bound to a
         net driver, the request to set its MAC address would fail, since
         (during device setup) we had set the "admin MAC" for the VF via an
         RTM_SETLINK to the PF - once you've set the admin MAC for a VF, the
         VF driver (either on host or on guest) is not allowed to change the
         VF's MAC address "forever" (well, until you reload the PF driver,
         but that requires destroying and recreating every single VF, which
         isn't something you can require).
      
      The solution is to keep the restoration of config at the same place,
      but to set the *admin MAC* to the address you want the VF to have -
      when the VF net driver is later initialized (as a part of re-binding
      to the VF net driver) its MAC will be initialized to the current value
      of the admin MAC.
      d6ef331f
    • L
      util: save hostdev network device config before unbinding from host driver · cceada57
      Laine Stump 提交于
      In order to properly restore the original state of an SRIOV VF when
      we're finished with it, we need to save the MAC address of the VF
      itself (not just the admin MAC address for the VF that is stored in
      the PF). But that can only be done when the VF is still bound to the
      host's netdev driver, and we have always done the saving of device
      config after the VF is already bound to vfio-pci. This patch prepares
      us for adding a save of the VF's MAC by calling the function that
      saves netconfig earlier in the device preparation, before we've
      unbound it from the host netdev driver.
      cceada57
    • L
      util: replace virHostdevNetConfigReplace with ...(Save|Set)NetConfig() · b684734b
      Laine Stump 提交于
      These two operations will need to be separated so that saving of the
      original config is done before detaching the host net driver, and
      setting the new config is done after attaching vfio-pci. This patch
      splits the single function into two, but for now calls them together
      (to make bisecting easier if there is a regression).
      b684734b
    • L
      util: use new virNetDev*NetConfig() functions for hostdev setup/teardown · 9c004d55
      Laine Stump 提交于
      virHostdevNetConfigReplace() and virHostdevNetConfigRestore() are
      modified to use the new virNetDev*NetConfig() functions.
      
      Note that due to the VF's original MAC addresses being saved after it
      has already been un-bound from the host net driver, the actual current
      VF MAC address won't be saved (because it no longer exists) - only the
      "admin MAC" will be saved. This reflects existing behavior that will
      be fixed in an upcoming patch.
      9c004d55
    • E
      hostdev: Maintain a driver list of active mediated devices · a4a39d90
      Erik Skultety 提交于
      Keep track of the assigned mediated devices the same way we do it for
      the rest of hostdevs. Methods like 'Prepare', 'Update', and 'ReAttach'
      are introduced by this patch.
      Signed-off-by: NErik Skultety <eskultet@redhat.com>
      a4a39d90
  12. 24 3月, 2017 2 次提交
    • L
      util: change virPCIGetNetName() to not return error if device has no net name · d6ee56d7
      Laine Stump 提交于
      ...and cleanup the callers to report it when it *is* an error.
      
      In many cases It's useful for virPCIGetNetName() to not log an error
      and simply return a NULL pointer when the given device isn't bound to
      a net driver (e.g. we're looking at a VF that is permanently bound to
      vfio-pci). The existing code would silently return an error in this
      case, which could eventually lead to the dreaded "An error occurred
      but the cause is unknown" log message.
      
      This patch changes virPCIGetNetName() to still return success if the
      device simply isn't bound to a net driver, and adjusts all the callers
      that require a non-null netname to check for that condition and log an
      error when it happens.
      d6ee56d7
    • L
      util: use cleanup label consistently in virHostdevNetConfigReplace() · 19c5db74
      Laine Stump 提交于
      This will make an upcoming functional change more straightforward.
      19c5db74
  13. 23 3月, 2017 3 次提交
  14. 24 1月, 2017 1 次提交
  15. 25 11月, 2016 1 次提交
    • E
      util: Management routines for scsi_host devices · 629544be
      Eric Farman 提交于
      For a new hostdev type='scsi_host' we have a number of
      required functions for managing, adding, and removing the
      host device to/from guests.  Provide the basic infrastructure
      for these tasks.
      
      The name "SCSIVHost" (and its variants) is chosen to avoid
      conflicts with existing code named "SCSIHost" to refer to
      a hostdev type='scsi' protcol='none'.
      Signed-off-by: NEric Farman <farman@linux.vnet.ibm.com>
      629544be
  16. 24 11月, 2016 1 次提交
  17. 22 11月, 2016 2 次提交
  18. 02 9月, 2016 1 次提交
  19. 20 5月, 2016 1 次提交
  20. 11 5月, 2016 1 次提交
    • L
      util: set vlan tag for macvtap passthrough mode on SRIOV VFs · 75db9997
      Laine Stump 提交于
      SRIOV VFs used in macvtap passthrough mode can take advantage of the
      SRIOV card's transparent vlan tagging. All the code was there to set
      the vlan tag, and it has been used for SRIOV VFs used for hostdev
      interfaces for several years, but for some reason, the vlan tag for
      macvtap passthrough devices was stubbed out with a -1.
      
      This patch moves a bit of common validation down to a lower level
      (virNetDevReplaceNetConfig()) so it is shared by hostdev and macvtap
      modes, and updates the macvtap caller to actually send the vlan config
      instead of -1.
      75db9997
  21. 01 4月, 2016 1 次提交
    • A
      Revert "hostdev: Use actual device when reattaching" · fbd4db79
      Andrea Bolognani 提交于
      This reverts commit ee4cfb56.
      
      Since we're still not persisting our bookkeeping lists across
      daemon restarts, we might have lost some information
      virPCIDeviceReattach() relies on, for example whether the
      device needs to be unbound from the stub driver.
      
      As a result, if the daemon has been restarted in the meantime,
      the device might end up remaining bound to the stub driver even
      after 'virsh nodedev-reattach' or similar has been called, with
      no way of giving it back to the host short of messing with
      sysfs behind libvirt's back.
      
      Revert back to the previous behavior of always trying to bind
      the device to the host driver, regardless of its status when it
      was detached, until persistent bookkeeping lists have been
      implemented.
      fbd4db79
  22. 23 3月, 2016 5 次提交
    • A
      hostdev: Use actual device when reattaching · ee4cfb56
      Andrea Bolognani 提交于
      Instead of forcing the values for the unbind_from_stub, remove_slot
      and reprobe properties, look up the actual device and use that when
      calling virPCIDeviceReattach().
      
      This ensures the device is restored to its original state after
      reattach: for example, if it was not bound to any driver before
      detach, it will not be bound forcefully during reattach.
      ee4cfb56
    • A
      hostdev: Save netdev configuration of actual device · c3e2f6e3
      Andrea Bolognani 提交于
      We would be just fine looking up the information in pcidevs most
      of the time; however, some corner cases would not be handled
      properly, so look up the actual device instead.
      c3e2f6e3
    • A
      hostdev: Streamline device ownership tracking · 81128609
      Andrea Bolognani 提交于
      After this patch, ownership of virPCIDevice instances is very easy
      to keep track of: for each host PCI device, the only instance that
      actually matters is the one inside one of the bookkeeping list.
      
      Whenever some operation needs to be performed on a PCI device, the
      actual device is looked up first; when this is not the case, a
      comment explains the reason.
      81128609
    • A
      hostdev: Stop early if unmanaged devices have not been detached · 6da6bf2f
      Andrea Bolognani 提交于
      Unmanaged devices, as the name suggests, are not detached
      automatically from the host by libvirt before being attached to a
      guest: it's the user's responsability to detach them manually
      beforehand. If that preliminary step has not been performed, the
      attach operation can't complete successfully.
      
      Instead of relying on the lower layers to error out with cryptic
      messages such as
      
        error: Failed to attach device from /tmp/hostdev.xml
        error: Path '/dev/vfio/12' is not accessible: No such file or directory
      
      prevent the situation altogether and provide the user with a more
      useful error message.
      6da6bf2f
    • A
      hostdev: Detect untracked inactive devices · df490e7c
      Andrea Bolognani 提交于
      Unmanaged devices are attached to guests in two steps: first,
      the device is detached from the host and marked as inactive;
      subsequently, it is marked as active and attached to the guest.
      
      If the daemon is restarted between these two operations, we lose
      track of the inactive device.
      
      Steps 5 and 6 of virHostdevPreparePCIDevices() already subtly
      take care of this situation, but some planned changes will make
      it so that's no longer the case. Plus, explicit is always better
      than implicit.
      df490e7c