diff mbox series

[v5,10/12] tests/acpi: add test cases for VIOT

Message ID 20211020172745.620101-11-jean-philippe@linaro.org
State New
Headers show
Series virtio-iommu: Add ACPI support | expand

Commit Message

Jean-Philippe Brucker Oct. 20, 2021, 5:27 p.m. UTC
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.auger@redhat.com>

Reviewed-by: Igor Mammedov <imammedo@redhat.com>

Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org>

---
 tests/qtest/bios-tables-test.c | 38 ++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

-- 
2.33.0

Comments

Eric Auger Oct. 21, 2021, 9:02 a.m. UTC | #1
Hi Jean,

On 10/20/21 7:27 PM, Jean-Philippe Brucker wrote:
> 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.auger@redhat.com>

> Reviewed-by: Igor Mammedov <imammedo@redhat.com>

> Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org>

> ---

>  tests/qtest/bios-tables-test.c | 38 ++++++++++++++++++++++++++++++++++

>  1 file changed, 38 insertions(+)

>

> diff --git a/tests/qtest/bios-tables-test.c b/tests/qtest/bios-tables-test.c

> index 4f11d03055..599b155201 100644

> --- a/tests/qtest/bios-tables-test.c

> +++ b/tests/qtest/bios-tables-test.c

> @@ -1403,6 +1403,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 "

Just a reminder that we still have a dependency on the
default_bus_bypass_iommu fix here. Otherwise those tests will fail. So
the fix needs to be upstreamed along with that series.

Eric
> +                  "-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;

> @@ -1567,12 +1603,14 @@ int main(int argc, char *argv[])

>          if (strcmp(arch, "x86_64") == 0) {

>              qtest_add_func("acpi/microvm/pcie", test_acpi_microvm_pcie_tcg);

>          }

> +        qtest_add_func("acpi/q35/viot", test_acpi_q35_viot);

>      } else if (strcmp(arch, "aarch64") == 0) {

>          qtest_add_func("acpi/virt", test_acpi_virt_tcg);

>          qtest_add_func("acpi/virt/numamem", test_acpi_virt_tcg_numamem);

>          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();

>      boot_sector_cleanup(disk);
Eric Auger Oct. 21, 2021, 9:02 a.m. UTC | #2
Hi Jean,

On 10/20/21 7:27 PM, Jean-Philippe Brucker wrote:
> 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.auger@redhat.com>

> Reviewed-by: Igor Mammedov <imammedo@redhat.com>

> Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org>


small conflict to be resolved since
 220ffd949b ("tests: bios-tables-test: use qtest_has_accel() API to
register TCG only tests")

Eric
> ---

>  tests/qtest/bios-tables-test.c | 38 ++++++++++++++++++++++++++++++++++

>  1 file changed, 38 insertions(+)

>

> diff --git a/tests/qtest/bios-tables-test.c b/tests/qtest/bios-tables-test.c

> index 4f11d03055..599b155201 100644

> --- a/tests/qtest/bios-tables-test.c

> +++ b/tests/qtest/bios-tables-test.c

> @@ -1403,6 +1403,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;

> @@ -1567,12 +1603,14 @@ int main(int argc, char *argv[])

>          if (strcmp(arch, "x86_64") == 0) {

>              qtest_add_func("acpi/microvm/pcie", test_acpi_microvm_pcie_tcg);

>          }

> +        qtest_add_func("acpi/q35/viot", test_acpi_q35_viot);

>      } else if (strcmp(arch, "aarch64") == 0) {

>          qtest_add_func("acpi/virt", test_acpi_virt_tcg);

>          qtest_add_func("acpi/virt/numamem", test_acpi_virt_tcg_numamem);

>          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();

>      boot_sector_cleanup(disk);
Jean-Philippe Brucker Oct. 26, 2021, 9:47 a.m. UTC | #3
On Thu, Oct 21, 2021 at 11:02:27AM +0200, Eric Auger wrote:
> Hi Jean,

> 

> On 10/20/21 7:27 PM, Jean-Philippe Brucker wrote:

> > 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.auger@redhat.com>

> > Reviewed-by: Igor Mammedov <imammedo@redhat.com>

> > Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org>

> > ---

> >  tests/qtest/bios-tables-test.c | 38 ++++++++++++++++++++++++++++++++++

> >  1 file changed, 38 insertions(+)

> >

> > diff --git a/tests/qtest/bios-tables-test.c b/tests/qtest/bios-tables-test.c

> > index 4f11d03055..599b155201 100644

> > --- a/tests/qtest/bios-tables-test.c

> > +++ b/tests/qtest/bios-tables-test.c

> > @@ -1403,6 +1403,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 "

> Just a reminder that we still have a dependency on the

> default_bus_bypass_iommu fix here. Otherwise those tests will fail. So

> the fix needs to be upstreamed along with that series.


Thanks for the reminder, the fix is now queued (for x86, which this patch
relies on) so should be good to go. I'm planning to fix the conflict you
reported and resend only the x86 parts, so they get be merged this cycle

Thanks,
Jean
diff mbox series

Patch

diff --git a/tests/qtest/bios-tables-test.c b/tests/qtest/bios-tables-test.c
index 4f11d03055..599b155201 100644
--- a/tests/qtest/bios-tables-test.c
+++ b/tests/qtest/bios-tables-test.c
@@ -1403,6 +1403,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;
@@ -1567,12 +1603,14 @@  int main(int argc, char *argv[])
         if (strcmp(arch, "x86_64") == 0) {
             qtest_add_func("acpi/microvm/pcie", test_acpi_microvm_pcie_tcg);
         }
+        qtest_add_func("acpi/q35/viot", test_acpi_q35_viot);
     } else if (strcmp(arch, "aarch64") == 0) {
         qtest_add_func("acpi/virt", test_acpi_virt_tcg);
         qtest_add_func("acpi/virt/numamem", test_acpi_virt_tcg_numamem);
         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();
     boot_sector_cleanup(disk);