File 0007-fix-5.14.patch of Package nvidia-gfxG03

diff -Naur NVIDIA-Linux-x86_64-340.108-old/kernel/conftest.sh NVIDIA-Linux-x86_64-340.108-new/kernel/conftest.sh
--- NVIDIA-Linux-x86_64-340.108-old/kernel/conftest.sh	2021-05-24 20:08:18.743742335 +0200
+++ NVIDIA-Linux-x86_64-340.108-new/kernel/conftest.sh	2021-05-24 20:13:18.019314390 +0200
@@ -1578,21 +1578,21 @@
             #include <drm/drm_drv.h>
             #endif
 
-            #if defined(NV_DRM_DRM_PRIME_H_PRESENT)
-            #include <drm/drm_prime.h>
-            #endif
-
             #if !defined(CONFIG_DRM) && !defined(CONFIG_DRM_MODULE)
             #error DRM not enabled
             #endif
+
             void conftest_drm_available(void) {
                 struct drm_driver drv;
-                drv.gem_prime_pin = 0;
-                drv.gem_prime_get_sg_table = 0;
-                drv.gem_prime_vmap = 0;
-                drv.gem_prime_vunmap = 0;
-                (void)drm_gem_prime_import;
-                (void)drm_gem_prime_export;
+
+                /* 2013-10-02 1bb72532ac260a2d3982b40bdd4c936d779d0d16 */
+                (void)drm_dev_alloc;
+
+                /* 2013-10-02 c22f0ace1926da399d9a16dfaf09174c1b03594c */
+                (void)drm_dev_register;
+
+                /* 2013-10-02 c3a49737ef7db0bdd4fcf6cf0b7140a883e32b2a */
+                (void)drm_dev_unregister;
             }"
 
             compile_check_conftest "$CODE" "NV_DRM_AVAILABLE" "" "generic"
diff -Naur NVIDIA-Linux-x86_64-340.108-old/kernel/nv-drm.c NVIDIA-Linux-x86_64-340.108-new/kernel/nv-drm.c
--- NVIDIA-Linux-x86_64-340.108-old/kernel/nv-drm.c	2021-05-24 20:08:18.779739237 +0200
+++ NVIDIA-Linux-x86_64-340.108-new/kernel/nv-drm.c	2021-05-24 20:42:13.443288819 +0200
@@ -52,7 +52,9 @@
 #define nv_drm_pci_exit drm_legacy_pci_exit
 #elif LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0)
 
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 7, 0)
+#include "linux/dma-buf.h"
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 7, 0) && LINUX_VERSION_CODE < KERNEL_VERSION(5, 14, 0)
 #include <drm/drm_agpsupport.h>
 
 struct drm_agp_mem {
@@ -168,8 +170,10 @@
 
 	/* No locking needed since shadow-attach is single-threaded since it may
 	 * only be called from the per-driver module init hook. */
+#if LINUX_VERSION_CODE <= KERNEL_VERSION(5, 10, 0)
 	if (drm_core_check_feature(dev, DRIVER_LEGACY))
 		list_add_tail(&dev->legacy_dev_list, &driver->legacy_dev_list);
+#endif
 
 	return 0;
 
@@ -193,8 +197,10 @@
 	if (WARN_ON(!(driver->driver_features & DRIVER_LEGACY)))
 		return -EINVAL;
 
+#if LINUX_VERSION_CODE <= KERNEL_VERSION(5, 10, 0)
 	/* If not using KMS, fall back to stealth mode manual scanning. */
 	INIT_LIST_HEAD(&driver->legacy_dev_list);
+#endif
 	for (i = 0; pdriver->id_table[i].vendor != 0; i++) {
 		pid = &pdriver->id_table[i];
 
@@ -219,7 +219,9 @@
 
 			/* stealth mode requires a manual probe */
 			pci_dev_get(pdev);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 14, 0)
 			drm_get_pci_dev(pdev, pid, driver);
+#endif
 		}
 	}
 	return 0;
@@ -227,11 +233,13 @@
 	if (!(driver->driver_features & DRIVER_LEGACY)) {
 		WARN_ON(1);
 	} else {
+#if LINUX_VERSION_CODE <= KERNEL_VERSION(5, 10, 0)
 		list_for_each_entry_safe(dev, tmp, &driver->legacy_dev_list,
 					 legacy_dev_list) {
 			list_del(&dev->legacy_dev_list);
 			drm_put_dev(dev);
 		}
+#endif
 	}
 	DRM_INFO("Module unloaded\n");
 }
@@ -254,6 +262,8 @@
 {
     nv_linux_state_t *nvl;
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 14, 0)
+    /* dev->pdev is no longer avaialble in 5.14 */
     for (nvl = nv_linux_devices; nvl != NULL; nvl = nvl->next)
     {
         if (nvl->dev == dev->pdev)
@@ -262,6 +272,7 @@
             return 0;
         }
     }
+#endif
 
     return -ENODEV;
 }
@@ -278,6 +289,8 @@
 {
     nv_linux_state_t *nvl;
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 14, 0)
+    /* dev->pdev is no longer avaialble in 5.14 */
     for (nvl = nv_linux_devices; nvl != NULL; nvl = nvl->next)
     {
         if (nvl->dev == dev->pdev)
@@ -287,6 +300,7 @@
             return 0;
         }
     }
