1#!/bin/bash 2set -x 3 4source $HOME/.cargo/env 5source $(dirname "$0")/test-util.sh 6 7process_common_args "$@" 8 9WORKLOADS_DIR="$HOME/workloads" 10mkdir -p "$WORKLOADS_DIR" 11 12cp scripts/sha1sums-x86_64 $WORKLOADS_DIR 13 14FW_URL=$(curl --silent https://api.github.com/repos/cloud-hypervisor/rust-hypervisor-firmware/releases/latest | grep "browser_download_url" | grep -o 'https://.*[^ "]') 15FW="$WORKLOADS_DIR/hypervisor-fw" 16if [ ! -f "$FW" ]; then 17 pushd $WORKLOADS_DIR 18 time wget --quiet $FW_URL || exit 1 19 popd 20fi 21 22FOCAL_OS_IMAGE_NAME="focal-server-cloudimg-amd64-custom-20210609-0.qcow2" 23FOCAL_OS_IMAGE_URL="https://cloud-hypervisor.azureedge.net/$FOCAL_OS_IMAGE_NAME" 24FOCAL_OS_IMAGE="$WORKLOADS_DIR/$FOCAL_OS_IMAGE_NAME" 25if [ ! -f "$FOCAL_OS_IMAGE" ]; then 26 pushd $WORKLOADS_DIR 27 time wget --quiet $FOCAL_OS_IMAGE_URL || exit 1 28 popd 29fi 30 31FOCAL_OS_RAW_IMAGE_NAME="focal-server-cloudimg-amd64-custom-20210609-0.raw" 32FOCAL_OS_RAW_IMAGE="$WORKLOADS_DIR/$FOCAL_OS_RAW_IMAGE_NAME" 33if [ ! -f "$FOCAL_OS_RAW_IMAGE" ]; then 34 pushd $WORKLOADS_DIR 35 time qemu-img convert -p -f qcow2 -O raw $FOCAL_OS_IMAGE_NAME $FOCAL_OS_RAW_IMAGE_NAME || exit 1 36 popd 37fi 38 39pushd $WORKLOADS_DIR 40sha1sum sha1sums-x86_64 --check --ignore-missing 41if [ $? -ne 0 ]; then 42 echo "sha1sum validation of images failed, remove invalid images to fix the issue." 43 exit 1 44fi 45popd 46 47VMLINUX_IMAGE="$WORKLOADS_DIR/vmlinux" 48build_custom_linux 49 50BLK_IMAGE="$WORKLOADS_DIR/blk.img" 51MNT_DIR="mount_image" 52rm -rf $BLK_IMAGE 53pushd $WORKLOADS_DIR 54fallocate -l 16M $BLK_IMAGE 55mkfs.ext4 -j $BLK_IMAGE 56mkdir $MNT_DIR 57sudo mount -t ext4 $BLK_IMAGE $MNT_DIR 58sudo bash -c "echo bar > $MNT_DIR/foo" || exit 1 59sudo umount $BLK_IMAGE 60rm -r $MNT_DIR 61popd 62 63VFIO_DIR="$WORKLOADS_DIR/vfio" 64VFIO_DISK_IMAGE="$WORKLOADS_DIR/vfio.img" 65rm -rf $VFIO_DIR $VFIO_DISK_IMAGE 66mkdir -p $VFIO_DIR 67cp $FOCAL_OS_RAW_IMAGE $VFIO_DIR 68cp $FW $VFIO_DIR 69cp $VMLINUX_IMAGE $VFIO_DIR || exit 1 70 71BUILD_TARGET="$(uname -m)-unknown-linux-${CH_LIBC}" 72CFLAGS="" 73TARGET_CC="" 74if [[ "${BUILD_TARGET}" == "x86_64-unknown-linux-musl" ]]; then 75TARGET_CC="musl-gcc" 76CFLAGS="-I /usr/include/x86_64-linux-musl/ -idirafter /usr/include/" 77fi 78 79cargo build --no-default-features --features "kvm,mshv" --all --release --target $BUILD_TARGET 80 81# We always copy a fresh version of our binary for our L2 guest. 82cp target/$BUILD_TARGET/release/cloud-hypervisor $VFIO_DIR 83cp target/$BUILD_TARGET/release/ch-remote $VFIO_DIR 84 85# test_vfio rely on hugepages 86HUGEPAGESIZE=`grep Hugepagesize /proc/meminfo | awk '{print $2}'` 87PAGE_NUM=`echo $((12288 * 1024 / $HUGEPAGESIZE))` 88echo $PAGE_NUM | sudo tee /proc/sys/vm/nr_hugepages 89sudo chmod a+rwX /dev/hugepages 90 91export RUST_BACKTRACE=1 92time cargo test "vfio::test_nvidia" -- --test-threads=1 ${test_binary_args[*]} 93RES=$? 94 95exit $RES 96