1. 27 1月, 2020 1 次提交
    • P
      qemu: capabilities: Replace aliased machine type by copy of the canonical machine · 3b8feb47
      Peter Krempa 提交于
      The previous approac of just purging the alias combined with the fact
      that we filled in fake machine types in the test data meant that if a
      test case used an alias machine type such as 'pc' or 'q35' it would not
      properly resolve to the actual data returned by qemu.
      
      This started to be a problem since the CPU driver now looks at the
      default CPU reported with the machine type.
      
      This patch replaces the original approach of just removing the alias by
      replacing it with a copy of the machine type data which the type would
      alias to. This means that we are using the real data while we don't
      modify the test output after every qemu upgrade.
      
      Additionally this change will allow us to drop adding the fake machine
      types later.
      
      The test fallout is from actually excercising the CPU driver with
      actual data.
      Signed-off-by: NPeter Krempa <pkrempa@redhat.com>
      Reviewed-by: NMichal Privoznik <mprivozn@redhat.com>
      3b8feb47
  2. 17 4月, 2019 1 次提交
  3. 05 3月, 2019 10 次提交
  4. 21 1月, 2018 1 次提交
    • L
      qemu: assign correct type of PCI address for vhost-scsi when using pcie-root · 18c24bc6
      Laine Stump 提交于
      Commit 10c73bf1 fixed a bug that I had introduced back in commit
      70249927 - if a vhost-scsi device had no manually assigned PCI
      address, one wouldn't be assigned automatically. There was a slight
      problem with the logic of the fix though - in the case of domains with
      pcie-root (e.g. those with a q35 machinetype),
      qemuDomainDeviceCalculatePCIConnectFlags() will attempt to determine
      if the host-side PCI device is Express or legacy by examining sysfs
      based on the host-side PCI address stored in
      hostdev->source.subsys.u.pci.addr, but that part of the union is only
      valid for PCI hostdevs, *not* for SCSI hostdevs. So we end up trying
      to read sysfs for some probably-non-existent device, which fails, and
      the function virPCIDeviceIsPCIExpress() returns failure (-1).
      
      By coincidence, the return value is being examined as a boolean, and
      since -1 is true, we still end up assigning the vhost-scsi device to
      an Express slot, but that is just by chance (and could fail in the
      case that the gibberish in the "hostside PCI address" was the address
      of a real device that happened to be legacy PCI).
      
      Since (according to Paolo Bonzini) vhost-scsi devices appear just like
      virtio-scsi devices in the guest, they should follow the same rules as
      virtio devices when deciding whether they should be placed in an
      Express or a legacy slot. That's accomplished in this patch by
      returning early with virtioFlags, rather than erroneously using
      hostdev->source.subsys.u.pci.addr. It also adds a test case for PCIe
      to assure it doesn't get broken in the future.
      18c24bc6
  5. 05 12月, 2017 1 次提交
  6. 17 3月, 2017 1 次提交
    • A
      tests: Test generic PCIe Root Ports · 96f54b86
      Andrea Bolognani 提交于
      We want pcie-root-ports to be used when available in QEMU,
      but at the same time we need to ensure that hosts running
      older QEMU releases keep working and that the user can
      override the default at any time.
      
      Add a comment for the original pcie-root-port test cases
      to make it clear how these new test cases are different.
      96f54b86
  7. 23 2月, 2017 1 次提交
    • A
      tests: Reduce usage of legacy PCI controllers on PCIe machines · d4393c42
      Andrea Bolognani 提交于
      Up until a while ago, libvirt would automatically add a legacy
      PCI controllers combo (dmi-to-pci-bridge + pci-bridge) to any
      PCIe machine type (x86_64/q35 and aarch64/virt).
      
      As a result, a number of input and output files in the test
      suite ended up containing the legacy PCI controllers, even
      though they are not needed or in any way relevant to the
      feature being tested.
      
      Get rid of most of the occurrences. Most of the time, this
      just means removing the controllers from the input file and
      regenerating the output files; in a few instances, some
      minor tweaking is performed on the input file, most notably
      removing the memory balloon: as memory balloon support was
      not the scope of the test being changed, there is no loss
      of test coverage from doing so.
      
      Several occurrences of the legacy PCI controllers remain in
      the test suite, both because removing their usage would have
      required even more tweaking, and because we still want to
      have coverage of this perfectly valid combination.
      d4393c42
  8. 11 1月, 2017 1 次提交
    • L
      conf: aggregate multiple pcie-root-ports onto a single slot · 147ebe6d
      Laine Stump 提交于
      Set the VIR_PCI_CONNECT_AGGREGATE_SLOT flag for pcie-root-ports so
      that they will be assigned to all the functions on a slot.
      
      Some qemu test case outputs had to be adjusted due to the
      pcie-root-ports now being put on multiple functions.
      147ebe6d
  9. 15 4月, 2016 1 次提交
    • L
      conf: allow use of slot 0 in a dmi-to-pci-bridge · 0d668434
      Laine Stump 提交于
      When support for dmi-to-pci-bridge was added, it was assumed that,
      just as with the pci-root bus, slot 0 was reserved. This is not the
      case - it can be used to connect a device just like any other slot, so
      remove the restriction and update the test cases that auto-assign an
      address on a dmi-to-pci-bridge.
      0d668434
  10. 01 3月, 2016 1 次提交
  11. 10 2月, 2016 1 次提交
    • C
      tests: qemuxml2xml: assign device addresses · c1c4d0d5
      Cole Robinson 提交于
      We use the PreFormat callback for this. Many test cases need to be extended
      to pass in proper qemuCaps flags so AssignAddresses doesn't throw errors.
      
      One test case (pcie-root-port-too-many) is dropped, since it was meant
      only for checking an error condition in qemuxml2argv, and one we add in
      AssignAddresses it errors here too.
      
      Long term I think AssignAddresses should be handled in qemu's PostParse
      callback, but that's not entirely straightforward. Handling it here
      means we can get the test suite churn over with.
      c1c4d0d5
  12. 09 2月, 2016 1 次提交
    • C
      tests: qemuxml2xml: Always use different output file · d093d623
      Cole Robinson 提交于
      Most qemuxml2xml tests expect that the input XML is unchanged after
      parsing. This is unlike 99% of new qemu configs in the wild, which after
      initial parsing end up with stable PCI device addresses. The xml2xml bit
      doesn't currently hit that code path though, so most XML testing indeed
      does not change.
      
      Future patches will add that PCI address bits, which means most test cases
      will have different output. So let's do away with the hardcoded same vs
      different test split, and always track a separate output file. Tests can
      still have same input and output, it just necessitates 2 separate XML files.
      d093d623
  13. 27 1月, 2016 1 次提交
    • P
      device: cleanup input device code · 36785c7e
      Pavel Hrdina 提交于
      The current code was a little bit odd.  At first we've removed all
      possible implicit input devices from domain definition to add them later
      back if there was any graphics device defined while parsing XML
      description.  That's not all, while formating domain definition to XML
      description we at first ignore any input devices with bus different to
      USB and VIRTIO and few lines later we add implicit input devices to XML.
      
      This seems to me as a lot of code for nothing.  This patch may look
      to be more complicated than original approach, but this is a preferred
      way to modify/add driver specific stuff only in those drivers and not
      deal with them in common parsing/formating functions.
      
      The update is to add those implicit input devices into config XML to
      follow the real HW configuration visible by guest OS.
      
      There was also inconsistence between our behavior and QEMU's in the way,
      that in QEMU there is no way how to disable those implicit input devices
      for x86 architecture and they are available always, even without graphics
      device.  This applies also to XEN hypervisor.  VZ driver already does its
      part by putting correct implicit devices into live XML.
      Signed-off-by: NPavel Hrdina <phrdina@redhat.com>
      36785c7e
  14. 10 8月, 2015 1 次提交
    • L
      conf: new pci controller model "pcie-root-port" · dce3b8be
      Laine Stump 提交于
      This controller can be connected (at domain startup time only - not
      hotpluggable) only to a port on the pcie root complex ("pcie-root" in
      libvirt config), hence the new connect type
      VIR_PCI_CONNECT_TYPE_PCIE_ROOT. It provides a hotpluggable port that
      will accept any PCI or PCIe device.
      
      New attributes must be added to the controller <target> subelement for
      this - chassis and port are guest-visible option values that will be
      set by libvirt with values derived from the controller's index and pci
      address information.
      dce3b8be
  15. 25 11月, 2014 2 次提交
  16. 27 8月, 2013 1 次提交
    • J
      Add pcihole64 element to root PCI controllers · 01cda918
      Ján Tomko 提交于
      <controller type='pci' index='0' model='pci-root'>
        <pcihole64 unit='KiB'>1048576</pcihole64>
      </controller>
      
      It can be used to adjust (or disable) the size of the 64-bit
      PCI hole. The size attribute is in kilobytes (different unit
      can be specified on input), but it gets rounded up to
      the nearest GB by QEMU.
      
      Disabling it will be needed for guests that crash with the
      64-bit PCI hole (like Windows XP), see:
      https://bugzilla.redhat.com/show_bug.cgi?id=990418
      01cda918
  17. 07 8月, 2013 1 次提交
    • L
      qemu: enable using implicit sata controller in q35 machines · 83718cfe
      Laine Stump 提交于
      q35 machines have an implicit ahci (sata) controller at 00:1F.2 which
      has no "id" associated with it. For this reason, we can't refer to it
      as "ahci0". Instead, we don't give an id on the commandline, which
      qemu interprets as "use the first ahci controller". We then need to
      specify the unit with "unit=%d" rather than adding it onto the bus
      arg.
      83718cfe
  18. 06 8月, 2013 3 次提交
    • L
      qemu: fix handling of default/implicit devices for q35 · c27b0bb1
      Laine Stump 提交于
      This patch adds in special handling for a few devices that need to be
      treated differently for q35 domains:
      
      usb - there is no implicit/default usb controller for the q35
      machinetype. This is done because normally the default usb controller
      is added to a domain by just adding "-usb" to the qemu commandline,
      and it's assumed that this will add a single piix3 usb1 controller at
      slot 1 function 2. That's not what happens when the machinetype is
      q35, though. Instead, adding -usb to the commandline adds 3 usb
      (version 2) controllers to the domain at slot 0x1D.{1,2,7}. Rather
      than having
      
        <controller type='usb' index='0'/>
      
      translate into 3 separate devices on the PCI bus, it's cleaner to not
      automatically add a default usb device; one can always be added
      explicitly if desired. Or we may decide that on q35 machines, 3 usb
      controllers will be automatically added when none is given. But for
      this initial commit, at least we aren't locking ourselves into
      something we later won't want.
      
      video - qemu always initializes the primary video device immediately
      after any integrated devices for the machinetype. Unless instructed
      otherwise (by using "-device vga..." instead of "-vga" which libvirt
      uses in many cases to work around deficiencies and bugs in various
      qemu versions) qemu will always pick the first unused slot. In the
      case of the "pc" machinetype and its derivatives, this is always slot
      2, but on q35 machinetypes, the first free slot is slot 1 (since the
      q35's integrated peripheral devices are placed in other slots,
      e.g. slot 0x1f). In order to make the PCI address of the video device
      predictable, that slot (1 or 2, depending on machinetype) is reserved
      even when no video device has been specified.
      
      sata - a q35 machine always has a sata controller implicitly added at
      slot 0x1F, function 2. There is no way to avoid this controller, so we
      always add it. Note that the xml2xml tests for the pcie-root and q35
      cases were changed to use DO_TEST_DIFFERENT() so that we can check for
      the sata controller being automatically added. This is especially
      important because we can't check for it in the xml2argv output (it has
      no effect on that output since it's an implicit device).
      
      ide - q35 has no ide controllers.
      
      isa and smbus controllers - these two are always present in a q35 (at
      slot 0x1F functions 0 and 3) but we have no way of modelling them in
      our config. We do need to reserve those functions so that the user
      doesn't attempt to put anything else there though. (note that the "pc"
      machine type also has an ISA controller, which we also ignore).
      c27b0bb1
    • L
      qemu: add dmi-to-pci-bridge controller · 62ac6b43
      Laine Stump 提交于
      This PCI controller, named "dmi-to-pci-bridge" in the libvirt config,
      and implemented with qemu's "i82801b11-bridge" device, connects to a
      PCI Express slot (e.g. one of the slots provided by the pcie-root
      controller, aka "pcie.0" on the qemu commandline), and provides 31
      *non-hot-pluggable* PCI (*not* PCIe) slots, numbered 1-31.
      
      Any time a machine is defined which has a pcie-root controller
      (i.e. any q35-based machinetype), libvirt will automatically add a
      dmi-to-pci-bridge controller if one doesn't exist, and also add a
      pci-bridge controller. The reasoning here is that any useful domain
      will have either an immediate (startup time) or eventual (subsequent
      hot-plug) need for a standard PCI slot; since the pcie-root controller
      only provides PCIe slots, we need to connect a dmi-to-pci-bridge
      controller to it in order to get a non-hot-plug PCI slot that we can
      then use to connect a pci-bridge - the slots provided by the
      pci-bridge will be both standard PCI and hot-pluggable.
      
      Since pci-bridge devices themselves can not be hot-plugged into a
      running system (although you can hot-plug other devices into a
      pci-bridge's slots), any new pci-bridge controller that is added can
      (and will) be plugged into the dmi-to-pci-bridge as long as it has
      empty slots available.
      
      This patch is also changing the qemuxml2xml-pcie test from a "DO_TEST"
      to a "DO_DIFFERENT_TEST". This is so that the "before" xml can omit
      the automatically added dmi-to-pci-bridge and pci-bridge devices, and
      the "after" xml can include it - this way we are testing if libvirt is
      properly adding these devices.
      62ac6b43
    • L
      qemu: add pcie-root controller · 48a3f48a
      Laine Stump 提交于
      This controller is implicit on q35 machinetypes. It provides 31 PCIe
      (*not* PCI) slots as controller 0.
      
      Currently there are no devices that can connect to pcie-root, and no
      implicit pci controller on a q35 machine, so q35 is still
      unusable. For a usable q35 system, we need to add a
      "dmi-to-pci-bridge" pci controller, which can connect to pcie-root,
      and provides standard pci slots that can be used to connect other
      devices.
      48a3f48a