1#!/bin/bash 2set -x 3 4source $HOME/.cargo/env 5source $(dirname "$0")/test-util.sh 6 7process_common_args "$@" 8# For now these values are default for kvm 9features="" 10 11WORKLOADS_DIR="$HOME/workloads" 12FOCAL_OS_IMAGE_NAME="focal-server-cloudimg-amd64-custom-20210609-0.raw" 13FOCAL_OS_IMAGE="$WORKLOADS_DIR/$FOCAL_OS_IMAGE_NAME" 14FW="$WORKLOADS_DIR/hypervisor-fw" 15VMLINUX_IMAGE="$WORKLOADS_DIR/vmlinux" 16 17BLK_IMAGE="$WORKLOADS_DIR/blk.img" 18MNT_DIR="mount_image" 19rm -rf $BLK_IMAGE 20pushd $WORKLOADS_DIR 21fallocate -l 16M $BLK_IMAGE 22mkfs.ext4 -j $BLK_IMAGE 23mkdir $MNT_DIR 24sudo mount -t ext4 $BLK_IMAGE $MNT_DIR 25sudo bash -c "echo bar > $MNT_DIR/foo" || exit 1 26sudo umount $BLK_IMAGE 27rm -r $MNT_DIR 28popd 29 30VFIO_DIR="$WORKLOADS_DIR/vfio" 31VFIO_DISK_IMAGE="$WORKLOADS_DIR/vfio.img" 32rm -rf $VFIO_DIR $VFIO_DISK_IMAGE 33mkdir -p $VFIO_DIR 34cp $FOCAL_OS_IMAGE $VFIO_DIR 35cp $FW $VFIO_DIR 36cp $VMLINUX_IMAGE $VFIO_DIR || exit 1 37 38BUILD_TARGET="$(uname -m)-unknown-linux-${CH_LIBC}" 39CFLAGS="" 40TARGET_CC="" 41if [[ "${BUILD_TARGET}" == "x86_64-unknown-linux-musl" ]]; then 42TARGET_CC="musl-gcc" 43CFLAGS="-I /usr/include/x86_64-linux-musl/ -idirafter /usr/include/" 44fi 45 46cargo build --all --release $features --target $BUILD_TARGET 47strip target/$BUILD_TARGET/release/cloud-hypervisor 48strip target/$BUILD_TARGET/release/ch-remote 49 50# We always copy a fresh version of our binary for our L2 guest. 51cp target/$BUILD_TARGET/release/cloud-hypervisor $VFIO_DIR 52cp target/$BUILD_TARGET/release/ch-remote $VFIO_DIR 53 54# test_vfio rely on hugepages 55echo 6144 | sudo tee /proc/sys/vm/nr_hugepages 56sudo chmod a+rwX /dev/hugepages 57 58export RUST_BACKTRACE=1 59time cargo test $features "vfio::test_vfio" -- ${test_binary_args[*]} 60RES=$? 61 62if [ $RES -eq 0 ]; then 63 time cargo test $features "vfio::test_nvidia" -- --test-threads=1 ${test_binary_args[*]} 64 RES=$? 65fi 66 67exit $RES 68