infra/modules/vfio.nix

56 lines
1.4 KiB
Nix
Raw Normal View History

2024-04-14 23:50:37 +01:00
let
gpuIDs = [
"1002:744c" # Graphics
"1002:ab30" # Audio
];
in
2024-04-24 13:55:10 +01:00
{
pkgs,
lib,
config,
...
}: {
options.vfio.enable = with lib;
mkEnableOption "Configure the machine for VFIO";
2024-04-14 23:50:37 +01:00
2024-04-24 13:55:10 +01:00
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
'';
2024-04-14 23:50:37 +01:00
2024-04-24 13:55:10 +01:00
kernelParams = [
2024-04-14 23:50:37 +01:00
"amd_iommu=on"
"pcie_acs_override=downstream,multifunction"
"vfio-pci.ids=1002:744c,1002:ab30"
2024-04-24 13:55:10 +01:00
"pcie_aspm=off"
2024-04-14 23:50:37 +01:00
];
2024-04-24 13:55:10 +01:00
};
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"
]
'';
};
2024-04-14 23:50:37 +01:00
};
};
2024-04-24 13:55:10 +01:00
}