+#endif
 
     return -ENODEV;
 }
@@ -359,6 +373,39 @@
     .llseek = noop_llseek,
 };
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 11, 0)
+struct sg_table *nv_drm_gem_prime_get_sg_table(struct drm_gem_object *gem)
+{
+    return nv_gem_prime_get_sg_table(gem);
+}
+
+static int nv_drm_gem_vmap(struct drm_gem_object *gem,
+                           struct dma_buf_map *map)
+{
+    map->vaddr = nv_gem_prime_vmap(gem);
+    if (map->vaddr == NULL) {
+        return -ENOMEM;
+    }
+    map->is_iomem = true;
+    return 0;
+}
+
+static void nv_drm_gem_vunmap(struct drm_gem_object *gem,
+                              struct dma_buf_map *map)
+{
+    nv_gem_prime_vunmap(gem, map->vaddr);
+    map->vaddr = NULL;
+}
+
+static struct drm_gem_object_funcs nv_drm_gem_object_funcs = {
+  .free = nv_gem_free,
+  .export = drm_gem_prime_export,
+  .get_sg_table = nv_drm_gem_prime_get_sg_table,
+  .vmap = nv_drm_gem_vmap,
+  .vunmap = nv_drm_gem_vunmap,
+};
+#endif
+
 static struct drm_driver nv_drm_driver = {
 
     .driver_features = DRIVER_GEM
@@ -377,17 +424,19 @@
     .set_busid = drm_pci_set_busid,
 #endif
 
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 9, 0)
-    .gem_free_object_unlocked = nv_gem_free,
-#else
+#if LINUX_VERSION_CODE <= KERNEL_VERSION(5, 8, 0)
     .gem_free_object = nv_gem_free,
+#elif LINUX_VERSION_CODE <= KERNEL_VERSION(5, 10, 0)
+    .gem_free_object_unlocked = nv_gem_free,
 #endif
 
     .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
+#if LINUX_VERSION_CODE <= KERNEL_VERSION(5, 10, 0)
     .gem_prime_export = drm_gem_prime_export,
     .gem_prime_get_sg_table = nv_gem_prime_get_sg_table,
     .gem_prime_vmap = nv_gem_prime_vmap,
     .gem_prime_vunmap = nv_gem_prime_vunmap,
+#endif
 
     .name = "nvidia-drm",
     .desc = "NVIDIA DRM driver",
diff -Naur NVIDIA-Linux-x86_64-340.108-old/kernel/nv-linux.h NVIDIA-Linux-x86_64-340.108-new/kernel/nv-linux.h
--- NVIDIA-Linux-x86_64-340.108-old/kernel/nv-linux.h	2021-05-24 20:08:18.775739581 +0200
+++ NVIDIA-Linux-x86_64-340.108-new/kernel/nv-linux.h	2021-05-24 20:09:18.748287771 +0200
@@ -119,7 +119,9 @@
 #include <asm/tlbflush.h>           /* flush_tlb(), flush_tlb_all()     */
 #include <linux/cpu.h>              /* CPU hotplug support              */
 #endif
-#include <asm/kmap_types.h>         /* page table entry lookup          */
+#if LINUX_VERSION_CODE	< KERNEL_VERSION(5, 11,	0)
+	#include <asm/kmap_types.h>         /* page table entry lookup          */
+#endif
 
 #include <linux/pci.h>              /* pci_find_class, etc              */
 #include <linux/interrupt.h>        /* tasklets, interrupt helpers      */
diff -Naur NVIDIA-Linux-x86_64-340.108-old/kernel/uvm/nvidia_uvm_linux.h NVIDIA-Linux-x86_64-340.108-new/kernel/uvm/nvidia_uvm_linux.h
--- NVIDIA-Linux-x86_64-340.108-old/kernel/uvm/nvidia_uvm_linux.h	2021-05-24 20:08:18.775739581 +0200
+++ NVIDIA-Linux-x86_64-340.108-new/kernel/uvm/nvidia_uvm_linux.h	2021-05-24 20:09:18.749287739 +0200
@@ -141,7 +141,9 @@
 #if !defined(NV_VMWARE)
 #include <asm/tlbflush.h>           /* flush_tlb(), flush_tlb_all()     */
 #endif
-#include <asm/kmap_types.h>         /* page table entry lookup          */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 11, 0)
+	#include <asm/kmap_types.h>         /* page table entry lookup          */
+#endif
 
 #include <linux/interrupt.h>        /* tasklets, interrupt helpers      */
 #include <linux/timer.h>

diff -Naur NVIDIA-Linux-x86_64-340.108-old/kernel/os-interface.c NVIDIA-Linux-x86_64-340.108-new/kernel/os-interface.c
--- NVIDIA-Linux-x86_64-340.108-old/kernel/os-interface.c	2021-09-12 11:21:27.916526901 +0200
+++ NVIDIA-Linux-x86_64-340.108-new/kernel/os-interface.c	2021-09-12 11:17:40.059864352 +0200
@@ -549,7 +549,13 @@
         // the requested timeout has expired, loop until less
         // than a jiffie of the desired delay remains.
         //
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 14, 0)
+        current->__state = TASK_INTERRUPTIBLE;
+#else
         current->state = TASK_INTERRUPTIBLE;
+#endif
+
         do
         {
             schedule_timeout(jiffies);
openSUSE Build Service is sponsored by