Skip to content

Instantly share code, notes, and snippets.

@sujunmin
Created December 9, 2019 04:43
Show Gist options
  • Save sujunmin/eb55506bf01223fa6be24810c9e9400d to your computer and use it in GitHub Desktop.
Save sujunmin/eb55506bf01223fa6be24810c9e9400d to your computer and use it in GitHub Desktop.
Patch file for nvidia-legacy-390xx-390.116 for the linux kernel version 5.3.x
diff -Naur /tmp/nv/usr/src/nvidia-legacy-390xx-390.116/common/inc/nv-linux.h /usr/src/nvidia-legacy-390xx-390.116/common/inc/nv-linux.h
--- /tmp/nv/usr/src/nvidia-legacy-390xx-390.116/common/inc/nv-linux.h 2019-03-02 05:06:12.000000000 +0800
+++ /usr/src/nvidia-legacy-390xx-390.116/common/inc/nv-linux.h 2019-12-09 10:26:44.782636003 +0800
@@ -701,8 +701,8 @@
#elif (NV_ON_EACH_CPU_ARGUMENT_COUNT == 3)
#define NV_ON_EACH_CPU(func, info) \
({ \
- int __ret = on_each_cpu(func, info, 1); \
- __ret; \
+ on_each_cpu(func, info, 1); \
+ 0; \
})
#else
#error "NV_ON_EACH_CPU_ARGUMENT_COUNT value unrecognized!"
diff -Naur /tmp/nv/usr/src/nvidia-legacy-390xx-390.116/common/inc/nv-list-helpers.h /usr/src/nvidia-legacy-390xx-390.116/common/inc/nv-list-helpers.h
--- /tmp/nv/usr/src/nvidia-legacy-390xx-390.116/common/inc/nv-list-helpers.h 2019-01-28 00:12:19.000000000 +0800
+++ /usr/src/nvidia-legacy-390xx-390.116/common/inc/nv-list-helpers.h 2019-12-09 10:03:18.806524207 +0800
@@ -90,11 +90,9 @@
#define list_next_entry(pos, member) \
list_entry((pos)->member.next, typeof(*(pos)), member)
#endif
-
-static inline int list_is_first(const struct list_head *list,
+static inline int nv_list_is_first(const struct list_head *list,
const struct list_head *head)
{
return list->prev == head;
}
-
#endif // __NV_LIST_HELPERS_H__
diff -Naur /tmp/nv/usr/src/nvidia-legacy-390xx-390.116/conftest.sh /usr/src/nvidia-legacy-390xx-390.116/conftest.sh
--- /tmp/nv/usr/src/nvidia-legacy-390xx-390.116/conftest.sh 2019-03-02 05:06:12.000000000 +0800
+++ /usr/src/nvidia-legacy-390xx-390.116/conftest.sh 2019-12-09 10:33:36.422944835 +0800
@@ -107,6 +107,7 @@
FILES="$FILES drm/drm_atomic_uapi.h"
FILES="$FILES drm/drm_drv.h"
FILES="$FILES drm/drm_framebuffer.h"
+ FILES="$FILES drm/drm_probe_helper.h"
FILES="$FILES generated/autoconf.h"
FILES="$FILES generated/compile.h"
FILES="$FILES generated/utsrelease.h"
diff -Naur /tmp/nv/usr/src/nvidia-legacy-390xx-390.116/nvidia-drm/nvidia-drm-connector.c /usr/src/nvidia-legacy-390xx-390.116/nvidia-drm/nvidia-drm-connector.c
--- /tmp/nv/usr/src/nvidia-legacy-390xx-390.116/nvidia-drm/nvidia-drm-connector.c 2019-01-28 00:12:27.000000000 +0800
+++ /usr/src/nvidia-legacy-390xx-390.116/nvidia-drm/nvidia-drm-connector.c 2019-12-09 10:39:02.709535602 +0800
@@ -29,6 +29,7 @@
#include "nvidia-drm-connector.h"
#include "nvidia-drm-utils.h"
#include "nvidia-drm-encoder.h"
+#include <drm/drm_probe_helper.h>
#include <drm/drm_crtc_helper.h>
diff -Naur /tmp/nv/usr/src/nvidia-legacy-390xx-390.116/nvidia-drm/nvidia-drm-drv.c /usr/src/nvidia-legacy-390xx-390.116/nvidia-drm/nvidia-drm-drv.c
--- /tmp/nv/usr/src/nvidia-legacy-390xx-390.116/nvidia-drm/nvidia-drm-drv.c 2019-01-28 00:12:27.000000000 +0800
+++ /usr/src/nvidia-legacy-390xx-390.116/nvidia-drm/nvidia-drm-drv.c 2019-12-09 10:38:38.201040458 +0800
@@ -34,6 +34,7 @@
#include "nvidia-drm-helper.h"
#include "nvidia-drm-gem-nvkms-memory.h"
#include "nvidia-drm-gem-user-memory.h"
+#include <drm/drm_probe_helper.h>
#if defined(NV_DRM_AVAILABLE)
diff -Naur /tmp/nv/usr/src/nvidia-legacy-390xx-390.116/nvidia-drm/nvidia-drm-encoder.c /usr/src/nvidia-legacy-390xx-390.116/nvidia-drm/nvidia-drm-encoder.c
--- /tmp/nv/usr/src/nvidia-legacy-390xx-390.116/nvidia-drm/nvidia-drm-encoder.c 2019-01-28 00:12:27.000000000 +0800
+++ /usr/src/nvidia-legacy-390xx-390.116/nvidia-drm/nvidia-drm-encoder.c 2019-12-09 10:38:50.753294049 +0800
@@ -30,6 +30,7 @@
#include "nvidia-drm-connector.h"
#include "nvidia-drm-crtc.h"
#include "nvidia-drm-helper.h"
+#include <drm/drm_probe_helper.h>
#include <drm/drm_crtc_helper.h>
diff -Naur /tmp/nv/usr/src/nvidia-legacy-390xx-390.116/nvidia-drm/nvidia-drm-gem-nvkms-memory.c /usr/src/nvidia-legacy-390xx-390.116/nvidia-drm/nvidia-drm-gem-nvkms-memory.c
--- /tmp/nv/usr/src/nvidia-legacy-390xx-390.116/nvidia-drm/nvidia-drm-gem-nvkms-memory.c 2019-01-28 00:12:27.000000000 +0800
+++ /usr/src/nvidia-legacy-390xx-390.116/nvidia-drm/nvidia-drm-gem-nvkms-memory.c 2019-12-09 10:21:30.000291218 +0800
@@ -222,7 +222,7 @@
/* XXX Move these vma operations to os layer */
-static int __nv_drm_vma_fault(struct vm_area_struct *vma,
+static vm_fault_t __nv_drm_vma_fault(struct vm_area_struct *vma,
struct vm_fault *vmf)
{
unsigned long address = nv_page_fault_va(vmf);
@@ -230,7 +230,9 @@
struct nv_drm_gem_nvkms_memory *nv_nvkms_memory = to_nv_nvkms_memory(
to_nv_gem_object(gem));
unsigned long page_offset, pfn;
- int ret = -EINVAL;
+ //int ret = -EINVAL;
+
+ vm_fault_t ret = VM_FAULT_SIGBUS;
pfn = (unsigned long)(uintptr_t)nv_nvkms_memory->pPhysicalAddress;
pfn >>= PAGE_SHIFT;
@@ -268,7 +270,7 @@
*/
#if defined(NV_VM_OPS_FAULT_REMOVED_VMA_ARG)
-static int nv_drm_vma_fault(struct vm_fault *vmf)
+static vm_fault_t nv_drm_vma_fault(struct vm_fault *vmf)
{
return __nv_drm_vma_fault(vmf->vma, vmf);
}
diff -Naur /tmp/nv/usr/src/nvidia-legacy-390xx-390.116/nvidia-uvm/uvm8.c /usr/src/nvidia-legacy-390xx-390.116/nvidia-uvm/uvm8.c
--- /tmp/nv/usr/src/nvidia-legacy-390xx-390.116/nvidia-uvm/uvm8.c 2019-01-28 00:12:22.000000000 +0800
+++ /usr/src/nvidia-legacy-390xx-390.116/nvidia-uvm/uvm8.c 2019-12-09 10:23:17.026447179 +0800
@@ -166,13 +166,13 @@
// If a fault handler is not set, paths like handle_pte_fault in older kernels
// assume the memory is anonymous. That would make debugging this failure harder
// so we force it to fail instead.
-static int uvm_vm_fault_sigbus(struct vm_area_struct *vma, struct vm_fault *vmf)
+static vm_fault_t uvm_vm_fault_sigbus(struct vm_area_struct *vma, struct vm_fault *vmf)
{
UVM_DBG_PRINT_RL("Fault to address 0x%lx in disabled vma\n", nv_page_fault_va(vmf));
return VM_FAULT_SIGBUS;
}
-static int uvm_vm_fault_sigbus_wrapper(struct vm_fault *vmf)
+static vm_fault_t uvm_vm_fault_sigbus_wrapper(struct vm_fault *vmf)
{
#if defined(NV_VM_OPS_FAULT_REMOVED_VMA_ARG)
return uvm_vm_fault_sigbus(vmf->vma, vmf);
@@ -390,7 +390,7 @@
uvm_record_unlock_mmap_sem_write(&current->mm->mmap_sem);
}
-static int uvm_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
+static vm_fault_t uvm_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
{
uvm_va_space_t *va_space = uvm_va_space_get(vma->vm_file);
uvm_va_block_t *va_block;
@@ -507,7 +507,7 @@
}
}
-static int uvm_vm_fault_wrapper(struct vm_fault *vmf)
+static vm_fault_t uvm_vm_fault_wrapper(struct vm_fault *vmf)
{
#if defined(NV_VM_OPS_FAULT_REMOVED_VMA_ARG)
return uvm_vm_fault(vmf->vma, vmf);
diff -Naur /tmp/nv/usr/src/nvidia-legacy-390xx-390.116/nvidia-uvm/uvm8_tools.c /usr/src/nvidia-legacy-390xx-390.116/nvidia-uvm/uvm8_tools.c
--- /tmp/nv/usr/src/nvidia-legacy-390xx-390.116/nvidia-uvm/uvm8_tools.c 2019-01-28 00:12:22.000000000 +0800
+++ /usr/src/nvidia-legacy-390xx-390.116/nvidia-uvm/uvm8_tools.c 2019-12-09 10:14:46.872189417 +0800
@@ -204,18 +204,20 @@
return event_tracker != NULL && !event_tracker->is_queue;
}
-static void put_user_pages(struct page **pages, NvU64 page_count)
+static void uvm_put_user_pages(struct page **pages, NvU64 page_count)
{
NvU64 i;
- for (i = 0; i < page_count; i++)
+ for (i = 0; i < page_count; i++) {
+ set_page_dirty(pages[i]);
put_page(pages[i]);
+ }
}
static void unmap_user_pages(struct page **pages, void *addr, NvU64 size)
{
size = DIV_ROUND_UP(size, PAGE_SIZE);
vunmap((NvU8 *)addr);
- put_user_pages(pages, size);
+ uvm_put_user_pages(pages, size);
uvm_kvfree(pages);
}
@@ -279,7 +281,7 @@
uvm_kvfree(vmas);
if (ret > 0)
- put_user_pages(*pages, ret);
+ uvm_put_user_pages(*pages, ret);
else if (ret < 0)
status = errno_to_nv_status(ret);