nvidia340: add dkms support, version bump
This commit is contained in:
@@ -178,6 +178,7 @@
|
||||
<Package>module-nvidia-current</Package>
|
||||
<Package>nvidia430-dkms</Package>
|
||||
<Package>nvidia390-dkms</Package>
|
||||
<Package>nvidia340-dkms</Package>
|
||||
</Conflicts>
|
||||
</Package>
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
Executable → Regular
Executable → Regular
@@ -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"
|
||||
@@ -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,
|
||||
@@ -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;
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -1,113 +0,0 @@
|
||||
From f90c388c755a6bd9b72cb51c712a0ae686e0b377 Mon Sep 17 00:00:00 2001
|
||||
From: Alberto Milone <alberto.milone@canonical.com>
|
||||
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 <drm/drmP.h>
|
||||
+ #if defined(NV_DRM_DRM_DRV_H_PRESENT)
|
||||
+ #include <drm/drm_drv.h>
|
||||
+ #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
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
Author: Andreas Beckmann <anbe@debian.org>
|
||||
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
|
||||
@@ -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 <linux/mm.h>
|
||||
+ 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;
|
||||
Executable → Regular
@@ -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 <drm/drmP.h>
|
||||
|
||||
+/* 3.18-rc0+ */
|
||||
+#ifndef drm_gem_object
|
||||
+#include <drm/drm_gem.h>
|
||||
+#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",
|
||||
Executable → Regular
@@ -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;
|
||||
Executable → Regular
@@ -0,0 +1,4 @@
|
||||
Section "Files"
|
||||
ModulePath "/usr/lib/nvidia/xorg"
|
||||
ModulePath "/usr/lib/xorg/modules"
|
||||
EndSection
|
||||
@@ -11,18 +11,11 @@
|
||||
<License>NVIDIA</License>
|
||||
<Summary>NVIDIA drivers for GeForce 6xxx and newer GPUs</Summary>
|
||||
<Description>NVIDIA graphics drivers provide optimized 2D/3D performance.</Description>
|
||||
<Archive sha1sum="e3897bc262e7ab58cda31c1139c3dc62af528113" type="binary">http://http.download.nvidia.com/XFree86/Linux-x86/340.107/NVIDIA-Linux-x86-340.107.run</Archive>
|
||||
<Archive sha1sum="de4d309e52ab489e412fe6de000bb92ca27b6f31" type="binary">http://http.download.nvidia.com/XFree86/Linux-x86_64/340.107/NVIDIA-Linux-x86_64-340.107.run</Archive>
|
||||
<Archive sha1sum="53faf727383b3a698ac382bf9bb981d4a881cb0d" type="binary">http://http.download.nvidia.com/XFree86/Linux-x86/340.108/NVIDIA-Linux-x86-340.108.run</Archive>
|
||||
<Archive sha1sum="124c8462319fca6c59b10d4bdcd85e3b1c104995" type="binary">http://http.download.nvidia.com/XFree86/Linux-x86_64/340.108/NVIDIA-Linux-x86_64-340.108.run</Archive>
|
||||
<AdditionalFiles>
|
||||
<AdditionalFile target="kernel-4.11.patch">kernel-4.11.patch</AdditionalFile>
|
||||
<AdditionalFile target="kernel-5.3.patch">kernel-5.3.patch</AdditionalFile>
|
||||
<AdditionalFile target="kernel-5.1.patch">kernel-5.1.patch</AdditionalFile>
|
||||
<AdditionalFile target="kernel-5.4.patch">kernel-5.4.patch</AdditionalFile>
|
||||
<AdditionalFile target="kmem_cache_create_usercopy.patch">kmem_cache_create_usercopy.patch</AdditionalFile>
|
||||
<AdditionalFile target="unregister_procfs_on_failure.patch">unregister_procfs_on_failure.patch</AdditionalFile>
|
||||
<AdditionalFile target="nv_patch_340.107_linux_kernel_5.0">nv_patch_340.107_linux_kernel_5.0</AdditionalFile>
|
||||
<AdditionalFile target="Makefile-kernel">Makefile-kernel</AdditionalFile>
|
||||
<AdditionalFile target="Makefile-uvm">Makefile-uvm</AdditionalFile>
|
||||
<AdditionalFile target="unfuck-340.108-build-fix.patch">unfuck-340.108-build-fix.patch</AdditionalFile>
|
||||
<AdditionalFile owner="root" permission="0644" target="dkms.conf">dkms.conf</AdditionalFile>
|
||||
</AdditionalFiles>
|
||||
<BuildDependencies>
|
||||
<Dependency version="5.4.6">kernel-module-headers</Dependency>
|
||||
@@ -42,6 +35,9 @@
|
||||
<BuildFlags>
|
||||
<Flag>noDelta</Flag>
|
||||
</BuildFlags>
|
||||
<Conflicts>
|
||||
<Package>nvidia340-dkms</Package>
|
||||
</Conflicts>
|
||||
</Package>
|
||||
|
||||
<Package>
|
||||
@@ -51,8 +47,11 @@
|
||||
<RuntimeDependencies>
|
||||
<Dependency>libXext</Dependency>
|
||||
<Dependency>xorg-server</Dependency>
|
||||
<Dependency version="current">module-nvidia340</Dependency>
|
||||
<Dependency>libX11</Dependency>
|
||||
<AnyDependency>
|
||||
<Dependency version="current">module-nvidia340</Dependency>
|
||||
<Dependency>nvidia340-dkms</Dependency>
|
||||
</AnyDependency>
|
||||
</RuntimeDependencies>
|
||||
<Conflicts>
|
||||
<Package>xorg-video-nvidia-current</Package>
|
||||
@@ -66,9 +65,6 @@
|
||||
<Path fileType="doc">/usr/share/doc</Path>
|
||||
<Path fileType="man">/usr/share/man</Path>
|
||||
</Files>
|
||||
<Provides>
|
||||
<COMAR script="package.py">System.Package</COMAR>
|
||||
</Provides>
|
||||
<BuildFlags>
|
||||
<Flag>noDelta</Flag>
|
||||
</BuildFlags>
|
||||
@@ -96,16 +92,46 @@
|
||||
<Path fileType="library">/usr/lib32</Path>
|
||||
<Path fileType="library">/usr/share/nvidia-current/32bit-ld.so.conf</Path>
|
||||
</Files>
|
||||
<Provides>
|
||||
<COMAR script="package-emul32.py">System.Package</COMAR>
|
||||
</Provides>
|
||||
<BuildFlags>
|
||||
<Flag>noDelta</Flag>
|
||||
</BuildFlags>
|
||||
</Package>
|
||||
|
||||
<Package>
|
||||
<Name>nvidia340-dkms</Name>
|
||||
<IsA>driver</IsA>
|
||||
<Summary>NVIDIA driver sources for linux</Summary>
|
||||
<RuntimeDependencies>
|
||||
<Dependency>dkms</Dependency>
|
||||
</RuntimeDependencies>
|
||||
<Files>
|
||||
<Path fileType="config">/etc/modprobe.d/nvidia340-dkms.conf</Path>
|
||||
<Path fileType="data">/usr/src/nvidia*</Path>
|
||||
</Files>
|
||||
<AdditionalFiles>
|
||||
<AdditionalFile owner="root" permission="0644" target="/etc/modprobe.d/nvidia340-dkms.conf">modprobe.conf</AdditionalFile>
|
||||
<AdditionalFile owner="root" permission="0644" target="/usr/share/X11/xorg.conf.d/10-nvidia-glx.conf">xorg.conf</AdditionalFile>
|
||||
</AdditionalFiles>
|
||||
<BuildFlags>
|
||||
<Flag>noDelta</Flag>
|
||||
</BuildFlags>
|
||||
<Conflicts>
|
||||
<Package>module-nvidia340</Package>
|
||||
<Package>nvidia-current-dkms</Package>
|
||||
<Package>nvidia430-dkms</Package>
|
||||
<Package>nvidia390-dkms</Package>
|
||||
</Conflicts>
|
||||
</Package>
|
||||
|
||||
<History>
|
||||
<Update release="28">
|
||||
<Update release="29">
|
||||
<Date>2020-01-09</Date>
|
||||
<Version>340.108</Version>
|
||||
<Comment>Add dkms support. Version bump</Comment>
|
||||
<Name>Marcin Bojara</Name>
|
||||
<Email>marcin.bojara@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="28">
|
||||
<Date>2019-12-28</Date>
|
||||
<Version>340.107</Version>
|
||||
<Comment>Rebuild for new kernel.</Comment>
|
||||
@@ -119,7 +145,7 @@
|
||||
<Name>Idris Kalp</Name>
|
||||
<Email>idriskalp@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="26">
|
||||
<Update release="26">
|
||||
<Date>2019-06-09</Date>
|
||||
<Version>340.107</Version>
|
||||
<Comment>Rebuild for new kernel.</Comment>
|
||||
|
||||
@@ -153,6 +153,7 @@
|
||||
</BuildFlags>
|
||||
<Conflicts>
|
||||
<Package>module-nvidia390</Package>
|
||||
<Package>nvidia340-dkms</Package>
|
||||
<Package>nvidia430-dkms</Package>
|
||||
<Package>nvidia-current-dkms</Package>
|
||||
</Conflicts>
|
||||
|
||||
@@ -187,6 +187,7 @@
|
||||
<Package>module-nvidia430</Package>
|
||||
<Package>nvidia-current-dkms</Package>
|
||||
<Package>nvidia390-dkms</Package>
|
||||
<Package>nvidia340-dkms</Package>
|
||||
</Conflicts>
|
||||
</Package>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user