nvidia340: add dkms support, version bump

This commit is contained in:
Marcin Bojara
2020-01-09 21:51:22 +01:00
parent 2709907f9a
commit 0e1bdc6af0
23 changed files with 124 additions and 536 deletions
@@ -178,6 +178,7 @@
<Package>module-nvidia-current</Package>
<Package>nvidia430-dkms</Package>
<Package>nvidia390-dkms</Package>
<Package>nvidia340-dkms</Package>
</Conflicts>
</Package>
+12 -2
View File
@@ -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
View File
View File
@@ -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;
View File
@@ -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",
@@ -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;
@@ -0,0 +1,4 @@
Section "Files"
ModulePath "/usr/lib/nvidia/xorg"
ModulePath "/usr/lib/xorg/modules"
EndSection
+46 -20
View File
@@ -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>