automation: Add a new job for testing boot time cpupools on arm64

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 make use of the
ImageBuilder feature to create cpupool with cpu@1, null scheduler and
assign it to domU. Add a check in dom0 xen.start to see if domU is
assigned a Pool-1 with null scheduler.

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@amd.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
This commit is contained in:
Michal Orzel authored and Stefano Stabellini committed 2022-09-08 16:28:26 -07:00
1 parent e17ca18747
commit 36e3f41587
3 files changed
+48 -10

No files matched your search

+19
View File
@@ -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:
+2 -1
View File
@@ -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
+27 -9
View File
@@ -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
@@ -26,6 +28,16 @@ fi
"
fi
if [[ "${test_variant}" == "boot-cpupools" ]]; then
# Check if domU0 (id=1) is assigned to Pool-1 with null scheduler
passed="${test_variant} test passed"
dom0_check="
if xl list -c 1 | grep -q Pool-1 && xl cpupool-list Pool-1 | grep -q Pool-1; then
echo ${passed}
fi
"
fi
export DEBIAN_FRONTENT=noninteractive
apt-get -qy update
apt-get -qy install --no-install-recommends u-boot-qemu \
@@ -42,11 +54,9 @@ 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
# Busybox
mkdir -p initrd
@@ -66,7 +76,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 +108,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
@@ -127,6 +138,13 @@ if [[ "${test_variant}" == "static-mem" ]]; then
echo -e "\nDOMU_STATIC_MEM[0]=\"0x${domu_base} 0x${domu_size}\"" >> binaries/config
fi
if [[ "${test_variant}" == "boot-cpupools" ]]; then
echo '
CPUPOOL[0]="cpu@1 null"
DOMU_CPUPOOL[0]=0
NUM_CPUPOOLS=1' >> binaries/config
fi
rm -rf imagebuilder
git clone https://gitlab.com/ViryaOS/imagebuilder
bash imagebuilder/scripts/uboot-script-gen -t tftp -d binaries/ -c binaries/config
@@ -148,5 +166,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
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.