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