Skip to content

Instantly share code, notes, and snippets.

@kernelOfTruth
Last active February 20, 2018 17:57
Show Gist options
  • Select an option

  • Save kernelOfTruth/8be4f6295309e248a30ecb1477e9ab07 to your computer and use it in GitHub Desktop.

Select an option

Save kernelOfTruth/8be4f6295309e248a30ecb1477e9ab07 to your computer and use it in GitHub Desktop.
Patch [use patch -R] to make proprietary linux nvidia driver 370.28 compatible with v4.9-rt1 kernel, change several of the module_license entries to make it "future-proof" for newer kernels [for users only ! non-distribution !]
diff -Nruad nvidia-drivers-370.28-r1/work/kernel/common/inc/nv-mm.h nvidia-drivers-370.28-r1_orig/work/kernel/common/inc/nv-mm.h
--- nvidia-drivers-370.28-r1/work/kernel/common/inc/nv-mm.h 2016-12-29 14:16:47.503650077 +0100
+++ nvidia-drivers-370.28-r1_orig/work/kernel/common/inc/nv-mm.h 2016-09-02 03:32:09.000000000 +0200
@@ -45,8 +45,8 @@
#define NV_GET_USER_PAGES get_user_pages
#define NV_GET_USER_PAGES_REMOTE get_user_pages_remote
#else
- #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)
+ #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)
#define NV_GET_USER_PAGES_REMOTE get_user_pages
#endif
diff -Nruad nvidia-drivers-370.28-r1/work/kernel/nvidia/os-mlock.c nvidia-drivers-370.28-r1_orig/work/kernel/nvidia/os-mlock.c
--- nvidia-drivers-370.28-r1/work/kernel/nvidia/os-mlock.c 2016-12-29 14:17:10.098647831 +0100
+++ nvidia-drivers-370.28-r1_orig/work/kernel/nvidia/os-mlock.c 2016-09-02 03:32:09.000000000 +0200
@@ -117,7 +117,7 @@
down_read(&mm->mmap_sem);
ret = NV_GET_USER_PAGES((unsigned long)address,
- page_count, write ? FOLL_WRITE : 0, user_pages, NULL);
+ page_count, write, force, user_pages, NULL);
up_read(&mm->mmap_sem);
pinned = ret;
diff -Nruad nvidia-drivers-370.28-r1/work/kernel/nvidia-drm/nvidia-drm-linux.c nvidia-drivers-370.28-r1_orig/work/kernel/nvidia-drm/nvidia-drm-linux.c
--- nvidia-drivers-370.28-r1/work/kernel/nvidia-drm/nvidia-drm-linux.c 2016-12-29 15:09:41.947334491 +0100
+++ nvidia-drivers-370.28-r1_orig/work/kernel/nvidia-drm/nvidia-drm-linux.c 2016-09-02 03:33:06.000000000 +0200
@@ -137,7 +137,7 @@
down_read(&mm->mmap_sem);
- pages_pinned = NV_GET_USER_PAGES(address, pages_count, write ? FOLL_WRITE :0,
+ pages_pinned = NV_GET_USER_PAGES(address, pages_count, write, force,
user_pages, NULL);
up_read(&mm->mmap_sem);
@@ -221,7 +221,7 @@
module_exit(nv_linux_drm_exit);
#if defined(MODULE_LICENSE)
- MODULE_LICENSE("GPL");
+ MODULE_LICENSE("MIT");
#endif
#if defined(MODULE_INFO)
MODULE_INFO(supported, "external");
diff -Nruad nvidia-drivers-370.28-r1/work/kernel/nvidia-drm/nvidia-drm-mmap.c nvidia-drivers-370.28-r1_orig/work/kernel/nvidia-drm/nvidia-drm-mmap.c
--- nvidia-drivers-370.28-r1/work/kernel/nvidia-drm/nvidia-drm-mmap.c 2016-12-29 14:18:12.526641625 +0100
+++ nvidia-drivers-370.28-r1_orig/work/kernel/nvidia-drm/nvidia-drm-mmap.c 2016-09-02 03:33:06.000000000 +0200
@@ -113,7 +113,7 @@
/* Check the caller has been granted access to the buffer object */
- if (!drm_vma_node_is_allowed(&gem->vma_node, (struct drm_file*)filp))
+ if (!drm_vma_node_is_allowed(&gem->vma_node, filp))
{
ret = -EACCES;
diff -Nruad nvidia-drivers-370.28-r1/work/kernel/nvidia-modeset/nvidia-modeset-linux.c nvidia-drivers-370.28-r1_orig/work/kernel/nvidia-modeset/nvidia-modeset-linux.c
--- nvidia-drivers-370.28-r1/work/kernel/nvidia-modeset/nvidia-modeset-linux.c 2016-12-29 15:09:20.404336633 +0100
+++ nvidia-drivers-370.28-r1_orig/work/kernel/nvidia-modeset/nvidia-modeset-linux.c 2016-09-02 03:33:06.000000000 +0200
@@ -1248,7 +1248,7 @@
module_exit(nvkms_exit);
#if defined(MODULE_LICENSE)
- MODULE_LICENSE("GPL");
+ MODULE_LICENSE("NVIDIA");
#endif
#if defined(MODULE_INFO)
MODULE_INFO(supported, "external");
diff -Nruad nvidia-drivers-370.28-r1/work/kernel/nvidia-uvm/uvm8_tools.c nvidia-drivers-370.28-r1_orig/work/kernel/nvidia-uvm/uvm8_tools.c
--- nvidia-drivers-370.28-r1/work/kernel/nvidia-uvm/uvm8_tools.c 2016-12-29 14:17:53.251643541 +0100
+++ nvidia-drivers-370.28-r1_orig/work/kernel/nvidia-uvm/uvm8_tools.c 2016-09-02 03:30:48.000000000 +0200
@@ -224,7 +224,7 @@
}
down_read(&current->mm->mmap_sem);
- ret = NV_GET_USER_PAGES(user_va, num_pages, 1 ? FOLL_WRITE : 0, *pages, vmas);
+ ret = NV_GET_USER_PAGES(user_va, num_pages, 1, 0, *pages, vmas);
up_read(&current->mm->mmap_sem);
if (ret != num_pages) {
status = NV_ERR_INVALID_ARGUMENT;
diff -Nruad nvidia-drivers-370.28-r1/work/kernel/nvidia-uvm/uvm_common.c nvidia-drivers-370.28-r1_orig/work/kernel/nvidia-uvm/uvm_common.c
--- nvidia-drivers-370.28-r1/work/kernel/nvidia-uvm/uvm_common.c 2016-12-29 15:08:05.620344067 +0100
+++ nvidia-drivers-370.28-r1_orig/work/kernel/nvidia-uvm/uvm_common.c 2016-09-02 03:30:48.000000000 +0200
@@ -550,5 +550,5 @@
MODULE_PARM_DESC(uvm_enable_builtin_tests,
"Enable the UVM built-in tests. (This is a security risk)");
-MODULE_LICENSE("GPL");
+MODULE_LICENSE("MIT");
MODULE_INFO(supported, "external");
diff -Nruad nvidia-drivers-370.28-r1/work/kernel/nvidia-uvm/uvm_unsupported.c nvidia-drivers-370.28-r1_orig/work/kernel/nvidia-uvm/uvm_unsupported.c
--- nvidia-drivers-370.28-r1/work/kernel/nvidia-uvm/uvm_unsupported.c 2016-12-29 15:08:40.946340555 +0100
+++ nvidia-drivers-370.28-r1_orig/work/kernel/nvidia-uvm/uvm_unsupported.c 2016-09-02 03:30:48.000000000 +0200
@@ -171,6 +171,6 @@
module_init(uvm_unsupported_module_init);
module_exit(uvm_unsupported_exit);
-MODULE_LICENSE("GPL");
+MODULE_LICENSE("MIT");
MODULE_INFO(supported, "external");
@kernelOfTruth
Copy link
Copy Markdown
Author

kernelOfTruth commented Dec 29, 2016

actually the inverse of the patch is correct 😆

just noticed that now after creating it ^^

so apply it via

patch -p1 -R < ...

Before compiling it with rt-kernel

the following command

export IGNORE_PREEMPT_RT_PRESENCE=1

needs to be executed

@aketcham0691
Copy link
Copy Markdown

aketcham0691 commented Feb 20, 2018

Hello! Would you kindly explain how to apply the patch? I'm not sure what goes at "..." for the patch line.
Any explicit command lines would be greatly appreciated!
Thank you!

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