diff --git a/.zuul.yaml b/.zuul.yaml index df5770ec6233..f8ae0581a8b2 100644 --- a/.zuul.yaml +++ b/.zuul.yaml @@ -464,6 +464,7 @@ NOVNC_FROM_PACKAGE: False NOVA_USE_UNIFIED_LIMITS: True MYSQL_REDUCE_MEMORY: True + NOVA_COMPILE_MDEV_SAMPLES: True devstack_services: # Disable OVN services br-ex-tcpdump: false @@ -486,6 +487,7 @@ devstack_plugins: # Needed for QoS port heal allocation testing. neutron: https://opendev.org/openstack/neutron + nova: https://opendev.org/openstack/nova group-vars: subnode: devstack_localrc: diff --git a/devstack/lib/mdev_samples b/devstack/lib/mdev_samples new file mode 100644 index 000000000000..eb985a821c5d --- /dev/null +++ b/devstack/lib/mdev_samples @@ -0,0 +1,46 @@ +function compile_mdev_samples { + set -x + local kver=$(uname -r) + local kvariant=$(uname -r | awk -F - '{print $NF}') + + if [[ "$kvariant" == "kvm" ]]; then + echo "NOTE: The kvm variant of the kernel you are running does not " \ + "have the mdev support required to enable the mdev samples." + echo "Install the generic variant and retry." + exit 1 + elif [[ "$kvariant" != "generic" ]]; then + echo "NOTE: This may not work on your kernel variant of $kvariant!" + echo "Recommend installing the generic variant kernel instead." + fi + + if grep deb-src /etc/apt/sources.list; then + sudo sed -i 's/^# deb-src/deb-src/' /etc/apt/sources.list + else + sudo tee -a /etc/apt/sources.list < kernel-source.log + cd linux-*/samples/vfio-mdev + sed -i 's/obj-[^ ]*/obj-m/' Makefile + make -C /lib/modules/$(uname -r)/build M=$(pwd) modules + sudo make -C /lib/modules/$(uname -r)/build M=$(pwd) modules_install + sudo depmod + for mod in $NOVA_MDEV_SAMPLES; do + sudo modprobe $mod + done + lsmod | grep mdev +} diff --git a/devstack/plugin.sh b/devstack/plugin.sh new file mode 100644 index 000000000000..a74913805e88 --- /dev/null +++ b/devstack/plugin.sh @@ -0,0 +1,20 @@ +NOVA_PLUGINDIR=$(readlink -f $(dirname "${BASH_SOURCE[0]}")) + +source $NOVA_PLUGINDIR/lib/mdev_samples + +if [[ $1 == "stack" ]]; then + case $2 in + install) + if [[ "$NOVA_COMPILE_MDEV_SAMPLES" == True ]]; then + async_runfunc compile_mdev_samples + fi + ;; + extra) + if [[ "$NOVA_COMPILE_MDEV_SAMPLES" == True ]]; then + async_wait compile_mdev_samples + fi + ;; + esac +elif [[ $1 == "clean" ]]; then + rm -Rf $NOVA_KERNEL_TEMP +fi diff --git a/devstack/settings b/devstack/settings new file mode 100644 index 000000000000..f469bb2b8ac0 --- /dev/null +++ b/devstack/settings @@ -0,0 +1,8 @@ +# Whether or not to compile the mdev sample drivers from source +NOVA_COMPILE_MDEV_SAMPLES=$(trueorfalse True NOVA_COMPILE_MDEV_SAMPLES) + +# Insert these mdev sample modules +NOVA_MDEV_SAMPLES=${NOVA_MDEV_SAMPLES:-mtty mdpy mdpy-fb mbochs} + +# Temporary directory for kernel source +NOVA_KERNEL_TEMP=$DEST/kernel