Преглед изворни кода

Allow unlocking VM migration/snapshot support

This also requires NV_KVM_MIGRATION_UAPI to be set to 1 when building
the `nvidia-vgpu-vfio` kernel module, hence why unlocking this feature
is only conditionally enabled, since not everyone will want it.

Signed-off-by: kharbranth <cityofkharbranth@protonmail.com>
kharbranth пре 3 година
родитељ
комит
826e7b246e
2 измењених фајлова са 17 додато и 1 уклоњено
  1. 7 0
      src/config.rs
  2. 10 1
      src/lib.rs

+ 7 - 0
src/config.rs

@@ -7,12 +7,18 @@ impl Defaults {
     const fn unlock() -> bool {
         true
     }
+    #[inline]
+    const fn unlock_migration() -> bool {
+        false
+    }
 }
 
 #[derive(Deserialize)]
 pub struct Config {
     #[serde(default = "Defaults::unlock")]
     pub unlock: bool,
+    #[serde(default = "Defaults::unlock_migration")]
+    pub unlock_migration: bool,
 }
 
 impl Default for Config {
@@ -20,6 +26,7 @@ impl Default for Config {
     fn default() -> Self {
         Self {
             unlock: Defaults::unlock(),
+            unlock_migration: Defaults::unlock_migration(),
         }
     }
 }

+ 10 - 1
src/lib.rs

@@ -75,6 +75,9 @@ const OP_READ_PCI_ID: u32 = 0x20801801;
 /// `result` is a pointer to `VgpuConfig`.
 const OP_READ_VGPU_CFG: u32 = 0xa0820102;
 
+/// `result` is a pointer to `bool`.
+const OP_READ_VGPU_MIG_CAP: u32 = 0xa0810112;
+
 /// `nvidia-vgpu-mgr` expects this value for a vGPU capable GPU.
 const DEV_TYPE_VGPU_CAPABLE: u32 = 3;
 
@@ -340,10 +343,16 @@ pub unsafe extern "C" fn ioctl(fd: RawFd, request: c_ulong, argp: *mut c_void) -
 
             // Set device type to vGPU capable.
             *dev_type_ptr = DEV_TYPE_VGPU_CAPABLE;
-        }
+        },
+        OP_READ_VGPU_MIG_CAP if CONFIG.unlock_migration => {
+            let mig_enabled: *mut bool = io_data.result.cast();
+
+            *mig_enabled = true;
+        },
         _ => {}
     }
 
+
     if io_data.status == STATUS_OK {
         match io_data.op_type {
             OP_READ_VGPU_CFG => {