HEX
Server: LiteSpeed
System: Linux houston.panomity.com 6.8.0-100-generic #100-Ubuntu SMP PREEMPT_DYNAMIC Tue Jan 13 16:40:06 UTC 2026 x86_64
User: nudepix (1011)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //usr/src/nvidia-srv-580.173.02/patches/buildfix_kernel_4.9.patch
From b112968eba6e1327a9a224729ad13367db376644 Mon Sep 17 00:00:00 2001
From: Alberto Milone <alberto.milone@canonical.com>
Date: Mon, 21 Nov 2016 15:57:29 +0100
Subject: [PATCH 1/1] Add support for Linux 4.9

---
 common/inc/nv-mm.h            | 7 +++++++
 nvidia-drm/nvidia-drm-linux.c | 4 ++++
 nvidia-drm/nvidia-drm-mmap.c  | 6 ++++++
 nvidia/os-mlock.c             | 4 ++++
 5 files changed, 25 insertions(+)

diff --git a/common/inc/nv-mm.h b/common/inc/nv-mm.h
index ade903b..7cbf1cb 100644
--- a/common/inc/nv-mm.h
+++ b/common/inc/nv-mm.h
@@ -41,12 +41,19 @@
 *  callback.
  */
 
+#include <linux/version.h>
+
 #if defined(NV_GET_USER_PAGES_REMOTE_PRESENT)
     #define NV_GET_USER_PAGES           get_user_pages
     #define NV_GET_USER_PAGES_REMOTE    get_user_pages_remote
 #else
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0)
+    #define NV_GET_USER_PAGES(start, nr_pages, gup_flags, pages, vmas) \
+        get_user_pages(current, current->mm, start, nr_pages, gup_flags, pages, vmas)
+#else
     #define NV_GET_USER_PAGES(start, nr_pages, write, force, pages, vmas) \
         get_user_pages(current, current->mm, start, nr_pages, write, force, pages, vmas)
+#endif
 
     #define NV_GET_USER_PAGES_REMOTE    get_user_pages
 #endif
diff --git a/nvidia-drm/nvidia-drm-linux.c b/nvidia-drm/nvidia-drm-linux.c
index 82ae5c9..ee7dd69 100644
--- a/nvidia-drm/nvidia-drm-linux.c
+++ b/nvidia-drm/nvidia-drm-linux.c
@@ -137,7 +137,11 @@ int nvidia_drm_lock_user_pages(unsigned long address,
 
     down_read(&mm->mmap_sem);
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0)
+    pages_pinned = NV_GET_USER_PAGES(address, pages_count, write ? FOLL_WRITE :0,
+#else
     pages_pinned = NV_GET_USER_PAGES(address, pages_count, write, force,
+#endif
                                      user_pages, NULL);
     up_read(&mm->mmap_sem);
 
diff --git a/nvidia-drm/nvidia-drm-mmap.c b/nvidia-drm/nvidia-drm-mmap.c
index 9909e69..0f525ec 100644
--- a/nvidia-drm/nvidia-drm-mmap.c
+++ b/nvidia-drm/nvidia-drm-mmap.c
@@ -20,6 +20,8 @@
  * DEALINGS IN THE SOFTWARE.
  */
 
+#include <linux/version.h>
+
 #include "conftest.h" /* NV_DRM_ATOMIC_MODESET_AVAILABLE */
 
 #if defined(NV_DRM_ATOMIC_MODESET_AVAILABLE)
@@ -113,7 +115,11 @@ int nvidia_drm_gem_mmap(struct file *filp, struct vm_area_struct *vma)
 
     /* Check the caller has been granted access to the buffer object */
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0)
+    if (!drm_vma_node_is_allowed(&gem->vma_node, (struct drm_file*)filp))
+#else
     if (!drm_vma_node_is_allowed(&gem->vma_node, filp))
+#endif
     {
         ret = -EACCES;
 
diff --git a/nvidia/os-mlock.c b/nvidia/os-mlock.c
index 3074f77..bb2131d 100644
--- a/nvidia/os-mlock.c
+++ b/nvidia/os-mlock.c
@@ -117,7 +117,11 @@ NV_STATUS NV_API_CALL os_lock_user_pages(
 
     down_read(&mm->mmap_sem);
     ret = NV_GET_USER_PAGES((unsigned long)address,
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0)
+                            page_count, write ? FOLL_WRITE : 0, user_pages, NULL);
+#else
                             page_count, write, force, user_pages, NULL);
+#endif
     up_read(&mm->mmap_sem);
     pinned = ret;
 
-- 
2.7.4