On 12/15/21 2:40 AM, Peter Maydell wrote:
From: Jean-Philippe Brucker <jean-phili...@linaro.org>

Add two test cases for VIOT, one on the q35 machine and the other on
virt. To test complex topologies the q35 test has two PCIe buses that
bypass the IOMMU (and are therefore not described by VIOT), and two
buses that are translated by virtio-iommu.

Reviewed-by: Eric Auger <eric.au...@redhat.com>
Reviewed-by: Igor Mammedov <imamm...@redhat.com>
Signed-off-by: Jean-Philippe Brucker <jean-phili...@linaro.org>
Message-id: 20211210170415.583179-7-jean-phili...@linaro.org
Signed-off-by: Peter Maydell <peter.mayd...@linaro.org>
---
  tests/qtest/bios-tables-test.c | 38 ++++++++++++++++++++++++++++++++++
  1 file changed, 38 insertions(+)

I should have been more careful while applying. The aarch64 host failure for this is not transient as I first assumed:

PASS 5 qtest-aarch64/bios-tables-test /aarch64/acpi/virt/oem-fields
qemu-system-aarch64: kvm_init_vcpu: kvm_arch_init_vcpu failed (0): Invalid 
argument
Broken pipe
ERROR qtest-aarch64/bios-tables-test - too few tests run (expected 6, got 5)
make: *** [Makefile.mtest:312: run-test-37] Error 1


r~


diff --git a/tests/qtest/bios-tables-test.c b/tests/qtest/bios-tables-test.c
index 258874167ef..58df53b15b5 100644
--- a/tests/qtest/bios-tables-test.c
+++ b/tests/qtest/bios-tables-test.c
@@ -1465,6 +1465,42 @@ static void test_acpi_virt_tcg(void)
      free_test_data(&data);
  }
+static void test_acpi_q35_viot(void)
+{
+    test_data data = {
+        .machine = MACHINE_Q35,
+        .variant = ".viot",
+    };
+
+    /*
+     * To keep things interesting, two buses bypass the IOMMU.
+     * VIOT should only describes the other two buses.
+     */
+    test_acpi_one("-machine default_bus_bypass_iommu=on "
+                  "-device virtio-iommu-pci "
+                  "-device pxb-pcie,bus_nr=0x10,id=pcie.100,bus=pcie.0 "
+                  "-device 
pxb-pcie,bus_nr=0x20,id=pcie.200,bus=pcie.0,bypass_iommu=on "
+                  "-device pxb-pcie,bus_nr=0x30,id=pcie.300,bus=pcie.0",
+                  &data);
+    free_test_data(&data);
+}
+
+static void test_acpi_virt_viot(void)
+{
+    test_data data = {
+        .machine = "virt",
+        .uefi_fl1 = "pc-bios/edk2-aarch64-code.fd",
+        .uefi_fl2 = "pc-bios/edk2-arm-vars.fd",
+        .cd = "tests/data/uefi-boot-images/bios-tables-test.aarch64.iso.qcow2",
+        .ram_start = 0x40000000ULL,
+        .scan_len = 128ULL * 1024 * 1024,
+    };
+
+    test_acpi_one("-cpu cortex-a57 "
+                  "-device virtio-iommu-pci", &data);
+    free_test_data(&data);
+}
+
  static void test_oem_fields(test_data *data)
  {
      int i;
@@ -1639,6 +1675,7 @@ int main(int argc, char *argv[])
              qtest_add_func("acpi/q35/kvm/xapic", test_acpi_q35_kvm_xapic);
              qtest_add_func("acpi/q35/kvm/dmar", test_acpi_q35_kvm_dmar);
          }
+        qtest_add_func("acpi/q35/viot", test_acpi_q35_viot);
      } else if (strcmp(arch, "aarch64") == 0) {
          if (has_tcg) {
              qtest_add_func("acpi/virt", test_acpi_virt_tcg);
@@ -1646,6 +1683,7 @@ int main(int argc, char *argv[])
              qtest_add_func("acpi/virt/memhp", test_acpi_virt_tcg_memhp);
              qtest_add_func("acpi/virt/pxb", test_acpi_virt_tcg_pxb);
              qtest_add_func("acpi/virt/oem-fields", test_acpi_oem_fields_virt);
+            qtest_add_func("acpi/virt/viot", test_acpi_virt_viot);
          }
      }
      ret = g_test_run();



Reply via email to