summary refs log tree commit diff
path: root/pkgs/os-specific/linux/nvidia-x11
diff options
context:
space:
mode:
authorVladimír Čunát <vcunat@gmail.com>2017-11-30 12:03:47 +0100
committerVladimír Čunát <vcunat@gmail.com>2017-11-30 12:06:27 +0100
commite9550f290c7536e0c23ebb6da146fb66b37197d3 (patch)
tree87031351ce228f382e2a62386de4cc0f60df841d /pkgs/os-specific/linux/nvidia-x11
parent163315f5e2be094948e9c8c1aed9d24dd3bac5a2 (diff)
downloadnixlib-e9550f290c7536e0c23ebb6da146fb66b37197d3.tar
nixlib-e9550f290c7536e0c23ebb6da146fb66b37197d3.tar.gz
nixlib-e9550f290c7536e0c23ebb6da146fb66b37197d3.tar.bz2
nixlib-e9550f290c7536e0c23ebb6da146fb66b37197d3.tar.lz
nixlib-e9550f290c7536e0c23ebb6da146fb66b37197d3.tar.xz
nixlib-e9550f290c7536e0c23ebb6da146fb66b37197d3.tar.zst
nixlib-e9550f290c7536e0c23ebb6da146fb66b37197d3.zip
nvidia_x11_legacy340: add another patch
I *suspect* that NV_VM_OPERATIONS_STRUCT_HAS_FAULT isn't detected
in our case for some reason, so this patch doesn't make a difference.
In any case, the patch seems unlikely to make anything worse.
Diffstat (limited to 'pkgs/os-specific/linux/nvidia-x11')
-rw-r--r--pkgs/os-specific/linux/nvidia-x11/default.nix2
-rw-r--r--pkgs/os-specific/linux/nvidia-x11/vm_operations_struct-fault.patch31
2 files changed, 32 insertions, 1 deletions
diff --git a/pkgs/os-specific/linux/nvidia-x11/default.nix b/pkgs/os-specific/linux/nvidia-x11/default.nix
index 41f83bfda800..bfbaa2db3b0c 100644
--- a/pkgs/os-specific/linux/nvidia-x11/default.nix
+++ b/pkgs/os-specific/linux/nvidia-x11/default.nix
@@ -41,7 +41,7 @@ in
     persistencedSha256 = "0zqws2vsrxbxhv6z0nn2galnghcsilcn3s0f70bpm6jqj9wzy7x8";
     useGLVND = false;
 
-    patches = maybePatch_drm_legacy;
+    patches = maybePatch_drm_legacy ++ [ ./vm_operations_struct-fault.patch ];
   };
 
   legacy_304 = generic {
diff --git a/pkgs/os-specific/linux/nvidia-x11/vm_operations_struct-fault.patch b/pkgs/os-specific/linux/nvidia-x11/vm_operations_struct-fault.patch
new file mode 100644
index 000000000000..6ce5c1205e2d
--- /dev/null
+++ b/pkgs/os-specific/linux/nvidia-x11/vm_operations_struct-fault.patch
@@ -0,0 +1,31 @@
+https://devtalk.nvidia.com/default/topic/1025051/fully-working-patches-2-of-them-for-nvidia-driver-340-104-compiler-installer-file-and-linux-kernels-4-13-amp-4-14/?offset=5
+--- a/kernel/uvm/nvidia_uvm_lite.c
++++ b/kernel/uvm/nvidia_uvm_lite.c
+@@ -818,8 +818,15 @@ done:
+ }
+
+ #if defined(NV_VM_OPERATIONS_STRUCT_HAS_FAULT)
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0)
+ int _fault(struct vm_area_struct *vma, struct vm_fault *vmf)
++#else
++int _fault(struct vm_fault *vmf)
++#endif
+ {
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
++    struct vm_area_struct *vma = vmf->vma;
++#endif
+ #if defined(NV_VM_FAULT_HAS_ADDRESS)
+     unsigned long vaddr = vmf->address;
+ #else
+@@ -866,7 +873,11 @@ static struct vm_operations_struct uvmlite_vma_ops =
+ // it's dealing with anonymous mapping (see handle_pte_fault).
+ //
+ #if defined(NV_VM_OPERATIONS_STRUCT_HAS_FAULT)
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0)
+ int _sigbus_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
++#else
++int _sigbus_fault(struct vm_fault *vmf)
++#endif
+ {
+     vmf->page = NULL;
+     return VM_FAULT_SIGBUS;