Skip to content

Instantly share code, notes, and snippets.

@joanbm
Created July 12, 2021 19:03
Show Gist options
  • Star 10 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save joanbm/144a965c36fc1dc0d1f1b9be3438a368 to your computer and use it in GitHub Desktop.
Save joanbm/144a965c36fc1dc0d1f1b9be3438a368 to your computer and use it in GitHub Desktop.
Tentative fix for NVIDIA 465.31 driver for Linux 5.14-rc1
From f18c541edc5e122b06b0c1e65d0a422f0b8109e7 Mon Sep 17 00:00:00 2001
From: Joan Bruguera <joanbrugueram@gmail.com>
Date: Fri, 2 Jul 2021 02:09:58 +0200
Subject: [PATCH] Tentative fix for NVIDIA 465.31 driver for Linux 5.14-rc1
---
common/inc/nv-time.h | 6 ++++++
nvidia-drm/nvidia-drm-drv.c | 4 ++++
2 files changed, 10 insertions(+)
diff --git a/common/inc/nv-time.h b/common/inc/nv-time.h
index dc80806..cc343a5 100644
--- a/common/inc/nv-time.h
+++ b/common/inc/nv-time.h
@@ -23,6 +23,7 @@
#ifndef __NV_TIME_H__
#define __NV_TIME_H__
+#include <linux/version.h>
#include "conftest.h"
#include <linux/sched.h>
#include <linux/delay.h>
@@ -205,7 +206,12 @@ static inline NV_STATUS nv_sleep_ms(unsigned int ms)
// the requested timeout has expired, loop until less
// than a jiffie of the desired delay remains.
//
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 14, 0))
current->state = TASK_INTERRUPTIBLE;
+#else
+ // Rel. commit "sched: Change task_struct::state" (Peter Zijlstra, Jun 11 2021)
+ WRITE_ONCE(current->__state, TASK_INTERRUPTIBLE);
+#endif
do
{
schedule_timeout(jiffies);
diff --git a/nvidia-drm/nvidia-drm-drv.c b/nvidia-drm/nvidia-drm-drv.c
index 84d4479..99ea552 100644
--- a/nvidia-drm/nvidia-drm-drv.c
+++ b/nvidia-drm/nvidia-drm-drv.c
@@ -20,6 +20,7 @@
* DEALINGS IN THE SOFTWARE.
*/
+#include <linux/version.h>
#include "nvidia-drm-conftest.h" /* NV_DRM_AVAILABLE and NV_DRM_DRM_GEM_H_PRESENT */
#include "nvidia-drm-priv.h"
@@ -903,9 +904,12 @@ static void nv_drm_register_drm_device(const nv_gpu_info_t *gpu_info)
dev->dev_private = nv_dev;
nv_dev->dev = dev;
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 14, 0))
+ // Rel. commit "drm: Remove pdev field from struct drm_device" (Thomas Zimmermann, 3 May 2021)
if (device->bus == &pci_bus_type) {
dev->pdev = to_pci_dev(device);
}
+#endif
/* Register DRM device to DRM sub-system */
--
2.32.0
@juricajelaca
Copy link

Hey there I'm a bit of a noob on linux. Can you explain how can I apply this patch?

@joanbm
Copy link
Author

joanbm commented Oct 2, 2021

Hey there I'm a bit of a noob on linux. Can you explain how can I apply this patch?

Hi @juricajelaca, this patch was only useful for testing Linux kernel release candidates as they came out.

There's a new version of the NVIDIA proprietary Linux drivers that already supports Linux 5.14 without any patch, this is probably what you want to install (download it from your distribution's repositories if you can):
https://us.download.nvidia.com/XFree86/Linux-x86_64/470.74/NVIDIA-Linux-x86_64-470.74.run

If you really want to install use the old version of the NVIDIA drivers with this patch, you should do it like this from a terminal:

$ sh NVIDIA-Linux-x86_64-465.31.run --extract-only
$ cd NVIDIA-Linux-x86_64-465.31/kernel/
$ patch -Np1 -i ../../nvidia-fix-linux-5.14.patch
$ cd ..
$ sudo ./nvidia-installer 

@juricajelaca
Copy link

Hey there I'm a bit of a noob on linux. Can you explain how can I apply this patch?

Hi @juricajelaca, this patch was only useful for testing Linux kernel release candidates as they came out.

There's a new version of the NVIDIA proprietary Linux drivers that already supports Linux 5.14 without any patch, this is probably what you want to install (download it from your distribution's repositories if you can): https://us.download.nvidia.com/XFree86/Linux-x86_64/470.74/NVIDIA-Linux-x86_64-470.74.run

If you really want to install use the old version of the NVIDIA drivers with this patch, you should do it like this from a terminal:

$ sh NVIDIA-Linux-x86_64-465.31.run --extract-only
$ cd NVIDIA-Linux-x86_64-465.31/kernel/
$ patch -Np1 -i ../../nvidia-fix-linux-5.14.patch
$ cd ..
$ sudo ./nvidia-installer 

Woah, thanks for the fast reply :). Guess I'm having some other problems then, cause my graphics won't change from Integrated to nvidia for some reason, even if I installed the latest driver.

@OfekShochat
Copy link

thank you soo much! this solved my problem with the 5.14 kernel!!!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment