diff --git a/kernel/drivers/module-nvidia-current/pspec.xml b/kernel/drivers/module-nvidia-current/pspec.xml index 0ed2b041b3..173b0fb8c6 100644 --- a/kernel/drivers/module-nvidia-current/pspec.xml +++ b/kernel/drivers/module-nvidia-current/pspec.xml @@ -178,6 +178,7 @@ module-nvidia-current nvidia430-dkms nvidia390-dkms + nvidia340-dkms diff --git a/kernel/drivers/module-nvidia340/actions.py b/kernel/drivers/module-nvidia340/actions.py index 128bd81b50..232c0c7a5f 100644 --- a/kernel/drivers/module-nvidia340/actions.py +++ b/kernel/drivers/module-nvidia340/actions.py @@ -38,7 +38,15 @@ def setup(): shelltools.echo("ld.so.conf", nvlibdir) shelltools.echo("XvMCConfig", "%s/libXvMCNVIDIA.so" % nvlibdir) - shelltools.system("patch -p0 < kernel-4.11.patch") + shelltools.system("patch -p1 < unfuck-340.108-build-fix.patch") + + # dkms + shelltools.copytree("kernel", "kernel-dkms") + shelltools.unlink("kernel-dkms/dkms.conf") + shelltools.move("dkms.conf", "kernel-dkms/") + pisitools.dosed("kernel-dkms/dkms.conf", "%VERSION%", version) + pisitools.dosed("kernel-dkms/Makefile", "(src\s\?=\s)\.", r"\1/usr/src/nvidia-%s" % version) + pisitools.dosed("kernel-dkms/uvm/Makefile", "(src\s\?=\s)\.", r"\1/usr/src/nvidia-%s/uvm" % version) def build(): # We don't need kernel module for emul32 build @@ -71,11 +79,13 @@ def install(): pisitools.dobin("nvidia-persistenced") + # dkms + pisitools.insinto("/usr/src/nvidia-%s" % version, "kernel-dkms/*") ### Libraries # OpenGl library pisitools.dolib("libGL.so.%s" % version, nvlibdir) - pisitools.dosym("libGL.so.%s" % version, "%s/libGL.so.1.2.0" % nvlibdir) +# pisitools.dosym("libGL.so.%s" % version, "%s/libGL.so.1.2.0" % nvlibdir) # OpenCL pisitools.dolib("libOpenCL.so.1.0.0", libdir) diff --git a/kernel/drivers/module-nvidia340/comar/package-emul32.py b/kernel/drivers/module-nvidia340/comar/package-emul32.py deleted file mode 100644 index 25656c573c..0000000000 --- a/kernel/drivers/module-nvidia340/comar/package-emul32.py +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/python - -import os - -driver_dir_name = "nvidia340" -libdir = "/usr/lib32/%s" % driver_dir_name -datadir = "/usr/share/%s" % driver_dir_name - -def postInstall(fromVersion, fromRelease, toVersion, toRelease): - os.system(" /usr/sbin/alternatives \ - --install /usr/lib32/libGL.so.1.2.0 libGL-32bit %(libdir)s/libGL.so.1.2.0 50 \ - --slave /usr/lib32/xorg/modules/volatile xorg-modules-volatile-32bit %(libdir)s/modules" - % {"libdir": libdir, "datadir": datadir}) -# --slave /etc/ld.so.conf.d/10-nvidia-32bit.conf nvidia-ldsoconf-32bit %(datadir)s/32bit-ld.so.conf" - - # If this driver is in use, refresh links after installation. - if os.readlink("/etc/alternatives/libGL-32bit") == "%s/libGL.so.1.2.0" % libdir: - os.system("/usr/sbin/alternatives --set libGL-32bit %s/libGL.so.1.2.0" % libdir) - os.system("/sbin/ldconfig -X") - -def preRemove(): - # FIXME This is not needed when upgrading package; but pisi does not - # provide a way to learn operation type. - #os.system("/usr/sbin/alternatives --remove libGL-32bit %s/libGL.so.1.2.0" % libdir) - pass diff --git a/kernel/drivers/module-nvidia340/comar/package.py b/kernel/drivers/module-nvidia340/comar/package.py deleted file mode 100644 index 6ad85a4f72..0000000000 --- a/kernel/drivers/module-nvidia340/comar/package.py +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/python - -import os - -driver_dir_name = "nvidia340" -libdir = "/usr/lib/%s" % driver_dir_name -datadir = "/usr/share/%s" % driver_dir_name - -def postInstall(fromVersion, fromRelease, toVersion, toRelease): - os.system(" /usr/sbin/alternatives \ - --install /usr/lib/libGL.so.1.2.0 libGL %(libdir)s/libGL.so.1.2.0 50 \ - --slave /usr/lib/xorg/modules/volatile xorg-modules-volatile %(libdir)s/modules" - % {"libdir": libdir, "datadir": datadir}) -# --slave /etc/X11/XvMCConfig XvMCConfig %(datadir)s/XvMCConfig \ -# --slave /etc/ld.so.conf.d/10-nvidia.conf nvidia-ldsoconf %(datadir)s/ld.so.conf" - - # If this driver is in use, refresh links after installation. - if os.readlink("/etc/alternatives/libGL") == "%s/libGL.so.1.2.0" % libdir: - os.system("/usr/sbin/alternatives --set libGL %s/libGL.so.1.2.0" % libdir) - os.system("/sbin/ldconfig -X") - -def preRemove(): - # FIXME This is not needed when upgrading package; but pisi does not - # provide a way to learn operation type. - #os.system("/usr/sbin/alternatives --remove libGL %s/libGL.so.1.2.0" % libdir) - pass diff --git a/kernel/drivers/module-nvidia340/files/Makefile-kernel b/kernel/drivers/module-nvidia340/files/Makefile-kernel old mode 100755 new mode 100644 diff --git a/kernel/drivers/module-nvidia340/files/Makefile-uvm b/kernel/drivers/module-nvidia340/files/Makefile-uvm old mode 100755 new mode 100644 diff --git a/kernel/drivers/module-nvidia340/files/dkms.conf b/kernel/drivers/module-nvidia340/files/dkms.conf new file mode 100644 index 0000000000..993099c922 --- /dev/null +++ b/kernel/drivers/module-nvidia340/files/dkms.conf @@ -0,0 +1,11 @@ +PACKAGE_NAME="nvidia" +PACKAGE_VERSION="%VERSION%" +AUTOINSTALL="yes" + +MAKE[0]="'make' -C uvm module KERNEL_UNAME=${kernelver} KBUILD_EXTMOD=${dkms_tree}/${PACKAGE_NAME}/${PACKAGE_VERSION}/build/uvm" + +BUILT_MODULE_NAME[0]="nvidia-uvm" +BUILT_MODULE_LOCATION[0]="uvm/" +DEST_MODULE_LOCATION[0]="/extra" + +CLEAN="'make' -C uvm clean" \ No newline at end of file diff --git a/kernel/drivers/module-nvidia340/files/fs52243.patch b/kernel/drivers/module-nvidia340/files/fs52243.patch deleted file mode 100755 index 0ec4cbcd9a..0000000000 --- a/kernel/drivers/module-nvidia340/files/fs52243.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- kernel/nv-drm.c 2016-12-15 12:41:26.000000000 +0100 -+++ kernel/nv-drm.c 2016-12-15 12:58:48.000000000 +0100 -@@ -115,7 +115,11 @@ - }; - - static struct drm_driver nv_drm_driver = { -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0) -+ .driver_features = DRIVER_GEM | DRIVER_PRIME | DRIVER_LEGACY, -+#else - .driver_features = DRIVER_GEM | DRIVER_PRIME, -+#endif - .load = nv_drm_load, - .unload = nv_drm_unload, - .fops = &nv_drm_fops, \ No newline at end of file diff --git a/kernel/drivers/module-nvidia340/files/kernel-4.11.patch b/kernel/drivers/module-nvidia340/files/kernel-4.11.patch deleted file mode 100755 index b2b3a7a9d9..0000000000 --- a/kernel/drivers/module-nvidia340/files/kernel-4.11.patch +++ /dev/null @@ -1,38 +0,0 @@ ---- kernel/uvm/nvidia_uvm_lite.c 2017-09-27 13:50:46.334075042 +0200 -+++ kernel/uvm/nvidia_uvm_lite.c 2017-09-27 13:56:06.358041280 +0200 -@@ -818,7 +818,11 @@ - } - - #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 defined(NV_VM_FAULT_HAS_ADDRESS) - unsigned long vaddr = vmf->address; -@@ -828,7 +832,11 @@ - struct page *page = NULL; - int retval; - -+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0) - retval = _fault_common(vma, vaddr, &page, vmf->flags); -+#else -+ retval = _fault_common(NULL, vaddr, &page, vmf->flags); -+#endif - - vmf->page = page; - -@@ -866,7 +874,11 @@ - // 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; diff --git a/kernel/drivers/module-nvidia340/files/kernel-5.1.patch b/kernel/drivers/module-nvidia340/files/kernel-5.1.patch deleted file mode 100755 index 3cd3624b16..0000000000 --- a/kernel/drivers/module-nvidia340/files/kernel-5.1.patch +++ /dev/null @@ -1,43 +0,0 @@ -diff --git kernel/uvm/nvidia_uvm_lite.c kernel/uvm/nvidia_uvm_lite.c -index 65b9a4d..f5ea5d7 100644 ---- a/kernel/uvm/nvidia_uvm_lite.c -+++ b/kernel/uvm/nvidia_uvm_lite.c -@@ -830,8 +830,10 @@ 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) -+#elif LINUX_VERSION_CODE < KERNEL_VERSION(5, 1, 0) -+int _fault(struct vm_fault *vmf) -+#else -+vm_fault_t _fault(struct vm_fault *vmf) - #endif - { - #if defined(NV_VM_FAULT_HAS_ADDRESS) -@@ -886,8 +888,10 @@ static struct vm_operations_struct uvmlite_vma_ops = - #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 -+#elif LINUX_VERSION_CODE < KERNEL_VERSION(5, 1, 0) - int _sigbus_fault(struct vm_fault *vmf) -+#else -+vm_fault_t _sigbus_fault(struct vm_fault *vmf) - #endif - { - vmf->page = NULL; -diff --git kernel/nv-drm.c kernel/nv-drm.c -index 122ba7d..1be5733 100644 ---- a/kernel/nv-drm.c -+++ b/kernel/nv-drm.c -@@ -146,7 +146,7 @@ static const struct file_operations nv_drm_fops = { - }; - - static struct drm_driver nv_drm_driver = { --#if defined(DRIVER_LEGACY) -+#if defined(DRIVER_LEGACY) || LINUX_VERSION_CODE >= KERNEL_VERSION(5, 1, 0) - .driver_features = DRIVER_GEM | DRIVER_PRIME | DRIVER_LEGACY, - #else - .driver_features = DRIVER_GEM | DRIVER_PRIME, - diff --git a/kernel/drivers/module-nvidia340/files/kernel-5.3.patch b/kernel/drivers/module-nvidia340/files/kernel-5.3.patch deleted file mode 100755 index c51a41d5d8..0000000000 --- a/kernel/drivers/module-nvidia340/files/kernel-5.3.patch +++ /dev/null @@ -1,49 +0,0 @@ -diff --git kernel/nv-linux.h kernel/nv-linux.h -index 4043bf1..62f0874 100644 ---- kernel/nv-linux.h -+++ kernel/nv-linux.h -@@ -877,12 +877,21 @@ extern void *nv_stack_t_cache; - __ret; \ - }) - #elif (NV_SMP_CALL_FUNCTION_ARGUMENT_COUNT == 3) -+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 3, 0) - #define NV_SMP_CALL_FUNCTION(func, info, wait) \ - ({ \ - int __ret = smp_call_function(func, info, wait); \ - __ret; \ - }) - #else -+#define NV_SMP_CALL_FUNCTION(func, info, wait) \ -+ ({ \ -+ int __ret = 0; \ -+ smp_call_function(func, info, wait); \ -+ __ret; \ -+ }) -+#endif -+#else - #error "NV_SMP_CALL_FUNCTION_ARGUMENT_COUNT value unrecognized!" - #endif - #elif defined(CONFIG_SMP) -@@ -897,12 +906,21 @@ extern void *nv_stack_t_cache; - __ret; \ - }) - #elif (NV_ON_EACH_CPU_ARGUMENT_COUNT == 3) -+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 3, 0) - #define NV_ON_EACH_CPU(func, info, wait) \ - ({ \ - int __ret = on_each_cpu(func, info, wait); \ - __ret; \ - }) - #else -+#define NV_ON_EACH_CPU(func, info, wait) \ -+ ({ \ -+ int __ret = 0; \ -+ on_each_cpu(func, info, wait); \ -+ __ret; \ -+ }) -+#endif -+#else - #error "NV_ON_EACH_CPU_ARGUMENT_COUNT value unrecognized!" - #endif - #elif defined(CONFIG_SMP) - diff --git a/kernel/drivers/module-nvidia340/files/kernel-5.4.patch b/kernel/drivers/module-nvidia340/files/kernel-5.4.patch deleted file mode 100644 index cdbbe791fd..0000000000 --- a/kernel/drivers/module-nvidia340/files/kernel-5.4.patch +++ /dev/null @@ -1,113 +0,0 @@ -From f90c388c755a6bd9b72cb51c712a0ae686e0b377 Mon Sep 17 00:00:00 2001 -From: Alberto Milone -Date: Wed, 27 Nov 2019 13:01:18 +0100 -Subject: [PATCH 1/1] Add support for Linux 5.4 - ---- - conftest.sh | 46 ++++++++++++++++++++++++++++++++++++++++ - nv-drm.c | 9 +++++--- - nvidia-modules-common.mk | 2 +- - 3 files changed, 53 insertions(+), 4 deletions(-) - -diff --git a/conftest.sh b/conftest.sh -index fb0bf60..babbb50 100755 ---- a/kernel/conftest.sh -+++ b/kernel/conftest.sh -@@ -265,6 +265,23 @@ build_cflags() { - if [ -n "$BUILD_PARAMS" ]; then - CFLAGS="$CFLAGS -D$BUILD_PARAMS" - fi -+ -+ # Check if gcc supports asm goto and set CC_HAVE_ASM_GOTO if it does. -+ # Older kernels perform this check and set this flag in Kbuild, and since -+ # conftest.sh runs outside of Kbuild it ends up building without this flag. -+ # Starting with commit e9666d10a5677a494260d60d1fa0b73cc7646eb3 this test -+ # is done within Kconfig, and the preprocessor flag is no longer needed. -+ -+ GCC_GOTO_SH="$SOURCES/build/gcc-goto.sh" -+ -+ if [ -f "$GCC_GOTO_SH" ]; then -+ # Newer versions of gcc-goto.sh don't print anything on success, but -+ # this is okay, since it's no longer necessary to set CC_HAVE_ASM_GOTO -+ # based on the output of those versions of gcc-goto.sh. -+ if [ `/bin/sh "$GCC_GOTO_SH" "$CC"` = "y" ]; then -+ CFLAGS="$CFLAGS -DCC_HAVE_ASM_GOTO" -+ fi -+ fi - } - - CONFTEST_PREAMBLE="#include \"conftest.h\" -@@ -1521,6 +1538,35 @@ compile_test() { - compile_check_conftest "$CODE" "NV_DRM_AVAILABLE" "" "generic" - ;; - -+ drm_driver_prime_flag_present) -+ # -+ # Determine whether driver feature flag DRIVER_PRIME is present. -+ # -+ # The DRIVER_PRIME flag was added by commit 3248877ea179 (drm: -+ # base prime/dma-buf support (v5)) in v3.4 (2011-11-25) and is -+ # removed by commit 0424fdaf883a (drm/prime: Actually remove -+ # DRIVER_PRIME everywhere) on 2019-06-17. -+ # -+ # DRIVER_PRIME definition moved from drmP.h to drm_drv.h by -+ # commit 85e634bce01a (drm: Extract drm_drv.h) in v4.10 -+ # (2016-11-14). -+ # -+ # DRIVER_PRIME define is changed to enum value by commit -+ # 0e2a933b02c9 (drm: Switch DRIVER_ flags to an enum) in v5.1 -+ # (2019-01-29). -+ # -+ CODE=" -+ #include -+ #if defined(NV_DRM_DRM_DRV_H_PRESENT) -+ #include -+ #endif -+ unsigned int drm_driver_prime_flag_present_conftest(void) { -+ return DRIVER_PRIME; -+ }" -+ -+ compile_check_conftest "$CODE" "NV_DRM_DRIVER_PRIME_FLAG_PRESENT" "" "types" -+ ;; -+ - proc_create_data) - # - # Determine if the proc_create_data() function is present. -diff --git a/nv-drm.c b/nv-drm.c -index 76719bb..12f7029 100644 ---- a/kernel/nv-drm.c -+++ b/kernel/nv-drm.c -@@ -156,11 +156,14 @@ static const struct file_operations nv_drm_fops = { - }; - - static struct drm_driver nv_drm_driver = { -+ .driver_features = -+#if defined(NV_DRM_DRIVER_PRIME_FLAG_PRESENT) -+ DRIVER_PRIME | -+#endif - #if defined(DRIVER_LEGACY) || LINUX_VERSION_CODE >= KERNEL_VERSION(5, 1, 0) -- .driver_features = DRIVER_GEM | DRIVER_PRIME | DRIVER_LEGACY, --#else -- .driver_features = DRIVER_GEM | DRIVER_PRIME, -+ DRIVER_LEGACY | - #endif -+ DRIVER_GEM, - .load = nv_drm_load, - .unload = nv_drm_unload, - .fops = &nv_drm_fops, -diff --git a/nvidia-modules-common.mk b/nvidia-modules-common.mk -index 8ac7058..7418005 100644 ---- a/kernel/nvidia-modules-common.mk -+++ b/kernel/nvidia-modules-common.mk -@@ -180,7 +180,7 @@ ifndef NV_VERBOSE - endif - - KBUILD_PARAMS += KBUILD_VERBOSE=$(NV_VERBOSE) --KBUILD_PARAMS += -C $(KERNEL_SOURCES) SUBDIRS=$(PWD) -+KBUILD_PARAMS += -C $(KERNEL_SOURCES) M=$(PWD) - KBUILD_PARAMS += ARCH=$(ARCH) - - # --- -2.20.1 - diff --git a/kernel/drivers/module-nvidia340/files/kmem_cache_create_usercopy.patch b/kernel/drivers/module-nvidia340/files/kmem_cache_create_usercopy.patch deleted file mode 100755 index 6873cd2ab8..0000000000 --- a/kernel/drivers/module-nvidia340/files/kmem_cache_create_usercopy.patch +++ /dev/null @@ -1,29 +0,0 @@ -Author: Andreas Beckmann -Description: use kmem_cache_create_usercopy on 4.16+ - fixes "Bad or missing usercopy whitelist? Kernel memory exposure attempt - detected from SLUB object 'nvidia_stack_cache'" on linux-image-4.16.0-2-* - or newer that have disabled CONFIG_HARDENED_USERCOPY_FALLBACK -Bug-Debian: #901919, #899998 -Bug: https://devtalk.nvidia.com/default/topic/1031067 - ---- a/kernel/nv-linux.h -+++ b/kernel/nv-linux.h -@@ -757,11 +757,18 @@ extern nv_spinlock_t km_lock; - 0, 0, NULL, NULL); \ - } - #elif (NV_KMEM_CACHE_CREATE_ARGUMENT_COUNT == 5) -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 16, 0) -+#define NV_KMEM_CACHE_CREATE(kmem_cache, name, type) \ -+ { \ -+ kmem_cache = kmem_cache_create_usercopy(name, sizeof(type), 0, 0, 0, sizeof(type), NULL); \ -+ } -+#else - #define NV_KMEM_CACHE_CREATE(kmem_cache, name, type) \ - { \ - kmem_cache = kmem_cache_create(name, sizeof(type), \ - 0, 0, NULL); \ - } -+#endif - #else - #error "NV_KMEM_CACHE_CREATE_ARGUMENT_COUNT value unrecognized!" - #endif diff --git a/kernel/drivers/module-nvidia340/files/linux-4.6.patch b/kernel/drivers/module-nvidia340/files/linux-4.6.patch deleted file mode 100755 index 0495ce1cdb..0000000000 --- a/kernel/drivers/module-nvidia340/files/linux-4.6.patch +++ /dev/null @@ -1,150 +0,0 @@ ---- /dev/null -+++ b/kernel/nv-mm.h -@@ -0,0 +1,55 @@ -+/******************************************************************************* -+ Copyright (c) 2016 NVIDIA Corporation -+ -+ Permission is hereby granted, free of charge, to any person obtaining a copy -+ of this software and associated documentation files (the "Software"), to -+ deal in the Software without restriction, including without limitation the -+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -+ sell copies of the Software, and to permit persons to whom the Software is -+ furnished to do so, subject to the following conditions: -+ -+ The above copyright notice and this permission notice shall be -+ included in all copies or substantial portions of the Software. -+ -+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -+ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -+ DEALINGS IN THE SOFTWARE. -+ -+*******************************************************************************/ -+#ifndef __NV_MM_H__ -+#define __NV_MM_H__ -+ -+/* get_user_pages_remote() was added by: -+ * 2016 Feb 12: 1e9877902dc7e11d2be038371c6fbf2dfcd469d7 -+ * -+ * The very next commit (cde70140fed8429acf7a14e2e2cbd3e329036653) -+ * deprecated the 8-argument version of get_user_pages for the -+ * non-remote case (calling get_user_pages with current and current->mm). -+ * -+ * The guidelines are: call NV_GET_USER_PAGES_REMOTE if you need the 8-argument -+ * version that uses something other than current and current->mm. Use -+ * NV_GET_USER_PAGES if you are refering to current and current->mm. -+ * -+* Note that get_user_pages_remote() requires the caller to hold a reference on -+* the task_struct (if non-NULL) and the mm_struct. This will always be true -+* when using current and current->mm. If the kernel passes the driver a vma -+* via driver callback, the kernel holds a reference on vma->vm_mm over that -+* callback. -+ */ -+ -+#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 -+ #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 -+ -+ -+#endif // __NV_MM_H__ ---- a/kernel/os-mlock.c -+++ b/kernel/os-mlock.c -@@ -13,6 +13,7 @@ - - #include "os-interface.h" - #include "nv-linux.h" -+#include "nv-mm.h" - - RM_STATUS NV_API_CALL os_lock_user_pages( - void *address, -@@ -45,7 +46,7 @@ RM_STATUS NV_API_CALL os_lock_user_pages( - } - - down_read(&mm->mmap_sem); -- ret = get_user_pages(current, mm, (unsigned long)address, -+ ret = NV_GET_USER_PAGES((unsigned long)address, - page_count, write, force, user_pages, NULL); - up_read(&mm->mmap_sem); - pinned = ret; -@@ -59,7 +59,7 @@ RM_STATUS NV_API_CALL os_lock_user_pages( - else if (pinned < page_count) - { - for (i = 0; i < pinned; i++) -- page_cache_release(user_pages[i]); -+ put_page(user_pages[i]); - os_free_mem(user_pages); - return RM_ERR_INVALID_ADDRESS; - } -@@ -86,7 +86,7 @@ RM_STATUS NV_API_CALL os_unlock_user_pages( - { - if (write) - set_page_dirty_lock(user_pages[i]); -- page_cache_release(user_pages[i]); -+ put_page(user_pages[i]); - } - - os_free_mem(user_pages); -diff --git a/kernel/conftest.sh.orig b/kernel/conftest.sh -index d01488b..308ea8a 100755 ---- a/kernel/conftest.sh -+++ b/kernel/conftest.sh -@@ -1669,6 +1669,23 @@ compile_test() { - - compile_check_conftest "$CODE" "NV_NODE_END_PFN_PRESENT" "" "functions" - ;; -+ -+ get_user_pages_remote) -+ # -+ # Determine if the function get_user_pages_remote() is -+ # present. -+ # -+ # get_user_pages_remote() was added by: -+ # 2016 Feb 12: 1e9877902dc7e11d2be038371c6fbf2dfcd469d7 -+ # -+ CODE=" -+ #include -+ int conftest_get_user_pages_remote(void) { -+ get_user_pages_remote(); -+ }" -+ -+ compile_check_conftest "$CODE" "NV_GET_USER_PAGES_REMOTE_PRESENT" "" "functions" -+ ;; - esac - } - -diff --git a/kernel/Makefile.orig b/kernel/Makefile -index 438d487..c52a36c 100644 ---- a/kernel/Makefile -+++ b/kernel/Makefile -@@ -139,7 +139,8 @@ COMPILE_TESTS = \ - drm_pci_set_busid \ - write_cr4 \ - for_each_online_node \ -- node_end_pfn -+ node_end_pfn \ -+ get_user_pages_remote - - # - # CFLAGS dependent on the type of builds (e.g. single/muliple module, debug) -diff --git a/kernel/uvm/nvidia_uvm_lite.c.orig b/kernel/uvm/nvidia_uvm_lite.c -index 442a0a8..695f092 100644 ---- a/kernel/uvm/nvidia_uvm_lite.c -+++ b/kernel/uvm/nvidia_uvm_lite.c -@@ -785,7 +785,7 @@ int _fault_common(struct vm_area_struct *vma, unsigned long vaddr, - // a reference so that the fault handling logic is correct: - // - get_page(pTracking->uvmPage); -- retValue = VM_FAULT_MINOR; -+ retValue = 0; - } - - pRecord->isMapped = NV_TRUE; diff --git a/kernel/drivers/module-nvidia340/files/modprobe.conf b/kernel/drivers/module-nvidia340/files/modprobe.conf old mode 100755 new mode 100644 diff --git a/kernel/drivers/module-nvidia340/files/nv-drm.patch b/kernel/drivers/module-nvidia340/files/nv-drm.patch deleted file mode 100755 index 4c6a393c43..0000000000 --- a/kernel/drivers/module-nvidia340/files/nv-drm.patch +++ /dev/null @@ -1,27 +0,0 @@ ---- kernel/nv-drm.c~ 2014-09-12 00:33:06.000000000 +0200 -+++ kernel/nv-drm.c 2014-10-14 11:35:52.854400737 +0200 -@@ -18,6 +18,11 @@ - - #include - -+/* 3.18-rc0+ */ -+#ifndef drm_gem_object -+#include -+#endif -+ - extern nv_linux_state_t *nv_linux_devices; - - struct nv_gem_object { -diff --git a/kernel/nv-drm.c~ b/kernel/nv-drm.c -index ecc982a..60d7aae 100644 ---- kernel/nv-drm.c~ -+++ kernel/nv-drm.c -@@ -129,6 +129,8 @@ static struct drm_driver nv_drm_driver = { - .gem_prime_vmap = nv_gem_prime_vmap, - .gem_prime_vunmap = nv_gem_prime_vunmap, - -+ .set_busid = drm_pci_set_busid, -+ - .name = "nvidia-drm", - .desc = "NVIDIA DRM driver", - .date = "20130102", diff --git a/kernel/drivers/module-nvidia340/files/nv_patch_340.107_linux_kernel_5.0 b/kernel/drivers/module-nvidia340/files/nv_patch_340.107_linux_kernel_5.0 old mode 100755 new mode 100644 diff --git a/kernel/drivers/module-nvidia340/files/unfuck-340.108-build-fix.patch b/kernel/drivers/module-nvidia340/files/unfuck-340.108-build-fix.patch new file mode 100644 index 0000000000..645e45f6cb --- /dev/null +++ b/kernel/drivers/module-nvidia340/files/unfuck-340.108-build-fix.patch @@ -0,0 +1,48 @@ +diff --git a/uvm/nvidia_uvm_lite.c b/uvm/nvidia_uvm_lite.c +index 6943e7c..c5d232c 100644 +--- a/kernel/uvm/nvidia_uvm_lite.c ++++ b/kernel/uvm/nvidia_uvm_lite.c +@@ -820,7 +820,13 @@ done: + } + + #if defined(NV_VM_OPERATIONS_STRUCT_HAS_FAULT) ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 17, 0) ++vm_fault_t _fault(struct vm_fault *vmf) ++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) ++int _fault(struct vm_fault *vmf) ++#else + int _fault(struct vm_area_struct *vma, struct vm_fault *vmf) ++#endif + { + #if defined(NV_VM_FAULT_HAS_ADDRESS) + unsigned long vaddr = vmf->address; +@@ -828,8 +834,15 @@ int _fault(struct vm_area_struct *vma, struct vm_fault *vmf) + unsigned long vaddr = (unsigned long)vmf->virtual_address; + #endif + struct page *page = NULL; ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 17, 0) ++ vm_fault_t retval; ++#else + int retval; + ++#endif ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) ++ struct vm_area_struct *vma = vmf->vma; ++#endif + retval = _fault_common(vma, vaddr, &page, vmf->flags); + + vmf->page = page; +@@ -868,7 +881,13 @@ 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, 17, 0) ++vm_fault_t _sigbus_fault(struct vm_fault *vmf) ++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) ++int _sigbus_fault(struct vm_fault *vmf) ++#else + int _sigbus_fault(struct vm_area_struct *vma, struct vm_fault *vmf) ++#endif + { + vmf->page = NULL; + return VM_FAULT_SIGBUS; diff --git a/kernel/drivers/module-nvidia340/files/unregister_procfs_on_failure.patch b/kernel/drivers/module-nvidia340/files/unregister_procfs_on_failure.patch old mode 100755 new mode 100644 diff --git a/kernel/drivers/module-nvidia340/files/xorg.conf b/kernel/drivers/module-nvidia340/files/xorg.conf new file mode 100644 index 0000000000..7c76883abb --- /dev/null +++ b/kernel/drivers/module-nvidia340/files/xorg.conf @@ -0,0 +1,4 @@ +Section "Files" + ModulePath "/usr/lib/nvidia/xorg" + ModulePath "/usr/lib/xorg/modules" +EndSection diff --git a/kernel/drivers/module-nvidia340/pspec.xml b/kernel/drivers/module-nvidia340/pspec.xml index 879a93bf5c..b5c97ef91e 100644 --- a/kernel/drivers/module-nvidia340/pspec.xml +++ b/kernel/drivers/module-nvidia340/pspec.xml @@ -11,18 +11,11 @@ NVIDIA NVIDIA drivers for GeForce 6xxx and newer GPUs NVIDIA graphics drivers provide optimized 2D/3D performance. - http://http.download.nvidia.com/XFree86/Linux-x86/340.107/NVIDIA-Linux-x86-340.107.run - http://http.download.nvidia.com/XFree86/Linux-x86_64/340.107/NVIDIA-Linux-x86_64-340.107.run + http://http.download.nvidia.com/XFree86/Linux-x86/340.108/NVIDIA-Linux-x86-340.108.run + http://http.download.nvidia.com/XFree86/Linux-x86_64/340.108/NVIDIA-Linux-x86_64-340.108.run - kernel-4.11.patch - kernel-5.3.patch - kernel-5.1.patch - kernel-5.4.patch - kmem_cache_create_usercopy.patch - unregister_procfs_on_failure.patch - nv_patch_340.107_linux_kernel_5.0 - Makefile-kernel - Makefile-uvm + unfuck-340.108-build-fix.patch + dkms.conf kernel-module-headers @@ -42,6 +35,9 @@ noDelta + + nvidia340-dkms + @@ -51,8 +47,11 @@ libXext xorg-server - module-nvidia340 libX11 + + module-nvidia340 + nvidia340-dkms + xorg-video-nvidia-current @@ -66,9 +65,6 @@ /usr/share/doc /usr/share/man - - System.Package - noDelta @@ -96,16 +92,46 @@ /usr/lib32 /usr/share/nvidia-current/32bit-ld.so.conf - - System.Package - noDelta + + nvidia340-dkms + driver + NVIDIA driver sources for linux + + dkms + + + /etc/modprobe.d/nvidia340-dkms.conf + /usr/src/nvidia* + + + modprobe.conf + xorg.conf + + + noDelta + + + module-nvidia340 + nvidia-current-dkms + nvidia430-dkms + nvidia390-dkms + + + - + + 2020-01-09 + 340.108 + Add dkms support. Version bump + Marcin Bojara + marcin.bojara@gmail.com + + 2019-12-28 340.107 Rebuild for new kernel. @@ -119,7 +145,7 @@ Idris Kalp idriskalp@gmail.com - + 2019-06-09 340.107 Rebuild for new kernel. diff --git a/kernel/drivers/module-nvidia390/pspec.xml b/kernel/drivers/module-nvidia390/pspec.xml index 0f90442a63..3434e0d094 100644 --- a/kernel/drivers/module-nvidia390/pspec.xml +++ b/kernel/drivers/module-nvidia390/pspec.xml @@ -153,6 +153,7 @@ module-nvidia390 + nvidia340-dkms nvidia430-dkms nvidia-current-dkms diff --git a/kernel/drivers/module-nvidia430/pspec.xml b/kernel/drivers/module-nvidia430/pspec.xml index e543c088d4..5668625c2d 100644 --- a/kernel/drivers/module-nvidia430/pspec.xml +++ b/kernel/drivers/module-nvidia430/pspec.xml @@ -187,6 +187,7 @@ module-nvidia430 nvidia-current-dkms nvidia390-dkms + nvidia340-dkms