|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 5/6] automation: PCI passthrough tests on ADL hw
On Wed, 26 Apr 2023, Marek Marczykowski-Górecki wrote:
> Add simple PCI passthrough test to both PV and HVM domU. It passes
> through a network adapter (the only one in the system), gets an IP via
> DHCP (first basic test) and then ping the gateway (second basic test).
> Finally, if device is supposed to use MSI or MSI-X (as set in the
> PCIDEV_INTR test variable), check if it's in use via /proc/interrupts.
>
> On the current runner, the device in question is this:
> 03:00.0 Ethernet controller [0200]: Intel Corporation Ethernet Controller
> I225-V [8086:15f3] (rev 03)
> Subsystem: Micro-Star International Co., Ltd. [MSI] Device [1462:7d25]
> Flags: bus master, fast devsel, latency 0, IRQ 18
> Memory at 50400000 (32-bit, non-prefetchable) [size=1M]
> Memory at 50500000 (32-bit, non-prefetchable) [size=16K]
> Capabilities: [40] Power Management version 3
> Capabilities: [50] MSI: Enable- Count=1/1 Maskable+ 64bit+
> Capabilities: [70] MSI-X: Enable+ Count=5 Masked-
> Capabilities: [a0] Express Endpoint, MSI 00
> Capabilities: [100] Advanced Error Reporting
> Capabilities: [140] Device Serial Number ...
> Capabilities: [1c0] Latency Tolerance Reporting
> Capabilities: [1f0] Precision Time Measurement
> Capabilities: [1e0] L1 PM Substates
> Kernel driver in use: igc
> Kernel modules: igc
>
> With the current Xen version, it uses MSI-X under PV and MSI under HVM.
>
> This patch moves domU config to a variable, to make it configurable on
> per-test basis. Add also a few comments for visual separation of tests.
>
> Signed-off-by: Marek Marczykowski-Górecki <marmarek@xxxxxxxxxxxxxxxxxxxxxx>
Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>
> ---
> changes in v2:
> - drop leftover debug shell
> - fix regex -msi to not match -msi-x
> - fix waiting for domU startup
> ---
> automation/gitlab-ci/test.yaml | 20 +++++++-
> automation/scripts/qubes-x86-64.sh | 85 ++++++++++++++++++++++++++-----
> 2 files changed, 93 insertions(+), 12 deletions(-)
>
> diff --git a/automation/gitlab-ci/test.yaml b/automation/gitlab-ci/test.yaml
> index d68c584269dd..1ce083e6cd88 100644
> --- a/automation/gitlab-ci/test.yaml
> +++ b/automation/gitlab-ci/test.yaml
> @@ -94,6 +94,8 @@
> # the test controller runs on RPi4
> CONTAINER: alpine:3.12-arm64v8
> LOGFILE: smoke-test.log
> + PCIDEV: "03:00.0"
> + PCIDEV_INTR: "MSI-X"
> artifacts:
> paths:
> - smoke.serial
> @@ -147,6 +149,24 @@ adl-suspend-x86-64-gcc-debug:
> - *x86-64-test-needs
> - alpine-3.12-gcc-debug
>
> +adl-pci-pv-x86-64-gcc-debug:
> + extends: .adl-x86-64
> + script:
> + - ./automation/scripts/qubes-x86-64.sh pci-pv 2>&1 | tee ${LOGFILE}
> + needs:
> + - *x86-64-test-needs
> + - alpine-3.12-gcc-debug
> +
> +adl-pci-hvm-x86-64-gcc-debug:
> + extends: .adl-x86-64
> + variables:
> + PCIDEV_INTR: "MSI"
> + script:
> + - ./automation/scripts/qubes-x86-64.sh pci-hvm 2>&1 | tee ${LOGFILE}
> + needs:
> + - *x86-64-test-needs
> + - alpine-3.12-gcc-debug
> +
> qemu-smoke-dom0-arm64-gcc:
> extends: .qemu-arm64
> script:
> diff --git a/automation/scripts/qubes-x86-64.sh
> b/automation/scripts/qubes-x86-64.sh
> index 6c0309704661..a01c571860ee 100755
> --- a/automation/scripts/qubes-x86-64.sh
> +++ b/automation/scripts/qubes-x86-64.sh
> @@ -4,8 +4,21 @@ set -ex
>
> test_variant=$1
>
> +### defaults
> wait_and_wakeup=
> timeout=120
> +domU_config='
> +type = "pvh"
> +name = "domU"
> +kernel = "/boot/vmlinuz"
> +ramdisk = "/boot/initrd-domU"
> +extra = "root=/dev/ram0 console=hvc0"
> +memory = 512
> +vif = [ "bridge=xenbr0", ]
> +disk = [ ]
> +'
> +
> +### test: smoke test
> if [ -z "${test_variant}" ]; then
> passed="ping test passed"
> domU_check="
> @@ -23,6 +36,8 @@ done
> tail -n 100 /var/log/xen/console/guest-domU.log
> echo \"${passed}\"
> "
> +
> +### test: S3
> elif [ "${test_variant}" = "s3" ]; then
> passed="suspend test passed"
> wait_and_wakeup="started, suspending"
> @@ -48,6 +63,62 @@ xl dmesg | grep 'Finishing wakeup from ACPI S3 state' ||
> exit 1
> ping -c 10 192.168.0.2 || exit 1
> echo \"${passed}\"
> "
> +
> +### test: pci-pv, pci-hvm
> +elif [ "${test_variant}" = "pci-pv" ] || [ "${test_variant}" = "pci-hvm" ];
> then
> +
> + if [ -z "$PCIDEV" ]; then
> + echo "Please set 'PCIDEV' variable with BDF of test network adapter"
> >&2
> + echo "Optionally set also 'PCIDEV_INTR' to 'MSI' or 'MSI-X'" >&2
> + exit 1
> + fi
> +
> + passed="pci test passed"
> +
> + domU_config='
> +type = "'${test_variant#pci-}'"
> +name = "domU"
> +kernel = "/boot/vmlinuz"
> +ramdisk = "/boot/initrd-domU"
> +extra = "root=/dev/ram0 console=hvc0"
> +memory = 512
> +vif = [ ]
> +disk = [ ]
> +pci = [ "'$PCIDEV',seize=1" ]
> +on_reboot = "destroy"
> +'
> +
> + domU_check="
> +set -x -e
> +ip link set eth0 up
> +timeout 30s udhcpc -i eth0
> +pingip=\$(ip -o -4 r show default|cut -f 3 -d ' ')
> +ping -c 10 \"\$pingip\"
> +echo domU started
> +cat /proc/interrupts
> +"
> + if [ "$PCIDEV_INTR" = "MSI-X" ]; then
> + domU_check="$domU_check
> +grep -- '\\(-msi-x\\|PCI-MSI-X\\).*eth0' /proc/interrupts
> +"
> + elif [ "$PCIDEV_INTR" = "MSI" ]; then
> + # depending on the kernel version and domain type, the MSI can be
> + # marked as '-msi', 'PCI-MSI', or 'PCI-MSI-<SBDF>'; be careful to
> not match
> + # -msi-x nor PCI-MSI-X
> + domU_check="$domU_check
> +grep -- '\\(-msi \\|PCI-MSI\\( \\|-[^X]\\)\\).*eth0' /proc/interrupts
> +"
> + fi
> + domU_check="$domU_check
> +echo \"${passed}\"
> +"
> +
> + dom0_check="
> +until grep -q \"^domU Welcome to Alpine Linux\"
> /var/log/xen/console/guest-domU.log; do
> + sleep 1
> +done
> +tail -n 100 /var/log/xen/console/guest-domU.log
> +"
> fi
>
> # DomU
> @@ -63,7 +134,7 @@ rm var/run
> echo "#!/bin/sh
>
> ${domU_check}
> -/bin/sh" > etc/local.d/xen.start
> +" > etc/local.d/xen.start
> chmod +x etc/local.d/xen.start
> echo "rc_verbose=yes" >> etc/rc.conf
> sed -i -e 's/^Welcome/domU \0/' etc/issue
> @@ -98,17 +169,7 @@ xl create /etc/xen/domU.cfg
> ${dom0_check}
> " > etc/local.d/xen.start
> chmod +x etc/local.d/xen.start
> -# just PVH for now
> -echo '
> -type = "pvh"
> -name = "domU"
> -kernel = "/boot/vmlinuz"
> -ramdisk = "/boot/initrd-domU"
> -extra = "root=/dev/ram0 console=hvc0"
> -memory = 512
> -vif = [ "bridge=xenbr0", ]
> -disk = [ ]
> -' > etc/xen/domU.cfg
> +echo "$domU_config" > etc/xen/domU.cfg
>
> echo "rc_verbose=yes" >> etc/rc.conf
> echo "XENCONSOLED_TRACE=all" >> etc/default/xencommons
> --
> git-series 0.9.1
>
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |