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" 10FOCAL_OS_IMAGE_NAME="focal-server-cloudimg-amd64-custom-20210609-0.raw" 11FOCAL_OS_IMAGE="$WORKLOADS_DIR/$FOCAL_OS_IMAGE_NAME" 12FW="$WORKLOADS_DIR/hypervisor-fw" 13 14VMLINUX_IMAGE="$WORKLOADS_DIR/vmlinux" 15if [ ! -f "$VMLINUX_IMAGE" ]; then 16 build_custom_linux 17fi 18 19BLK_IMAGE="$WORKLOADS_DIR/blk.img" 20MNT_DIR="mount_image" 21rm -rf $BLK_IMAGE 22pushd $WORKLOADS_DIR 23fallocate -l 16M $BLK_IMAGE 24mkfs.ext4 -j $BLK_IMAGE 25mkdir $MNT_DIR 26sudo mount -t ext4 $BLK_IMAGE $MNT_DIR 27sudo bash -c "echo bar > $MNT_DIR/foo" || exit 1 28sudo umount $BLK_IMAGE 29rm -r $MNT_DIR 30popd 31 32VFIO_DIR="$WORKLOADS_DIR/vfio" 33VFIO_DISK_IMAGE="$WORKLOADS_DIR/vfio.img" 34rm -rf $VFIO_DIR $VFIO_DISK_IMAGE 35mkdir -p $VFIO_DIR 36cp $FOCAL_OS_IMAGE $VFIO_DIR 37cp $FW $VFIO_DIR 38cp $VMLINUX_IMAGE $VFIO_DIR || exit 1 39 40BUILD_TARGET="$(uname -m)-unknown-linux-${CH_LIBC}" 41CFLAGS="" 42TARGET_CC="" 43if [[ "${BUILD_TARGET}" == "x86_64-unknown-linux-musl" ]]; then 44TARGET_CC="musl-gcc" 45CFLAGS="-I /usr/include/x86_64-linux-musl/ -idirafter /usr/include/" 46fi 47 48cargo build --no-default-features --features "kvm,mshv" --all --release --target $BUILD_TARGET 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 "vfio::test_vfio" -- ${test_binary_args[*]} 60RES=$? 61 62if [ $RES -eq 0 ]; then 63 time cargo test "vfio::test_nvidia" -- --test-threads=1 ${test_binary_args[*]} 64 RES=$? 65fi 66 67exit $RES 68