Skip to content

Instantly share code, notes, and snippets.

@joanbm
Created March 1, 2021 16:29
Show Gist options
  • Save joanbm/7a034ac4b79396c3841040e410ef7e91 to your computer and use it in GitHub Desktop.
Save joanbm/7a034ac4b79396c3841040e410ef7e91 to your computer and use it in GitHub Desktop.
Tentative fix for NVIDIA 460.56 driver for Linux 5.12-rc1
From a2963d47c009bcbdc98907f70717d9d49425f6db Mon Sep 17 00:00:00 2001
From: Joan Bruguera <[email protected]>
Date: Mon, 1 Mar 2021 17:25:15 +0100
Subject: [PATCH] Tentative fix for NVIDIA 460.56 driver for Linux 5.12-rc1
---
nvidia-drm/nvidia-drm-drv.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/nvidia-drm/nvidia-drm-drv.c b/nvidia-drm/nvidia-drm-drv.c
index 9582531..c23a338 100644
--- a/nvidia-drm/nvidia-drm-drv.c
+++ b/nvidia-drm/nvidia-drm-drv.c
@@ -20,6 +20,7 @@
* DEALINGS IN THE SOFTWARE.
*/
+#include <linux/version.h>
#include "nvidia-drm-conftest.h" /* NV_DRM_AVAILABLE and NV_DRM_DRM_GEM_H_PRESENT */
#include "nvidia-drm-priv.h"
@@ -796,6 +797,13 @@ static struct drm_driver nv_drm_driver = {
#endif
};
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 12, 0))
+// Reimport trivial forwarder function deleted in commit "drm: Don't export the drm_gem_dumb_destroy() function" (file drivers/gpu/drm/drm_gem.c)
+static int nv_drm_gem_dumb_destroy(struct drm_file *file, struct drm_device *dev, u32 handle)
+{
+ return drm_gem_handle_delete(file, handle);
+}
+#endif
/*
* Update the global nv_drm_driver for the intended features.
@@ -819,7 +827,11 @@ static void nv_drm_update_drm_driver_features(void)
nv_drm_driver.dumb_create = nv_drm_dumb_create;
nv_drm_driver.dumb_map_offset = nv_drm_dumb_map_offset;
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 12, 0))
nv_drm_driver.dumb_destroy = drm_gem_dumb_destroy;
+#else
+ nv_drm_driver.dumb_destroy = nv_drm_gem_dumb_destroy;
+#endif
#endif /* NV_DRM_ATOMIC_MODESET_AVAILABLE */
}
--
2.30.1
@DAC324
Copy link

DAC324 commented Mar 16, 2021

Looks like at least the line numbers have changed in the meantime.
Hence, the patch for nvidia-drm-drv.c had to be updated in order to allow the patches to be applied:

@@ -20,6 +20,7 @@
  * DEALINGS IN THE SOFTWARE.
  */
 
+#include <linux/version.h>
 #include "nvidia-drm-conftest.h" /* NV_DRM_AVAILABLE and NV_DRM_DRM_GEM_H_PRESENT */
 
 #include "nvidia-drm-priv.h"
@@ -700,10 +701,10 @@
     .num_ioctls             = ARRAY_SIZE(nv_drm_ioctls),
 
     .prime_handle_to_fd     = drm_gem_prime_handle_to_fd,
-    .gem_prime_export       = nv_drm_gem_prime_export,
-    .gem_prime_get_sg_table = nv_drm_gem_prime_get_sg_table,
-    .gem_prime_vmap         = nv_drm_gem_prime_vmap,
-    .gem_prime_vunmap       = nv_drm_gem_prime_vunmap,
+/*    .gem_prime_export       = nv_drm_gem_prime_export, */
+/*    .gem_prime_get_sg_table = nv_drm_gem_prime_get_sg_table, */
+/*    .gem_prime_vmap         = nv_drm_gem_prime_vmap,        */
+/*    .gem_prime_vunmap       = nv_drm_gem_prime_vunmap,     */
 
 #if defined(NV_DRM_DRIVER_HAS_GEM_PRIME_RES_OBJ)
     .gem_prime_res_obj      = nv_drm_gem_prime_res_obj,
@@ -730,10 +731,17 @@
 #if defined(NV_DRM_DRIVER_HAS_LEGACY_DEV_LIST)
     .legacy_dev_list        = LIST_HEAD_INIT(nv_drm_driver.legacy_dev_list),
 #else
-    .device_list            = LIST_HEAD_INIT(nv_drm_driver.device_list),
+   /* .device_list            = LIST_HEAD_INIT(nv_drm_driver.device_list),*/
 #endif
 };
 
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 12, 0))
+// Reimport trivial forwarder function deleted in commit "drm: Don't export the drm_gem_dumb_destroy() function" (file drivers/gpu/drm/drm_gem.c)
+static int nv_drm_gem_dumb_destroy(struct drm_file *file, struct drm_device *dev, u32 handle)
+{
+    return drm_gem_handle_delete(file, handle);
+}
+#endif
 
 /*
  * Update the global nv_drm_driver for the intended features.
@@ -757,9 +765,12 @@
 
     nv_drm_driver.dumb_create      = nv_drm_dumb_create;
     nv_drm_driver.dumb_map_offset  = nv_drm_dumb_map_offset;
-    nv_drm_driver.dumb_destroy     = drm_gem_dumb_destroy;
-
-    nv_drm_driver.gem_vm_ops       = &nv_drm_gem_vma_ops;
+    #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 12, 0))
+        nv_drm_driver.dumb_destroy     = drm_gem_dumb_destroy;
+    #else
+        nv_drm_driver.dumb_destroy     = nv_drm_gem_dumb_destroy;
+    #endif
+    /* nv_drm_driver.gem_vm_ops       = &nv_drm_gem_vma_ops; */
 #endif /* NV_DRM_ATOMIC_MODESET_AVAILABLE */
 }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment