infra/modules/vfio.nix
2024-04-24 13:55:10 +01:00

56 lines
1.4 KiB
Nix

let
gpuIDs = [
"1002:744c" # Graphics
"1002:ab30" # Audio
];
in
{
pkgs,
lib,
config,
...
}: {
options.vfio.enable = with lib;
mkEnableOption "Configure the machine for VFIO";
config = let
cfg = config.vfio;
in {
boot = {
kernelModules = ["kvm-amd" "vfio_pci" "vfio" "vfio_iommu_type1" "kvmfr"];
extraModulePackages = with config.boot.kernelPackages; [
kvmfr
];
extraModprobeConfig = ''
# The memory size is calculates in the same way as VM's shmem.
options kvmfr static_size_mb=64
'';
kernelParams = [
"amd_iommu=on"
"pcie_acs_override=downstream,multifunction"
"vfio-pci.ids=1002:744c,1002:ab30"
"pcie_aspm=off"
];
};
services.udev.extraRules = ''
SUBSYSTEM=="kvmfr", OWNER="gsimmer", GROUP="kvm", MODE="0660"
'';
hardware.opengl.enable = true;
virtualisation.spiceUSBRedirection.enable = true;
virtualisation.libvirtd = {
qemu = {
verbatimConfig = ''
cgroup_device_acl = [
"/dev/null", "/dev/full", "/dev/zero",
"/dev/random", "/dev/urandom",
"/dev/ptmx", "/dev/kvm", "/dev/kqemu",
"/dev/rtc","/dev/hpet", "/dev/vfio/vfio",
"/dev/kvmfr0"
]
'';
};
};
};
}