This is not the dkms
driver. If you use dkms
, you will have to look at nvidia-390xx-dkms
. As at least I wasn’t able to find that one on the Manjaro GitLab, it looks like you got it elsewhere. That was the reason why I was asking. If I am not entirely mistaken, Manjaro does not officially support the 390 nvidia driver anymore.
Being a former nvidia-390xx
user myself, I built the corresponding package based on the nvidia-390xx-dkms
package from AUR and applied the necessary modifications.
In a nutshell, here’s what you will have to do:
In a new, empty folder, create a PKGBUILD
file with the following contents:
##############################
# Now working with Kernel 5.17
##############################
# based on the 340xx package #
# Maintainer: Jerry Xiao <aur@mail.jerryxiao.cc>
# Maintainer: graysky <graysky AT archlinux DOT us>
# Contributor: Giancarlo Razzolini <grazzolini@archlinux.org>
# Contributor: Eric Bélanger <eric@archlinux.org>
pkgbase=nvidia-390xx
pkgname=(nvidia-390xx-dkms)
pkgver=390.147
pkgrel=9
pkgdesc="NVIDIA drivers for linux, 390xx legacy branch"
arch=('x86_64')
url="https://www.nvidia.com/"
makedepends=("nvidia-390xx-utils=${pkgver}" 'linux>=5.4' 'linux-headers>=5.4')
conflicts=('nvidia')
license=('custom')
options=(!strip)
_durl="http://us.download.nvidia.com/XFree86/Linux-x86"
source=("${_durl}_64/${pkgver}/NVIDIA-Linux-${CARCH}-${pkgver}-no-compat32.run"
"kernel-5.16.patch"
"kernel-5.17.patch"
"dkms.conf.fragment")
sha256sums=('3fc4b5a7c64326cea79156fc31e8160a89621219df09a4cd268844c3e318accc'
'c5120d5640895a3a80fd2315e19c763f956a1822ae2f47854e431c3e7b719e56'
'692f20d5191791a88d755abf6049af22083186e7dc5818577f5f5f60b1905e15'
'9256844fb3b344b52c6d7903071274025dfadef0ad3335c82dbecbdecec2a3ab')
_pkg="NVIDIA-Linux-${CARCH}-${pkgver}-no-compat32"
prepare() {
# Remove previous builds
[ -d "$_pkg" ] && rm -rf "$_pkg"
sh "${_pkg}.run" --extract-only
cd "${_pkg}"
# patches here
# Fix compile problem with 5.16
echo "PATCH: kernel-5.16.patch (improved)"
patch -p1 -i "$srcdir"/kernel-5.16.patch
echo "PATCH: kernel-5.17.patch"
patch -p1 -i "$srcdir"/kernel-5.17.patch
cd kernel
sed -i "s/__VERSION_STRING/${pkgver}/" dkms.conf
sed -i 's/__JOBS/`nproc`/' dkms.conf
sed -i 's/__DKMS_MODULES//' dkms.conf
sed -i '$iBUILT_MODULE_NAME[0]="nvidia"\
DEST_MODULE_LOCATION[0]="/kernel/drivers/video"\
BUILT_MODULE_NAME[1]="nvidia-uvm"\
DEST_MODULE_LOCATION[1]="/kernel/drivers/video"\
BUILT_MODULE_NAME[2]="nvidia-modeset"\
DEST_MODULE_LOCATION[2]="/kernel/drivers/video"\
BUILT_MODULE_NAME[3]="nvidia-drm"\
DEST_MODULE_LOCATION[3]="/kernel/drivers/video"' dkms.conf
# Gift for linux-rt guys
sed -i 's/NV_EXCLUDE_BUILD_MODULES/IGNORE_PREEMPT_RT_PRESENCE=1 NV_EXCLUDE_BUILD_MODULES/' dkms.conf
cd ..
cp -a kernel kernel-dkms
}
package_nvidia-390xx-dkms() {
pkgdesc="NVIDIA driver sources for linux, 390xx legacy branch"
depends=('dkms' "nvidia-390xx-utils=$pkgver" 'libgl' 'linux>=5.4')
optdepends=('linux-headers: Build the module for Manjaro kernel')
provides=("nvidia-390xx=$pkgver")
conflicts+=('nvidia-390xx')
cd "${_pkg}"
install -dm 755 "${pkgdir}"/usr/src
cp -dr --no-preserve='ownership' kernel-dkms "${pkgdir}/usr/src/nvidia-${pkgver}"
# cat "${pkgdir}"/../../dkms.conf.fragment >> "${pkgdir}"/usr/src/nvidia-${pkgver}/dkms.conf
echo "blacklist nouveau" |
install -Dm644 /dev/stdin "${pkgdir}/usr/lib/modprobe.d/${pkgname}.conf"
}
# vim:set ts=2 sw=2 et:
Create the following additional files.
dkms.conf.fragment
:
BUILT_MODULE_NAME[1]="${PACKAGE_NAME}-uvm"
BUILT_MODULE_LOCATION[1]="uvm/"
DEST_MODULE_LOCATION[1]="/kernel/drivers/video"
MAKE[0]+="; make -C uvm module KERNEL_UNAME=${kernelver} KBUILD_EXTMOD=${dkms_tree}/${PACKAGE_NAME}/${PACKAGE_VERSION}/build/uvm"
CLEAN+="; make -C uvm clean"
kernel-5.16.patch
:
--- a/kernel/conftest.sh 2021-05-13 07:23:10.000000000 +0200
+++ b/kernel/conftest.sh 2021-09-13 19:54:43.389276174 +0200
@@ -1729,20 +1729,31 @@
# Determine if the DRM subsystem is usable
#
CODE="
+ #include <linux/version.h>
#if defined(NV_DRM_DRMP_H_PRESENT)
#include <drm/drmP.h>
+ #else
+ #include <drm/drm_drv.h>
+ #include <drm/drm_prime.h>
#endif
#if defined(NV_DRM_DRM_DRV_H_PRESENT)
#include <drm/drm_drv.h>
#endif
+ #if defined(NV_DRM_DRM_GEM_H_PRESENT)
+ #include <drm/drm_gem.h>
+ #endif
+
+ #if defined(NV_DRM_DRM_PRIME_H_PRESENT)
+ #include <drm/drm_prime.h>
+ #endif
+
#if !defined(CONFIG_DRM) && !defined(CONFIG_DRM_MODULE)
#error DRM not enabled
#endif
void conftest_drm_available(void) {
- struct drm_driver drv;
/* 2013-10-02 1bb72532ac260a2d3982b40bdd4c936d779d0d16 */
(void)drm_dev_alloc;
@@ -1752,6 +1763,24 @@
/* 2013-10-02 c3a49737ef7db0bdd4fcf6cf0b7140a883e32b2a */
(void)drm_dev_unregister;
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 11, 0))
+ // Avoid failure due to all the changes in torvalds/linux commit d693def4fd1c23f1ca5aed1afb9993b3a2069ad2
+ struct drm_driver drv;
+ drv.gem_prime_pin = 0;
+ drv.gem_prime_get_sg_table = 0;
+ drv.gem_prime_vmap = 0;
+ drv.gem_prime_vunmap = 0;
+#else
+ struct drm_gem_object_funcs gem;
+ gem.pin = 0;
+ gem.get_sg_table = 0;
+ gem.vmap = 0;
+ gem.vunmap = 0;
+#endif
+ (void)drm_gem_prime_import;
+ (void)drm_gem_prime_export;
+
+
}"
compile_check_conftest "$CODE" "NV_DRM_AVAILABLE" "" "generic"
@@ -1764,6 +1793,8 @@
CODE="
#if defined(NV_DRM_DRMP_H_PRESENT)
#include <drm/drmP.h>
+ #else
+ #include <drm/drm_drv.h>
#endif
void conftest_drm_dev_unref(void) {
/*
@@ -2540,6 +2571,8 @@
CODE="
#if defined(NV_DRM_DRMP_H_PRESENT)
#include <drm/drmP.h>
+ #else
+ #include <drm/drm_crtc.h>
#endif
#if defined(NV_DRM_DRM_CRTC_H_PRESENT)
@@ -2562,6 +2595,8 @@
CODE="
#if defined(NV_DRM_DRMP_H_PRESENT)
#include <drm/drmP.h>
+ #else
+ #include <drm/drm_encoder.h>
#endif
#if defined(NV_DRM_DRM_ENCODER_H_PRESENT)
@@ -2583,6 +2618,8 @@
echo "$CONFTEST_PREAMBLE
#if defined(NV_DRM_DRMP_H_PRESENT)
#include <drm/drmP.h>
+ #else
+ #include <drm/drm_plane.h>
#endif
#if defined(NV_DRM_DRM_PLANE_H_PRESENT)
@@ -2616,6 +2653,8 @@
echo "$CONFTEST_PREAMBLE
#if defined(NV_DRM_DRMP_H_PRESENT)
#include <drm/drmP.h>
+ #else
+ #include <drm/drm_plane.h>
#endif
#if defined(NV_DRM_DRM_PLANE_H_PRESENT)
@@ -2893,6 +2932,7 @@
#
echo "$CONFTEST_PREAMBLE
#include <drm/drm_crtc_helper.h>
+ #include <drm/drm_probe_helper.h>
void drm_helper_mode_fill_fb_struct(struct drm_device *dev,
struct drm_framebuffer *fb,
const struct drm_mode_fb_cmd2 *mode_cmd)
@@ -2919,6 +2959,7 @@
#
echo "$CONFTEST_PREAMBLE
#include <drm/drm_crtc_helper.h>
+ #include <drm/drm_probe_helper.h>
void drm_helper_mode_fill_fb_struct(struct drm_framebuffer *fb,
const struct drm_mode_fb_cmd2 *mode_cmd)
{
--- a/kernel/nvidia-drm/nvidia-drm-connector.c 2021-06-03 01:10:01.000000000 +0200
+++ b/kernel/nvidia-drm/nvidia-drm-connector.c 2021-09-13 19:54:43.389276174 +0200
@@ -39,6 +39,7 @@
#include <drm/drm_probe_helper.h>
#endif
#include <drm/drm_crtc_helper.h>
+#include <drm/drm_probe_helper.h>
#include <drm/drm_atomic.h>
#include <drm/drm_atomic_helper.h>
--- a/kernel/nvidia-drm/nvidia-drm-gem-nvkms-memory.h 2021-06-03 01:10:01.000000000 +0200
+++ b/kernel/nvidia-drm/nvidia-drm-gem-nvkms-memory.h 2021-09-13 19:54:43.389276174 +0200
@@ -20,15 +20,16 @@
* DEALINGS IN THE SOFTWARE.
*/
+#define NV_DRM_AVAILABLE
#ifndef __NVIDIA_DRM_GEM_NVKMS_MEMORY_H__
#define __NVIDIA_DRM_GEM_NVKMS_MEMORY_H__
#include "nvidia-drm-conftest.h"
+#include "nvidia-drm-gem.h"
+#include "nvidia-drm-priv.h"
#if defined(NV_DRM_ATOMIC_MODESET_AVAILABLE)
-#include "nvidia-drm-gem.h"
-
struct nv_drm_gem_nvkms_memory {
struct nv_drm_gem_object base;
--- a/kernel/nvidia-drm/nvidia-drm-gem.h 2021-06-03 01:10:01.000000000 +0200
+++ b/kernel/nvidia-drm/nvidia-drm-gem.h 2021-09-13 19:54:43.395942799 +0200
@@ -20,13 +20,15 @@
* DEALINGS IN THE SOFTWARE.
*/
+#include <linux/version.h>
+#include "linux/dma-buf.h"
+#include "drm/drm_gem.h"
+
#ifndef __NVIDIA_DRM_GEM_H__
#define __NVIDIA_DRM_GEM_H__
#include "nvidia-drm-conftest.h"
-#if defined(NV_DRM_AVAILABLE)
-
#include "nvidia-drm-priv.h"
#if defined(NV_DRM_DRMP_H_PRESENT)
@@ -51,6 +53,15 @@
struct sg_table *(*prime_get_sg_table)(struct nv_drm_gem_object *nv_gem);
void *(*prime_vmap)(struct nv_drm_gem_object *nv_gem);
void (*prime_vunmap)(struct nv_drm_gem_object *nv_gem, void *address);
+ struct drm_gem_object *(*prime_dup)(struct drm_device *dev,
+ const struct nv_drm_gem_object *nv_gem_src);
+ int (*mmap)(struct nv_drm_gem_object *nv_gem, struct vm_area_struct *vma);
+ vm_fault_t (*handle_vma_fault)(struct nv_drm_gem_object *nv_gem,
+ struct vm_area_struct *vma,
+ struct vm_fault *vmf);
+ int (*create_mmap_offset)(struct nv_drm_device *nv_dev,
+ struct nv_drm_gem_object *nv_gem,
+ uint64_t *offset);
};
struct nv_drm_gem_object {
@@ -193,6 +204,4 @@
nv_dma_resv_t* nv_drm_gem_prime_res_obj(struct drm_gem_object *obj);
#endif
-#endif /* NV_DRM_AVAILABLE */
-
#endif /* __NVIDIA_DRM_GEM_H__ */
--- a/kernel/nvidia-drm/nvidia-drm-gem.c 2021-06-03 01:10:01.000000000 +0200
+++ b/kernel/nvidia-drm/nvidia-drm-gem.c 2021-09-13 19:54:43.395942799 +0200
@@ -20,6 +20,7 @@
* DEALINGS IN THE SOFTWARE.
*/
+#include <linux/version.h>
#include "nvidia-drm-conftest.h"
#if defined(NV_DRM_AVAILABLE)
--- a/kernel/nvidia-drm/nvidia-drm-fb.c 2021-06-03 01:10:01.000000000 +0200
+++ b/kernel/nvidia-drm/nvidia-drm-fb.c 2021-09-13 19:54:43.389276174 +0200
@@ -31,6 +31,7 @@
#include "nvidia-drm-gem.h"
#include <drm/drm_crtc_helper.h>
+#include <drm/drm_probe_helper.h>
static void nv_drm_framebuffer_destroy(struct drm_framebuffer *fb)
{
--- a/kernel/nvidia-drm/nvidia-drm-encoder.c 2021-06-03 01:10:01.000000000 +0200
+++ b/kernel/nvidia-drm/nvidia-drm-encoder.c 2021-09-13 19:54:43.389276174 +0200
@@ -31,6 +31,12 @@
#include "nvidia-drm-crtc.h"
#include "nvidia-drm-helper.h"
+#include <drm/drm_crtc_helper.h>
+#include <drm/drm_probe_helper.h>
+
+#include <drm/drm_atomic.h>
+#include <drm/drm_atomic_helper.h>
+
/*
* Commit fcd70cd36b9b ("drm: Split out drm_probe_helper.h")
* moves a number of helper function definitions from
--- a/kernel/nvidia-drm/nvidia-drm-drv.c 2021-06-03 01:10:01.000000000 +0200
+++ b/kernel/nvidia-drm/nvidia-drm-drv.c 2021-09-13 19:54:43.389276174 +0200
@@ -19,8 +19,12 @@
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
-
+#include <linux/version.h>
#include "nvidia-drm-conftest.h" /* NV_DRM_AVAILABLE and NV_DRM_DRM_GEM_H_PRESENT */
+#include <drm/drm_gem.h>
+
+#include <drm/drm_crtc_helper.h>
+#include <drm/drm_probe_helper.h>
#include "nvidia-drm-priv.h"
#include "nvidia-drm-drv.h"
@@ -737,6 +741,13 @@
#endif
};
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 12, 0))
+// Reimport trivial forwarder function deleted in commit "drm: Don't export the drm_gem_dumb_destroy() function" (file drivers/gpu/drm/drm_gem.c)
+static int nv_drm_gem_dumb_destroy(struct drm_file *file, struct drm_device *dev, u32 handle)
+{
+ return drm_gem_handle_delete(file, handle);
+}
+#endif
/*
* Update the global nv_drm_driver for the intended features.
@@ -760,7 +771,11 @@
nv_drm_driver.dumb_create = nv_drm_dumb_create;
nv_drm_driver.dumb_map_offset = nv_drm_dumb_map_offset;
- nv_drm_driver.dumb_destroy = nv_drm_dumb_destroy;
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 12, 0))
+ nv_drm_driver.dumb_destroy = drm_gem_dumb_destroy;
+ #else
+ nv_drm_driver.dumb_destroy = nv_drm_gem_dumb_destroy;
+ #endif
#if defined(NV_DRM_DRIVER_HAS_GEM_PRIME_CALLBACKS)
nv_drm_driver.gem_vm_ops = &nv_drm_gem_vma_ops;
--- a/kernel/nvidia-drm/nvidia-drm-crtc.c 2021-06-03 01:10:01.000000000 +0200
+++ b/kernel/nvidia-drm/nvidia-drm-crtc.c 2021-09-13 19:54:43.389276174 +0200
@@ -19,7 +19,7 @@
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
-
+#include <linux/version.h>
#include "nvidia-drm-conftest.h" /* NV_DRM_ATOMIC_MODESET_AVAILABLE */
#if defined(NV_DRM_ATOMIC_MODESET_AVAILABLE)
@@ -34,6 +34,7 @@
#include "nvidia-drm-ioctl.h"
#include <drm/drm_crtc_helper.h>
+#include <drm/drm_probe_helper.h>
#include <drm/drm_plane_helper.h>
#include <drm/drm_atomic.h>
--- a/kernel/nvidia-drm/nvidia-drm-crtc.h 2021-06-03 01:10:01.000000000 +0200
+++ b/kernel/nvidia-drm/nvidia-drm-crtc.h 2021-09-13 19:54:43.389276174 +0200
@@ -20,10 +20,14 @@
* DEALINGS IN THE SOFTWARE.
*/
+#include <linux/version.h>
+#include "nvidia-drm-conftest.h"
+#include "nvidia-drm-priv.h"
+#include "linux/dma-buf.h"
+
#ifndef __NVIDIA_DRM_CRTC_H__
#define __NVIDIA_DRM_CRTC_H__
-#include "nvidia-drm-conftest.h"
#if defined(NV_DRM_ATOMIC_MODESET_AVAILABLE)
@@ -139,7 +143,7 @@
struct nv_drm_crtc *nv_drm_crtc_lookup(struct nv_drm_device *nv_dev, NvU32 head)
{
struct drm_crtc *crtc;
- nv_drm_for_each_crtc(crtc, nv_dev->dev) {
+ drm_for_each_crtc(crtc, nv_dev->dev) {
struct nv_drm_crtc *nv_crtc = to_nv_crtc(crtc);
if (nv_crtc->head == head) {
--- a/kernel/common/inc/nv-time.h 2021-06-03 01:09:57.000000000 +0200
+++ b/kernel/common/inc/nv-time.h 2021-09-13 19:54:43.392609486 +0200
@@ -24,12 +24,24 @@
#define __NV_TIME_H__
#include "conftest.h"
+#include "nv-linux.h"
#include <linux/time.h>
#if defined(NV_LINUX_KTIME_H_PRESENT)
#include <linux/ktime.h>
#endif
+//---------------------------------------------------------------------------
+//
+// Misc services.
+//
+//---------------------------------------------------------------------------
+
+#define NV_MSECS_PER_JIFFIE (1000 / HZ)
+#define NV_MSECS_TO_JIFFIES(msec) ((msec) * HZ / 1000)
+#define NV_USECS_PER_JIFFIE (1000000 / HZ)
+#define NV_USECS_TO_JIFFIES(usec) ((usec) * HZ / 1000000)
+
#if defined (NV_TIMEVAL_PRESENT)
typedef struct timeval nv_timeval;
#else
@@ -52,4 +64,92 @@
#endif // NV_DO_GETTIMEOFDAY_PRESENT
}
+
+
+/*
+ * Sleep for specified milliseconds. Yields the CPU to scheduler.
+ *
+ * On Linux, a jiffie represents the time passed in between two timer
+ * interrupts. The number of jiffies per second (HZ) varies across the
+ * supported platforms. On i386, where HZ is 100, a timer interrupt is
+ * generated every 10ms. NV_MSECS_TO_JIFFIES should be accurate independent of
+ * the actual value of HZ; any partial jiffies will be 'floor'ed, the
+ * remainder will be accounted for with mdelay().
+ */
+static inline NV_STATUS NV_API_CALL nv_sleep_ms(unsigned int ms)
+{
+ unsigned long MicroSeconds;
+ unsigned long jiffies;
+ unsigned long mdelay_safe_msec;
+ nv_timeval tm_end, tm_aux;
+
+ #ifdef NV_CHECK_DELAY_ACCURACY
+ nv_timeval tm_start;
+#endif
+
+ nv_gettimeofday(&tm_aux);
+#ifdef NV_CHECK_DELAY_ACCURACY
+ tm_start = tm_aux;
+#endif
+
+ if (in_irq() && (ms > NV_MAX_ISR_DELAY_MS))
+ {
+ return NV_ERR_GENERIC;
+ }
+ if (!NV_MAY_SLEEP())
+ {
+ mdelay(ms);
+ return NV_OK;
+ }
+
+ MicroSeconds = ms * 1000;
+ tm_end.tv_usec = MicroSeconds;
+ tm_end.tv_sec = 0;
+ NV_TIMERADD(&tm_aux, &tm_end, &tm_end);
+
+ /* do we have a full jiffie to wait? */
+ jiffies = NV_USECS_TO_JIFFIES(MicroSeconds);
+
+ if (jiffies)
+ {
+ //
+ // If we have at least one full jiffy to wait, give up
+ // up the CPU; since we may be rescheduled before
+ // the requested timeout has expired, loop until less
+ // than a jiffie of the desired delay remains.
+ //
+ set_current_state(TASK_INTERRUPTIBLE);
+ do
+ {
+ schedule_timeout(jiffies);
+ nv_gettimeofday(&tm_aux);
+ if (NV_TIMERCMP(&tm_aux, &tm_end, <))
+ {
+ NV_TIMERSUB(&tm_end, &tm_aux, &tm_aux);
+ MicroSeconds = tm_aux.tv_usec + tm_aux.tv_sec * 1000000;
+ }
+ else
+ MicroSeconds = 0;
+ } while ((jiffies = NV_USECS_TO_JIFFIES(MicroSeconds)) != 0);
+ }
+
+ if (MicroSeconds > 1000)
+ {
+ mdelay_safe_msec = MicroSeconds / 1000;
+ mdelay(mdelay_safe_msec);
+ MicroSeconds %= 1000;
+ }
+ if (MicroSeconds)
+ {
+ udelay(MicroSeconds);
+ }
+#ifdef NV_CHECK_DELAY_ACCURACY
+ nv_gettimeofday(&tm_aux);
+ timersub(&tm_aux, &tm_start, &tm_aux);
+ nv_printf(NV_DBG_ERRORS, "NVRM: osDelay %dmsec: %d.%06dsec\n",
+ MilliSeconds, tm_aux.tv_sec, tm_aux.tv_usec);
+#endif
+
+ return NV_OK;
+}
#endif // __NV_TIME_H__
--- a/kernel/nvidia/os-interface.c 2021-06-03 01:09:57.000000000 +0200
+++ b/kernel/nvidia/os-interface.c 2021-09-13 19:54:43.392609486 +0200
@@ -512,7 +512,7 @@
if (in_irq() && (MicroSeconds > NV_MAX_ISR_DELAY_US))
return NV_ERR_GENERIC;
-
+
mdelay_safe_msec = MicroSeconds / 1000;
if (mdelay_safe_msec)
mdelay(mdelay_safe_msec);
--- a/kernel/common/inc/nv-linux.h 2021-06-03 01:09:57.000000000 +0200
+++ b/kernel/common/inc/nv-linux.h 2021-09-13 19:54:43.395942799 +0200
@@ -1862,11 +1862,12 @@
#define NV_FILE_INODE(file) (file)->f_dentry->d_inode
#endif
-/* Stub out UVM in multi-RM builds */
+/* Stub out UVM in multi-RM builds
#if (NV_BUILD_MODULE_INSTANCES != 0)
#undef NV_UVM_ENABLE
#endif
+*/
#if defined(NV_DOM0_KERNEL_PRESENT) || defined(NV_VGPU_KVM_BUILD)
#define NV_VGX_HYPER
--- a/kernel/nvidia-drm/nvidia-drm-gem-user-memory.c 2021-06-03 01:10:01.000000000 +0200
+++ b/kernel/nvidia-drm/nvidia-drm-gem-user-memory.c 2021-09-13 19:54:43.395942799 +0200
@@ -20,6 +20,7 @@
* DEALINGS IN THE SOFTWARE.
*/
+#include <linux/version.h>
#include "nvidia-drm-conftest.h"
#if defined(NV_DRM_AVAILABLE)
@@ -32,6 +33,10 @@
#include "nvidia-drm-helper.h"
#include "nvidia-drm-ioctl.h"
+#include "linux/dma-buf.h"
+#include "linux/mm.h"
+#include "nv-mm.h"
+
static inline
void __nv_drm_gem_user_memory_free(struct nv_drm_gem_object *nv_gem)
{
@@ -70,7 +75,7 @@
nv_drm_vunmap(address);
}
-static struct nv_drm_gem_object_funcs __nv_gem_user_memory_ops = {
+const struct nv_drm_gem_object_funcs __nv_gem_user_memory_ops = {
.free = __nv_drm_gem_user_memory_free,
.prime_get_sg_table = __nv_drm_gem_user_memory_prime_get_sg_table,
.prime_vmap = __nv_drm_gem_user_memory_prime_vmap,
--- a/kernel/nvidia/nv-mmap.c 2021-06-03 01:09:57.000000000 +0200
+++ b/kernel/nvidia/nv-mmap.c 2021-09-14 10:44:49.850587884 +0200
@@ -253,7 +253,8 @@
#endif
case NV_MEMORY_CACHED:
if (NV_ALLOW_CACHING(memory_type))
- break;
+ // Intentional fallthrough.
+ break;
default:
nv_printf(NV_DBG_ERRORS,
"NVRM: VM: cache type %d not supported for memory type %d!\n",
kernel-5.17.patch
:
From 026a2a54a234cdb7bf78c17be7ea29d8dcf9f390 Mon Sep 17 00:00:00 2001
From: Joan Bruguera <joanbrugueram@gmail.com>
Date: Sun, 23 Jan 2022 16:28:18 +0100
Subject: [PATCH] Tentative fix for NVIDIA 470.94 driver for Linux 5.17-rc1
See also: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=359745d78351c6f5442435f81549f0207ece28aa
---
kernel/common/inc/nv-procfs.h | 3 +++
1 file changed, 3 insertions(+)
diff --git a/kernel/common/inc/nv-procfs.h b/kernel/common/inc/nv-procfs.h
index 7c3e1a3..462eac1 100644
--- a/kernel/common/inc/nv-procfs.h
+++ b/kernel/common/inc/nv-procfs.h
@@ -10,6 +10,7 @@
#ifndef _NV_PROCFS_UTILS_H
#define _NV_PROCFS_UTILS_H
+#include <linux/version.h>
#include "conftest.h"
#ifdef CONFIG_PROC_FS
@@ -87,6 +88,8 @@ typedef struct file_operations nv_proc_ops_t;
#if defined(NV_PDE_DATA_PRESENT)
# define NV_PDE_DATA(inode) PDE_DATA(inode)
+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 17, 0))
+# define NV_PDE_DATA(inode) pde_data(inode)
#else
# define NV_PDE_DATA(inode) PDE(inode)->data
#endif
--
2.34.1
If you have all of them together, just run
makepkg -fi
This should update your driver with the patched one.