From c9e7b380e529e98bfca3887dd5011050515ce937 Mon Sep 17 00:00:00 2001 From: gnidorah Date: Wed, 9 May 2018 22:40:30 +0300 Subject: [PATCH 1/5] linux: enable support for iGVT-g VGPU --- pkgs/os-specific/linux/kernel/common-config.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pkgs/os-specific/linux/kernel/common-config.nix b/pkgs/os-specific/linux/kernel/common-config.nix index cee2197f3c7a..a226061ecbfa 100644 --- a/pkgs/os-specific/linux/kernel/common-config.nix +++ b/pkgs/os-specific/linux/kernel/common-config.nix @@ -214,6 +214,11 @@ with stdenv.lib; ${optionalString (versionOlder version "4.3") '' DRM_I915_KMS y ''} + # iGVT-g support + ${optionalString (versionAtLeast version "4.16") '' + DRM_I915_GVT y + DRM_I915_GVT_KVMGT m + ''} # Allow specifying custom EDID on the kernel command line DRM_LOAD_EDID_FIRMWARE y VGA_SWITCHEROO y # Hybrid graphics support From 30dc2913317b4077912c145cd20fe8804ac67502 Mon Sep 17 00:00:00 2001 From: gnidorah Date: Fri, 11 May 2018 20:49:14 +0300 Subject: [PATCH 2/5] virt-viewer: support ALSA --- pkgs/applications/virtualization/virt-viewer/default.nix | 7 +++++-- pkgs/development/libraries/spice-gtk/default.nix | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/pkgs/applications/virtualization/virt-viewer/default.nix b/pkgs/applications/virtualization/virt-viewer/default.nix index eb48e1d3d300..33e12d109854 100644 --- a/pkgs/applications/virtualization/virt-viewer/default.nix +++ b/pkgs/applications/virtualization/virt-viewer/default.nix @@ -1,7 +1,7 @@ { stdenv, fetchurl, pkgconfig, intltool, glib, libxml2, gtk3, gtkvnc, gmp , libgcrypt, gnupg, cyrus_sasl, shared-mime-info, libvirt, yajl, xen , gsettings-desktop-schemas, makeWrapper, libvirt-glib, libcap_ng, numactl -, libapparmor +, libapparmor, gst_all_1 , spiceSupport ? true , spice-gtk ? null, spice-protocol ? null, libcap ? null, gdbm ? null }: @@ -30,11 +30,14 @@ stdenv.mkDerivation rec { xen ] ++ optionals spiceSupport [ spice-gtk spice-protocol libcap gdbm + gst_all_1.gst-plugins-base gst_all_1.gst-plugins-good ]; postInstall = '' for f in "$out"/bin/*; do - wrapProgram "$f" --prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH" + wrapProgram "$f" \ + --prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH" \ + --prefix GST_PLUGIN_SYSTEM_PATH_1_0 : "$GST_PLUGIN_SYSTEM_PATH_1_0" done ''; diff --git a/pkgs/development/libraries/spice-gtk/default.nix b/pkgs/development/libraries/spice-gtk/default.nix index 05fd952eb2e8..1b054334c691 100644 --- a/pkgs/development/libraries/spice-gtk/default.nix +++ b/pkgs/development/libraries/spice-gtk/default.nix @@ -2,7 +2,7 @@ , openssl, libpulseaudio, pixman, gobjectIntrospection, libjpeg_turbo, zlib , cyrus_sasl, python2Packages, autoreconfHook, usbredir, libsoup , withPolkit ? true, polkit, acl, usbutils -, vala, gtk3, epoxy, libdrm }: +, vala, gtk3, epoxy, libdrm, gst_all_1 }: # If this package is built with polkit support (withPolkit=true), # usb redirection reqires spice-client-glib-usb-acl-helper to run setuid root. @@ -46,7 +46,7 @@ in stdenv.mkDerivation rec { ''; buildInputs = [ - spice-protocol celt_0_5_1 openssl libpulseaudio pixman + spice-protocol celt_0_5_1 openssl libpulseaudio gst_all_1.gst-plugins-base pixman libjpeg_turbo zlib cyrus_sasl python pygtk usbredir gtk3 epoxy libdrm ] ++ optionals withPolkit [ polkit acl usbutils ] ; From ce0d9eecff20b4bcd5df86005763acb8f212b661 Mon Sep 17 00:00:00 2001 From: gnidorah Date: Fri, 11 May 2018 21:45:05 +0300 Subject: [PATCH 3/5] phodav: init at 2.2 --- pkgs/tools/networking/phodav/default.nix | 25 ++++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 ++ 2 files changed, 27 insertions(+) create mode 100644 pkgs/tools/networking/phodav/default.nix diff --git a/pkgs/tools/networking/phodav/default.nix b/pkgs/tools/networking/phodav/default.nix new file mode 100644 index 000000000000..e585af81991e --- /dev/null +++ b/pkgs/tools/networking/phodav/default.nix @@ -0,0 +1,25 @@ +{ stdenv, fetchurl +, intltool, pkgconfig, glib, libsoup }: + +let + version = "2.2"; +in stdenv.mkDerivation rec { + name = "phodav-${version}"; + + src = fetchurl { + url = "http://ftp.gnome.org/pub/GNOME/sources/phodav/${version}/${name}.tar.xz"; + sha256 = "1hap0lncbcmivnflh0fbx7y58ry78p9wgj7z03r64ic0kvf0a0q8"; + }; + + buildInputs = [ intltool glib libsoup ]; + + nativeBuildInputs = [ pkgconfig ]; + + meta = with stdenv.lib; { + description = "WebDav server implementation and library using libsoup"; + homepage = https://wiki.gnome.org/phodav; + license = licenses.lgpl21; + maintainers = with maintainers; [ gnidorah ]; + platforms = platforms.linux; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index fe4e0cc91f40..2db43f53bce9 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4396,6 +4396,8 @@ with pkgs; philter = callPackage ../tools/networking/philter { }; + phodav = callPackage ../tools/networking/phodav { }; + pinentry = callPackage ../tools/security/pinentry { libcap = if stdenv.isDarwin then null else libcap; }; From 62500ec9649a17c2bd5380a5551043b426560cd6 Mon Sep 17 00:00:00 2001 From: gnidorah Date: Fri, 11 May 2018 22:09:22 +0300 Subject: [PATCH 4/5] virt-viewer: folder sharing support --- pkgs/development/libraries/spice-gtk/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/libraries/spice-gtk/default.nix b/pkgs/development/libraries/spice-gtk/default.nix index 1b054334c691..21359c4f0d0b 100644 --- a/pkgs/development/libraries/spice-gtk/default.nix +++ b/pkgs/development/libraries/spice-gtk/default.nix @@ -2,7 +2,7 @@ , openssl, libpulseaudio, pixman, gobjectIntrospection, libjpeg_turbo, zlib , cyrus_sasl, python2Packages, autoreconfHook, usbredir, libsoup , withPolkit ? true, polkit, acl, usbutils -, vala, gtk3, epoxy, libdrm, gst_all_1 }: +, vala, gtk3, epoxy, libdrm, gst_all_1, phodav }: # If this package is built with polkit support (withPolkit=true), # usb redirection reqires spice-client-glib-usb-acl-helper to run setuid root. @@ -47,7 +47,7 @@ in stdenv.mkDerivation rec { buildInputs = [ spice-protocol celt_0_5_1 openssl libpulseaudio gst_all_1.gst-plugins-base pixman - libjpeg_turbo zlib cyrus_sasl python pygtk usbredir gtk3 epoxy libdrm + libjpeg_turbo zlib cyrus_sasl python pygtk usbredir gtk3 epoxy libdrm phodav ] ++ optionals withPolkit [ polkit acl usbutils ] ; nativeBuildInputs = [ pkgconfig gettext libsoup autoreconfHook vala gobjectIntrospection ]; From a3e239ac6233dc895edaf90d8d4ba6728d4d4a41 Mon Sep 17 00:00:00 2001 From: gnidorah Date: Tue, 29 May 2018 19:29:23 +0300 Subject: [PATCH 5/5] nixos/kvmgt: init --- nixos/modules/module-list.nix | 1 + nixos/modules/virtualisation/kvmgt.nix | 64 ++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 nixos/modules/virtualisation/kvmgt.nix diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index 12d9e1adf23d..d6f2c85a8109 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -787,6 +787,7 @@ ./virtualisation/lxd.nix ./virtualisation/amazon-options.nix ./virtualisation/hyperv-guest.nix + ./virtualisation/kvmgt.nix ./virtualisation/openvswitch.nix ./virtualisation/parallels-guest.nix ./virtualisation/qemu-guest-agent.nix diff --git a/nixos/modules/virtualisation/kvmgt.nix b/nixos/modules/virtualisation/kvmgt.nix new file mode 100644 index 000000000000..fc0bedb68bd0 --- /dev/null +++ b/nixos/modules/virtualisation/kvmgt.nix @@ -0,0 +1,64 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + cfg = config.virtualisation.kvmgt; + kernelPackages = config.boot.kernelPackages; + vgpuOptions = { + uuid = mkOption { + type = types.string; + description = "UUID of VGPU device. You can generate one with libossp_uuid."; + }; + }; +in { + options = { + virtualisation.kvmgt = { + enable = mkEnableOption '' + KVMGT (iGVT-g) VGPU support. Allows Qemu/KVM guests to share host's Intel integrated graphics card. + Currently only one graphical device can be shared + ''; + # multi GPU support is under the question + device = mkOption { + type = types.string; + default = "0000:00:02.0"; + description = "PCI ID of graphics card. You can figure it with ls /sys/class/mdev_bus."; + }; + vgpus = mkOption { + default = {}; + type = with types; attrsOf (submodule [ { options = vgpuOptions; } ]); + description = '' + Virtual GPUs to be used in Qemu. You can find devices via ls /sys/bus/pci/devices/*/mdev_supported_types + and find info about device via cat /sys/bus/pci/devices/*/mdev_supported_types/i915-GVTg_V5_4/description + ''; + example = { + "i915-GVTg_V5_8" = { + uuid = "a297db4a-f4c2-11e6-90f6-d3b88d6c9525"; + }; + }; + }; + }; + }; + + config = mkIf cfg.enable { + assertions = singleton { + assertion = versionAtLeast kernelPackages.kernel.version "4.16"; + message = "KVMGT is not properly supported for kernels older than 4.16"; + }; + boot.kernelParams = [ "i915.enable_gvt=1" ]; + systemd.services = mapAttrs' (name: value: + nameValuePair "kvmgt-${name}" { + description = "KVMGT VGPU ${name}"; + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; + ExecStart = "${pkgs.runtimeShell} -c 'echo ${value.uuid} > /sys/bus/pci/devices/${cfg.device}/mdev_supported_types/${name}/create'"; + ExecStop = "${pkgs.runtimeShell} -c 'echo 1 > /sys/bus/pci/devices/${cfg.device}/${value.uuid}/remove'"; + }; + wantedBy = [ "multi-user.target" ]; + } + ) cfg.vgpus; + }; + + meta.maintainers = with maintainers; [ gnidorah ]; +}