xref: /cloud-hypervisor/scripts/run_integration_tests_vfio.sh (revision 6f8bd27cf7629733582d930519e98d19e90afb16)
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