summaryrefslogtreecommitdiffstats
path: root/core/modules/qemu/data/opt/openslx/scripts/systemd-qemu_env
diff options
context:
space:
mode:
Diffstat (limited to 'core/modules/qemu/data/opt/openslx/scripts/systemd-qemu_env')
-rwxr-xr-xcore/modules/qemu/data/opt/openslx/scripts/systemd-qemu_env43
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