diff options
Diffstat (limited to 'core/modules/qemu/data/opt/openslx/scripts/systemd-qemu_env')
-rwxr-xr-x | core/modules/qemu/data/opt/openslx/scripts/systemd-qemu_env | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/core/modules/qemu/data/opt/openslx/scripts/systemd-qemu_env b/core/modules/qemu/data/opt/openslx/scripts/systemd-qemu_env index b71919de..ffa54ce1 100755 --- a/core/modules/qemu/data/opt/openslx/scripts/systemd-qemu_env +++ b/core/modules/qemu/data/opt/openslx/scripts/systemd-qemu_env @@ -44,3 +44,46 @@ if [ ! -e /dev/kvm ]; then slxlog "qemu" "/dev/kvm not found! Missing kvm kernel module(s)?" exit 1 fi + +# +# create and setup Intel GVT-g mediated device instance for passthrough if Intel GVT-g is enabled +# +source /opt/openslx/vmchooser/plugins/qemukvm/includes/kernel-cmdln.inc +source /opt/openslx/vmchooser/plugins/qemukvm/includes/passthrough-mdev.inc + +if passthrough_mdev_enabled; then + # check if passthrough is configured properly + if ! passthrough_mdev_check; then + slxlog "qemu" "mediated device passthrough is enabled but not setup properly!" + exit 2; + fi + + # load required kernel modules for mediated device passthrough + modprobe "vfio-mdev" || { slxlog "qemu" "Could not load 'vfio-mdev' kernel modul!"; exit 3; } + modprobe "kvmgt" || { slxlog "qemu" "Could not load 'kvmgt' kernel modul!"; exit 4; } + + # get Intel integrated GPU mediated device for passthrough + local pt_mdev_device="$(passthrough_mdev_device_get_intel_igd)" + if [ -z "${pt_mdev_device}" ]; then + slxlog "qemu" "Could find any Intel integrated GPU with mediated device (Intel GVT-g) support!" + exit 5; + fi + + # get Intel GVT-g mediated device instance type + local pt_mdev_device_type="$(passthrough_mdev_type_get "${pt_mdev_device}")" + if [ -z "${pt_mdev_device_type}" ]; then + slxlog "qemu" "Could obtain the mediated device instance type of the Intel integrated GPU (${pt_mdev_device})" + exit 6; + fi + + # generate UUID for Intel GVT-g mediated device instance + local pt_mdev_uuid="$(uuidgen)" + + # create Intel GVT-g mediated device instance + passthrough_mdev_instance_create "${pt_mdev_device}" "${pt_mdev_device_type}" "${pt_mdev_uuid}" + if [ "${?}" -eq 0 ]; then + slxlog "qemu" "Successfully created Intel GVT-g mediated device instance (${pt_mdev_uuid})" + else + slxlog "qemu" "Failed to create Intel GVT-g mediated device instance!" + fi +fi |