[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[for-4.17 3/3] automation: Add a new job for testing boot time cpupools on arm64


  • To: <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Michal Orzel <michal.orzel@xxxxxxx>
  • Date: Fri, 2 Sep 2022 09:09:05 +0200
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=IybsSOGdqqAMIU/Bv0RNIgzKeODkE+cebiqQFF3IGf8=; b=BWCODGR7KRNE4ChXGSRyk96gyt6sOv3ma0aR/aq7S/m1Zw1qO6+GQSsVYVITDyXSIjldTxeKHh6fidxkz+HNNsPm4uOMGmDGoWGPJMCGc8hqLnofRsxEWAHIzW+pqgR+7hRddKp7VFa3152MPnL5gPEg+OS+HrO9lcQAe/Uxb9quHS6neS8VzH7IEfQjQswb6/G7KlwNBtpkCn2qJDmOoRLA0bALoFNuN8HsbdV/pAYNrQPNRRzGrMkQnyQceeAxp3ed142duoRFBYpoQ2yU9k34HMqWFYc7cznmoGNjcg1W7xkb9k0RYXbFZawZRE6BV8wpsLq/uVXxpP7z7g8cMQ==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dEpajqYunuTuHH/ySIE2/PshNvOgkgl2CC5k/2kj7ozgpkCLI3en23NO3TsG7nSxkM9eISxyDVaiMV5z41sxLgEOY+RPdYTWshXonKz/sLX5K8A4STRvHAyqh9YhcPN7SXS0Hyv55mZqicwzZsPLVKDbspF6+w8R5XqEUQulA/PdkXZtS0JZmMM/mmCKB7wviY/hRsqNE6wEbflP08Jj2BKx68aRU9yfg2VwrYG6qKvF9t8HKxmGgM12GWaul38iT9GZHWz5svvKZKP1Lg/TgUdMg85nKlkyZVgDyYf3ax1WFYdnf1IVMobYFDZa56pA5cD5cEnAdYoXGFxr22Mkdw==
  • Cc: Michal Orzel <michal.orzel@xxxxxxx>, Doug Goldstein <cardoe@xxxxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>
  • Delivery-date: Fri, 02 Sep 2022 07:09:39 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

Add a new test job qemu-smoke-arm64-gcc-boot-cpupools that will execute
script qemu-smoke-arm64.sh to test boot time cpupools feature.
Enable CONFIG_BOOT_TIME_CPUPOOLS for the arm64 build and add a new test
case in qemu-smoke-arm64.sh that if selected will:
 - create a device tree cpupool node with cpu@1
 - assign created cpupool to domU0
 - add a check in dom0 xen.start to see if domU is assigned a Pool-1

Take the opportunity to refactor the qemu-smoke-arm64.sh script as
follows:
 - use domU_check to store the test's commands to be run from domU
 - use dom0_check to store the test's commands to be run from dom0
 - use fdtput instead of sed to perform dtb modifications
 - use more meaningful messages for "passed" variable. This way we can
   grep for messages reported either by domU or dom0 and get rid of
   assumption that tests can only be run from domU

Signed-off-by: Michal Orzel <michal.orzel@xxxxxxx>
---
 automation/gitlab-ci/test.yaml         | 19 +++++++++++++++
 automation/scripts/build               |  3 ++-
 automation/scripts/qemu-smoke-arm64.sh | 33 +++++++++++++++++++-------
 3 files changed, 45 insertions(+), 10 deletions(-)

diff --git a/automation/gitlab-ci/test.yaml b/automation/gitlab-ci/test.yaml
index 07209820b474..d899b3bdbf7a 100644
--- a/automation/gitlab-ci/test.yaml
+++ b/automation/gitlab-ci/test.yaml
@@ -100,6 +100,25 @@ qemu-smoke-arm64-gcc-staticmem:
   tags:
     - arm64
 
+qemu-smoke-arm64-gcc-boot-cpupools:
+  extends: .test-jobs-common
+  variables:
+    CONTAINER: debian:unstable-arm64v8
+  script:
+    - ./automation/scripts/qemu-smoke-arm64.sh boot-cpupools 2>&1 | tee 
qemu-smoke-arm64.log
+  needs:
+    - alpine-3.12-gcc-arm64
+    - alpine-3.12-arm64-rootfs-export
+    - kernel-5.19-arm64-export
+    - qemu-system-aarch64-6.0.0-arm64-export
+  artifacts:
+    paths:
+      - smoke.serial
+      - '*.log'
+    when: always
+  tags:
+    - arm64
+
 qemu-smoke-arm32-gcc:
   extends: .test-jobs-common
   variables:
diff --git a/automation/scripts/build b/automation/scripts/build
index 2b9f2d2b541a..2f15ab3198e6 100755
--- a/automation/scripts/build
+++ b/automation/scripts/build
@@ -19,7 +19,8 @@ else
         echo "
 CONFIG_EXPERT=y
 CONFIG_UNSUPPORTED=y
-CONFIG_STATIC_MEMORY=y" > xen/.config
+CONFIG_STATIC_MEMORY=y
+CONFIG_BOOT_TIME_CPUPOOLS=y" > xen/.config
         make -j$(nproc) -C xen olddefconfig
     else
         make -j$(nproc) -C xen defconfig
diff --git a/automation/scripts/qemu-smoke-arm64.sh 
b/automation/scripts/qemu-smoke-arm64.sh
index 7ac96027760d..c2184850293c 100755
--- a/automation/scripts/qemu-smoke-arm64.sh
+++ b/automation/scripts/qemu-smoke-arm64.sh
@@ -4,20 +4,22 @@ set -ex
 
 test_variant=$1
 
-passed="passed"
-check="
+if [ -z "${test_variant}" ]; then
+    passed="ping test passed"
+    domU_check="
 until ifconfig eth0 192.168.0.2 &> /dev/null && ping -c 10 192.168.0.1; do
     sleep 30
 done
 echo \"${passed}\"
 "
+fi
 
 if [[ "${test_variant}" == "static-mem" ]]; then
     # Memory range that is statically allocated to DOM1
     domu_base="50000000"
     domu_size="10000000"
     passed="${test_variant} test passed"
-    check="
+    domU_check="
 current=\$(hexdump -e '16/1 \"%02x\"' 
/proc/device-tree/memory@${domu_base}/reg 2>/dev/null)
 expected=$(printf \"%016x%016x\" 0x${domu_base} 0x${domu_size})
 if [[ \"\${expected}\" == \"\${current}\" ]]; then
@@ -42,11 +44,23 @@ curl -fsSLO 
https://github.com/qemu/qemu/raw/v5.2.0/pc-bios/efi-virtio.rom
    -cpu cortex-a57 -machine type=virt \
    -m 1024 -smp 2 -display none \
    -machine dumpdtb=binaries/virt-gicv2.dtb
-# XXX disable pl061 to avoid Linux crash
-dtc -I dtb -O dts binaries/virt-gicv2.dtb > binaries/virt-gicv2.dts
-sed 's/compatible = "arm,pl061.*/status = "disabled";/g' 
binaries/virt-gicv2.dts > binaries/virt-gicv2-edited.dts
-dtc -I dts -O dtb binaries/virt-gicv2-edited.dts > binaries/virt-gicv2.dtb
 
+# XXX disable pl061 to avoid Linux crash
+fdtput binaries/virt-gicv2.dtb -p -t s /pl061@9030000 status disabled
+
+if [[ "${test_variant}" == "boot-cpupools" ]]; then
+    # Create cpupool node and assign it to domU0
+    cpu_phandle="$(fdtget binaries/virt-gicv2.dtb -t x /cpus/cpu@1 phandle)"
+    cpupool_phandle="0xffffff"
+    fdtput binaries/virt-gicv2.dtb -p -t s /chosen/cpupool compatible 
xen,cpupool
+    fdtput binaries/virt-gicv2.dtb -p -t x /chosen/cpupool cpupool-cpus 
$cpu_phandle
+    fdtput binaries/virt-gicv2.dtb -p -t x /chosen/cpupool phandle 
$cpupool_phandle
+    fdtput binaries/virt-gicv2.dtb -p -t x /chosen/domU0 domain-cpupool 
$cpupool_phandle
+
+    # Check if domU0 (id=1) is assigned to Pool-1
+    passed="${test_variant} test passed"
+    dom0_check="if xl list -c 1 | grep -q Pool-1; then echo ${passed}; fi"
+fi
 
 # Busybox
 mkdir -p initrd
@@ -66,7 +80,7 @@ echo "#!/bin/sh
 mount -t proc proc /proc
 mount -t sysfs sysfs /sys
 mount -t devtmpfs devtmpfs /dev
-${check}
+${domU_check}
 /bin/sh" > initrd/init
 chmod +x initrd/init
 cd initrd
@@ -98,6 +112,7 @@ ifconfig xenbr0 up
 ifconfig xenbr0 192.168.0.1
 
 xl network-attach 1 type=vif
+${dom0_check}
 " > etc/local.d/xen.start
 chmod +x etc/local.d/xen.start
 echo "rc_verbose=yes" >> etc/rc.conf
@@ -148,5 +163,5 @@ timeout -k 1 240 \
     -bios /usr/lib/u-boot/qemu_arm64/u-boot.bin |& tee smoke.serial
 
 set -e
-(grep -q "^Welcome to Alpine Linux" smoke.serial && grep -q "DOM1: ${passed}" 
smoke.serial) || exit 1
+(grep -q "^Welcome to Alpine Linux" smoke.serial && grep -q "${passed}" 
smoke.serial) || exit 1
 exit 0
-- 
2.25.1




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.