diff --git a/vgpu_unlock.patch b/vgpu_unlock.patch new file mode 100644 index 0000000..4ce27aa --- /dev/null +++ b/vgpu_unlock.patch @@ -0,0 +1,152 @@ +diff --git kernel/nvidia/nv-caps.c kernel/nvidia/nv-caps.c +index 90e866f..7151944 100644 +--- kernel/nvidia/nv-caps.c ++++ kernel/nvidia/nv-caps.c +@@ -37,8 +37,12 @@ MODULE_PARM_DESC(nv_cap_enable_devfs, "Enable (1) or disable (0) nv-caps " \ + + extern int NVreg_ModifyDeviceFiles; + ++#if NV_IS_EXPORT_SYMBOL_PRESENT_close_fd ++#include ++#else + /* sys_close() or __close_fd() */ + #include ++#endif + + #define NV_CAP_DRV_MINOR_COUNT 8192 + +@@ -581,12 +585,18 @@ void NV_API_CALL nv_cap_close_fd(int fd) + } + + /* +- * From v4.17-rc1 kernels have stopped exporting sys_close(fd) and started +- * exporting __close_fd, as of this commit: ++ * From v4.17-rc1 (to v5.10.8) kernels have stopped exporting sys_close(fd) ++ * and started exporting __close_fd, as of this commit: + * 2018-04-02 2ca2a09d6215 ("fs: add ksys_close() wrapper; remove in-kernel +- * calls to sys_close()") ++ * calls to sys_close()") ++ * Kernels v5.11-rc1 onwards have stopped exporting __close_fd, and started ++ * exporting close_fd, as of this commit: ++ * 2020-12-20 8760c909f54a ("file: Rename __close_fd to close_fd and remove ++ * the files parameter") + */ +-#if NV_IS_EXPORT_SYMBOL_PRESENT___close_fd ++#if NV_IS_EXPORT_SYMBOL_PRESENT_close_fd ++ close_fd(fd); ++#elif NV_IS_EXPORT_SYMBOL_PRESENT___close_fd + __close_fd(current->files, fd); + #else + sys_close(fd); +diff --git kernel/nvidia/nvidia.Kbuild kernel/nvidia/nvidia.Kbuild +index 8fc929e..193e7b3 100644 +--- kernel/nvidia/nvidia.Kbuild ++++ kernel/nvidia/nvidia.Kbuild +@@ -173,6 +173,7 @@ NV_CONFTEST_SYMBOL_COMPILE_TESTS += is_export_symbol_present_tegra_dce_client_ip + NV_CONFTEST_SYMBOL_COMPILE_TESTS += is_export_symbol_present_dram_clk_to_mc_clk + NV_CONFTEST_SYMBOL_COMPILE_TESTS += is_export_symbol_present_get_dram_num_channels + NV_CONFTEST_SYMBOL_COMPILE_TESTS += is_export_symbol_present_tegra_dram_types ++NV_CONFTEST_SYMBOL_COMPILE_TESTS += is_export_symbol_present_close_fd + + NV_CONFTEST_TYPE_COMPILE_TESTS += acpi_op_remove + NV_CONFTEST_TYPE_COMPILE_TESTS += outer_flush_all +@@ -210,3 +211,6 @@ NV_CONFTEST_GENERIC_COMPILE_TESTS += get_user_pages + NV_CONFTEST_GENERIC_COMPILE_TESTS += get_user_pages_remote + NV_CONFTEST_GENERIC_COMPILE_TESTS += pm_runtime_available + NV_CONFTEST_GENERIC_COMPILE_TESTS += vm_fault_t ++ ++# vgpu unlock ++ldflags-y += -T /opt/vgpu_unlock/kern.ld +diff --git init-scripts/systemd/nvidia-vgpud.service init-scripts/systemd/nvidia-vgpud.service +index 2da8ff5..7b58195 100644 +--- init-scripts/systemd/nvidia-vgpud.service ++++ init-scripts/systemd/nvidia-vgpud.service +@@ -13,8 +13,9 @@ Wants=syslog.target + + [Service] + Type=forking +-ExecStart=/usr/bin/nvidia-vgpud ++ExecStart=/opt/vgpu_unlock/vgpu_unlock /usr/bin/nvidia-vgpud + ExecStopPost=/bin/rm -rf /var/run/nvidia-vgpud ++Environment="__RM_NO_VERSION_CHECK=1" + + [Install] + WantedBy=multi-user.target +diff --git init-scripts/systemd/nvidia-vgpu-mgr.service init-scripts/systemd/nvidia-vgpu-mgr.service +index 24276b3..b50e672 100644 +--- init-scripts/systemd/nvidia-vgpu-mgr.service ++++ init-scripts/systemd/nvidia-vgpu-mgr.service +@@ -14,8 +14,9 @@ Wants=syslog.target + [Service] + Type=forking + KillMode=process +-ExecStart=/usr/bin/nvidia-vgpu-mgr ++ExecStart=/opt/vgpu_unlock/vgpu_unlock /usr/bin/nvidia-vgpu-mgr + ExecStopPost=/bin/rm -rf /var/run/nvidia-vgpu-mgr ++Environment="__RM_NO_VERSION_CHECK=1" + + [Install] + WantedBy=multi-user.target +diff --git kernel/nvidia-vgpu-vfio/nvidia-vgpu-vfio.c kernel/nvidia-vgpu-vfio/nvidia-vgpu-vfio.c +index a3cc030..22666a2 100644 +--- kernel/nvidia-vgpu-vfio/nvidia-vgpu-vfio.c ++++ kernel/nvidia-vgpu-vfio/nvidia-vgpu-vfio.c +@@ -2526,14 +2526,18 @@ static irqreturn_t vgpu_msix_handler(int irq, void *arg) + + if (pfile && pfile->f_op && pfile->f_op->write) + { +- old_fs = get_fs(); +- set_fs(KERNEL_DS); ++ #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0)) ++ old_fs = get_fs(); ++ set_fs(KERNEL_DS); ++ #endif + + NV_SAVE_FLAGS(eflags); + ret = pfile->f_op->write(pfile, (char *)&val, sizeof(val), &offset); + NV_RESTORE_FLAGS(eflags); + +- set_fs(old_fs); ++ #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0)) ++ set_fs(old_fs); ++ #endif + } + + return IRQ_HANDLED; +@@ -2816,8 +2820,10 @@ NV_STATUS nv_vgpu_inject_interrupt(void *vgpuRef) + } + NV_SPIN_UNLOCK_IRQRESTORE(&vgpu_dev->intr_info_lock, eflags); + +- old_fs = get_fs(); +- set_fs(KERNEL_DS); ++ #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0)) ++ old_fs = get_fs(); ++ set_fs(KERNEL_DS); ++ #endif + + if (pfile->f_op && pfile->f_op->write) + ret = pfile->f_op->write(pfile, (char *)&val, sizeof(val), &offset); +@@ -2827,7 +2833,9 @@ NV_STATUS nv_vgpu_inject_interrupt(void *vgpuRef) + if (ret < 0) + status = NV_ERR_INVALID_STATE; + +- set_fs(old_fs); ++ #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0)) ++ set_fs(old_fs); ++ #endif + + return status; + } +diff --git kernel/nvidia/os-interface.c kernel/nvidia/os-interface.c +index 1484143..fb56ffc 100644 +--- kernel/nvidia/os-interface.c ++++ kernel/nvidia/os-interface.c +@@ -16,7 +16,7 @@ + + #include "nv-time.h" + +- ++#include "/opt/vgpu_unlock/vgpu_unlock_hooks.c" + + +