summaryrefslogtreecommitdiffstats
path: root/system/nvidia-legacy340-kernel
diff options
context:
space:
mode:
author Matteo Bernardini <ponce@slackbuilds.org>2022-05-14 19:58:58 +0200
committer Matteo Bernardini <ponce@slackbuilds.org>2022-05-14 19:58:58 +0200
commitdaf6a07fb29d07e32f567d8cdb5946d39090faa2 (patch)
tree7c0296c9ed1f3c4fa0963b8594ba6232bcce614a /system/nvidia-legacy340-kernel
parent73c827ffdc0a7d7133a81f57d98527af17084b75 (diff)
downloadslackbuilds-daf6a07fb29d07e32f567d8cdb5946d39090faa2.tar.gz
slackbuilds-daf6a07fb29d07e32f567d8cdb5946d39090faa2.tar.xz
system/nvidia-legacy340-kernel: Patch for the newer kernels.
Signed-off-by: Matteo Bernardini <ponce@slackbuilds.org>
Diffstat (limited to 'system/nvidia-legacy340-kernel')
-rw-r--r--system/nvidia-legacy340-kernel/nvidia-legacy340-kernel.SlackBuild3
-rw-r--r--system/nvidia-legacy340-kernel/patches/0005-kernel-5.11.patch169
-rw-r--r--system/nvidia-legacy340-kernel/patches/0006-kernel-5.14.patch213
-rw-r--r--system/nvidia-legacy340-kernel/patches/0007-kernel-5.15.patch14
-rw-r--r--system/nvidia-legacy340-kernel/patches/0008-kernel-5.16.patch30
-rw-r--r--system/nvidia-legacy340-kernel/patches/0009-kernel-5.17.patch57
6 files changed, 476 insertions, 10 deletions
diff --git a/system/nvidia-legacy340-kernel/nvidia-legacy340-kernel.SlackBuild b/system/nvidia-legacy340-kernel/nvidia-legacy340-kernel.SlackBuild
index f4d17cc03d..8700e2a20a 100644
--- a/system/nvidia-legacy340-kernel/nvidia-legacy340-kernel.SlackBuild
+++ b/system/nvidia-legacy340-kernel/nvidia-legacy340-kernel.SlackBuild
@@ -74,6 +74,8 @@ TMP=${TMP:-/tmp/SBo}
PKG=${PKG:-$TMP/package-$PRGNAM}
OUTPUT=${OUTPUT:-/tmp}
+set -e
+
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP || exit 1
@@ -90,6 +92,7 @@ find -L . \
for i in $CWD/patches/* ; do patch -p1 < $i ; done
(cd kernel || exit 1
+ sed -i "s|-DNDEBUG$|-DNDEBUG -Wno-error=return-type -Wno-error=implicit-function-declaration|" Makefile
make SYSSRC=$KERNELPATH module || exit 1
cd uvm
sed -i "s|-O2$|-O2 -Wno-error=incompatible-pointer-types|" Makefile
diff --git a/system/nvidia-legacy340-kernel/patches/0005-kernel-5.11.patch b/system/nvidia-legacy340-kernel/patches/0005-kernel-5.11.patch
index f401d98ce3..382d7d3b5a 100644
--- a/system/nvidia-legacy340-kernel/patches/0005-kernel-5.11.patch
+++ b/system/nvidia-legacy340-kernel/patches/0005-kernel-5.11.patch
@@ -1,25 +1,174 @@
-
+diff -Naur NVIDIA-Linux-x86_64-340.108-old/kernel/conftest.sh NVIDIA-Linux-x86_64-340.108-new/kernel/conftest.sh
+--- NVIDIA-Linux-x86_64-340.108-old/kernel/conftest.sh 2021-05-24 20:08:18.743742335 +0200
++++ NVIDIA-Linux-x86_64-340.108-new/kernel/conftest.sh 2021-05-24 20:13:18.019314390 +0200
+@@ -1578,21 +1578,21 @@
+ #include <drm/drm_drv.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;
+- drv.gem_prime_pin = 0;
+- drv.gem_prime_get_sg_table = 0;
+- drv.gem_prime_vmap = 0;
+- drv.gem_prime_vunmap = 0;
+- (void)drm_gem_prime_import;
+- (void)drm_gem_prime_export;
++
++ /* 2013-10-02 1bb72532ac260a2d3982b40bdd4c936d779d0d16 */
++ (void)drm_dev_alloc;
++
++ /* 2013-10-02 c22f0ace1926da399d9a16dfaf09174c1b03594c */
++ (void)drm_dev_register;
++
++ /* 2013-10-02 c3a49737ef7db0bdd4fcf6cf0b7140a883e32b2a */
++ (void)drm_dev_unregister;
+ }"
+
+ compile_check_conftest "$CODE" "NV_DRM_AVAILABLE" "" "generic"
+diff -Naur NVIDIA-Linux-x86_64-340.108-old/kernel/nv-drm.c NVIDIA-Linux-x86_64-340.108-new/kernel/nv-drm.c
+--- NVIDIA-Linux-x86_64-340.108-old/kernel/nv-drm.c 2021-05-24 20:08:18.779739237 +0200
++++ NVIDIA-Linux-x86_64-340.108-new/kernel/nv-drm.c 2021-05-24 20:42:13.443288819 +0200
+@@ -60,6 +60,8 @@
+ #else
+ #include <drm/drm_agpsupport.h>
+
++#include "linux/dma-buf.h"
++
+ struct nv_drm_agp_head {
+ struct agp_kern_info agp_info;
+ struct list_head memory;
+@@ -210,8 +212,10 @@
+
+ /* No locking needed since shadow-attach is single-threaded since it may
+ * only be called from the per-driver module init hook. */
++#if LINUX_VERSION_CODE <= KERNEL_VERSION(5, 10, 0)
+ if (drm_core_check_feature(dev, DRIVER_LEGACY))
+ list_add_tail(&dev->legacy_dev_list, &driver->legacy_dev_list);
++#endif
+
+ return 0;
+
+@@ -239,8 +243,10 @@
+ if (WARN_ON(!(driver->driver_features & DRIVER_LEGACY)))
+ return -EINVAL;
+
++#if LINUX_VERSION_CODE <= KERNEL_VERSION(5, 10, 0)
+ /* If not using KMS, fall back to stealth mode manual scanning. */
+ INIT_LIST_HEAD(&driver->legacy_dev_list);
++#endif
+ for (i = 0; pdriver->id_table[i].vendor != 0; i++) {
+ pid = &pdriver->id_table[i];
+
+@@ -273,11 +279,13 @@
+ if (!(driver->driver_features & DRIVER_LEGACY)) {
+ WARN_ON(1);
+ } else {
++#if LINUX_VERSION_CODE <= KERNEL_VERSION(5, 10, 0)
+ list_for_each_entry_safe(dev, tmp, &driver->legacy_dev_list,
+ legacy_dev_list) {
+ list_del(&dev->legacy_dev_list);
+ drm_put_dev(dev);
+ }
++#endif
+ }
+ DRM_INFO("Module unloaded\n");
+ }
+@@ -402,6 +410,39 @@
+ .llseek = noop_llseek,
+ };
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 11, 0)
++struct sg_table *nv_drm_gem_prime_get_sg_table(struct drm_gem_object *gem)
++{
++ return nv_gem_prime_get_sg_table(gem);
++}
++
++static int nv_drm_gem_vmap(struct drm_gem_object *gem,
++ struct dma_buf_map *map)
++{
++ map->vaddr = nv_gem_prime_vmap(gem);
++ if (map->vaddr == NULL) {
++ return -ENOMEM;
++ }
++ map->is_iomem = true;
++ return 0;
++}
++
++static void nv_drm_gem_vunmap(struct drm_gem_object *gem,
++ struct dma_buf_map *map)
++{
++ nv_gem_prime_vunmap(gem, map->vaddr);
++ map->vaddr = NULL;
++}
++
++static struct drm_gem_object_funcs nv_drm_gem_object_funcs = {
++ .free = nv_gem_free,
++ .export = drm_gem_prime_export,
++ .get_sg_table = nv_drm_gem_prime_get_sg_table,
++ .vmap = nv_drm_gem_vmap,
++ .vunmap = nv_drm_gem_vunmap,
++};
++#endif
++
+ static struct drm_driver nv_drm_driver = {
+
+ .driver_features = DRIVER_GEM
+@@ -420,17 +461,19 @@
+ .set_busid = drm_pci_set_busid,
+ #endif
+
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 9, 0)
+- .gem_free_object_unlocked = nv_gem_free,
+-#else
++#if LINUX_VERSION_CODE <= KERNEL_VERSION(5, 8, 0)
+ .gem_free_object = nv_gem_free,
++#elif LINUX_VERSION_CODE <= KERNEL_VERSION(5, 10, 0)
++ .gem_free_object_unlocked = nv_gem_free,
+ #endif
+
+ .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
++#if LINUX_VERSION_CODE <= KERNEL_VERSION(5, 10, 0)
+ .gem_prime_export = drm_gem_prime_export,
+ .gem_prime_get_sg_table = nv_gem_prime_get_sg_table,
+ .gem_prime_vmap = nv_gem_prime_vmap,
+ .gem_prime_vunmap = nv_gem_prime_vunmap,
++#endif
+
+ .name = "nvidia-drm",
+ .desc = "NVIDIA DRM driver",
diff -Naur NVIDIA-Linux-x86_64-340.108-old/kernel/nv-linux.h NVIDIA-Linux-x86_64-340.108-new/kernel/nv-linux.h
---- NVIDIA-Linux-x86_64-340.108-old/kernel/nv-linux.h 2021-02-23 20:01:52.429999710 +0100
-+++ NVIDIA-Linux-x86_64-340.108-new/kernel/nv-linux.h 2021-02-23 14:48:00.163333638 +0100
-@@ -119,7 +119,7 @@
+--- NVIDIA-Linux-x86_64-340.108-old/kernel/nv-linux.h 2021-05-24 20:08:18.775739581 +0200
++++ NVIDIA-Linux-x86_64-340.108-new/kernel/nv-linux.h 2021-05-24 20:09:18.748287771 +0200
+@@ -119,7 +119,9 @@
#include <asm/tlbflush.h> /* flush_tlb(), flush_tlb_all() */
#include <linux/cpu.h> /* CPU hotplug support */
#endif
-#include <asm/kmap_types.h> /* page table entry lookup */
-+//#include <asm/kmap_types.h> /* page table entry lookup */
++#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 11, 0)
++ #include <asm/kmap_types.h> /* page table entry lookup */
++#endif
#include <linux/pci.h> /* pci_find_class, etc */
#include <linux/interrupt.h> /* tasklets, interrupt helpers */
---- a/kernel/uvm/nvidia_uvm_linux.h 2019-12-11 17:04:24.000000000 -0500
-+++ b/kernel/uvm/nvidia_uvm_linux.h 2021-02-24 06:26:26.237367942 -0500
-@@ -141,7 +141,7 @@
+diff -Naur NVIDIA-Linux-x86_64-340.108-old/kernel/uvm/nvidia_uvm_linux.h NVIDIA-Linux-x86_64-340.108-new/kernel/uvm/nvidia_uvm_linux.h
+--- NVIDIA-Linux-x86_64-340.108-old/kernel/uvm/nvidia_uvm_linux.h 2021-05-24 20:08:18.775739581 +0200
++++ NVIDIA-Linux-x86_64-340.108-new/kernel/uvm/nvidia_uvm_linux.h 2021-05-24 20:09:18.749287739 +0200
+@@ -141,7 +141,9 @@
#if !defined(NV_VMWARE)
#include <asm/tlbflush.h> /* flush_tlb(), flush_tlb_all() */
#endif
-#include <asm/kmap_types.h> /* page table entry lookup */
-+//#include <asm/kmap_types.h> /* page table entry lookup */
++#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 11, 0)
++ #include <asm/kmap_types.h> /* page table entry lookup */
++#endif
#include <linux/interrupt.h> /* tasklets, interrupt helpers */
#include <linux/timer.h>
-
diff --git a/system/nvidia-legacy340-kernel/patches/0006-kernel-5.14.patch b/system/nvidia-legacy340-kernel/patches/0006-kernel-5.14.patch
new file mode 100644
index 0000000000..56c8c45ddb
--- /dev/null
+++ b/system/nvidia-legacy340-kernel/patches/0006-kernel-5.14.patch
@@ -0,0 +1,213 @@
+diff -Naur NVIDIA-Linux-x86_64-340.108-no-compat32.5.13/kernel/nv-drm.c NVIDIA-Linux-x86_64-340.108-no-compat32.5.14/kernel/nv-drm.c
+--- NVIDIA-Linux-x86_64-340.108-no-compat32.5.13/kernel/nv-drm.c 2021-07-25 10:29:29.336505688 +0200
++++ NVIDIA-Linux-x86_64-340.108-no-compat32.5.14/kernel/nv-drm.c 2021-09-16 16:49:10.929858547 +0200
+@@ -57,8 +57,11 @@
+ #if defined(NV_DRM_GET_PCI_DEV_PRESENT)
+ #define nv_drm_get_pci_dev drm_get_pci_dev
+ #else
++#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 14, 0)
+ #include <drm/drm_agpsupport.h>
+-
++#else
++#include <drm/drm_legacy.h>
++#endif
+ #include "linux/dma-buf.h"
+
+ struct nv_drm_agp_head {
+@@ -82,6 +85,11 @@
+ struct list_head head;
+ };
+
++struct nv_drm_extra_priv_data {
++ struct pci_dev *pdev;
++ struct drm_agp_head *agp;
++};
++
+ /*
+ * Code from drm_agp_init/nv_drm_{free,unbind}_agp
+ * Extracted from commit: 5b8b9d0c6d0e0f1993c6c56deaf9646942c49d94, file: drivers/gpu/drm/drm_agpsupport.c
+@@ -89,13 +97,14 @@
+ struct drm_agp_head *nv_drm_agp_init(struct drm_device *dev)
+ {
+ struct nv_drm_agp_head *head = NULL;
++ struct nv_drm_extra_priv_data *extra = dev->dev_private;
+
+ head = kzalloc(sizeof(*head), GFP_KERNEL);
+ if (!head)
+ return NULL;
+- head->bridge = agp_find_bridge(dev->pdev);
++ head->bridge = agp_find_bridge(extra->pdev);
+ if (!head->bridge) {
+- head->bridge = agp_backend_acquire(dev->pdev);
++ head->bridge = agp_backend_acquire(extra->pdev);
+ if (!head->bridge) {
+ kfree(head);
+ return NULL;
+@@ -133,48 +142,71 @@
+ static void nv_drm_pci_agp_init(struct drm_device *dev)
+ {
+ if (drm_core_check_feature(dev, DRIVER_USE_AGP)) {
+- if (pci_find_capability(dev->pdev, PCI_CAP_ID_AGP))
+- dev->agp = nv_drm_agp_init(dev);
+- if (dev->agp) {
+- dev->agp->agp_mtrr = arch_phys_wc_add(
+- dev->agp->agp_info.aper_base,
+- dev->agp->agp_info.aper_size *
++ struct nv_drm_extra_priv_data *extra = dev->dev_private;
++
++ if (pci_find_capability(extra->pdev, PCI_CAP_ID_AGP))
++ extra->agp = nv_drm_agp_init(dev);
++ if (extra->agp) {
++ extra->agp->agp_mtrr = arch_phys_wc_add(
++ extra->agp->agp_info.aper_base,
++ extra->agp->agp_info.aper_size *
+ 1024 * 1024);
+ }
+ }
+ }
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 14, 0)
++
++#else
++/* copied from v5.14.5 */
++int nv_drm_legacy_agp_release(struct drm_device *dev)
++{
++ struct nv_drm_extra_priv_data *extra = dev->dev_private;
++
++ if (!extra->agp || !extra->agp->acquired)
++ return -EINVAL;
++ agp_backend_release(extra->agp->bridge);
++ extra->agp->acquired = 0;
++ return 0;
++}
++#endif
++
+ void nv_drm_legacy_agp_clear(struct drm_device *dev)
+ {
+ struct nv_drm_agp_mem *entry, *tempe;
++ struct nv_drm_extra_priv_data *extra = dev->dev_private;
+
+- if (!dev->agp)
++ if (!extra->agp)
+ return;
+ if (!drm_core_check_feature(dev, DRIVER_LEGACY))
+ return;
+
+- list_for_each_entry_safe(entry, tempe, &dev->agp->memory, head) {
++ list_for_each_entry_safe(entry, tempe, &extra->agp->memory, head) {
+ if (entry->bound)
+ nv_drm_unbind_agp(entry->memory);
+ nv_drm_free_agp(entry->memory, entry->pages);
+ kfree(entry);
+ }
+- INIT_LIST_HEAD(&dev->agp->memory);
++ INIT_LIST_HEAD(&extra->agp->memory);
+
+- if (dev->agp->acquired)
++ if (extra->agp->acquired)
++#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 14, 0)
+ drm_agp_release(dev);
+-
+- dev->agp->acquired = 0;
+- dev->agp->enabled = 0;
++#else
++ nv_drm_legacy_agp_release(dev);
++#endif
++ extra->agp->acquired = 0;
++ extra->agp->enabled = 0;
+ }
+
+ void nv_drm_pci_agp_destroy(struct drm_device *dev)
+ {
+- if (dev->agp) {
+- arch_phys_wc_del(dev->agp->agp_mtrr);
++ struct nv_drm_extra_priv_data *extra = dev->dev_private;
++ if (extra->agp) {
++ arch_phys_wc_del(extra->agp->agp_mtrr);
+ nv_drm_legacy_agp_clear(dev);
+- kfree(dev->agp);
+- dev->agp = NULL;
++ kfree(extra->agp);
++ extra->agp = NULL;
+ }
+ }
+
+@@ -183,6 +215,7 @@
+ struct drm_driver *driver)
+ {
+ struct drm_device *dev;
++ struct nv_drm_extra_priv_data *extra;
+ int ret;
+
+ DRM_DEBUG("\n");
+@@ -191,11 +224,18 @@
+ if (IS_ERR(dev))
+ return PTR_ERR(dev);
+
++ extra = kzalloc(sizeof(*extra), GFP_KERNEL);
++ if (IS_ERR(extra))
++ goto err_free;
++
++ extra->pdev = pdev;
++
+ ret = pci_enable_device(pdev);
+ if (ret)
+- goto err_free;
++ goto err_free2;
+
+- dev->pdev = pdev;
++ /* use the not used (i hope) dev_private to store deprecated/legacy pointers */
++ dev->dev_private = extra;
+ #ifdef __alpha__
+ dev->hose = pdev->sysdata;
+ #endif
+@@ -221,6 +261,8 @@
+ err_agp:
+ nv_drm_pci_agp_destroy(dev);
+ pci_disable_device(pdev);
++err_free2:
++ kfree(extra);
+ err_free:
+ drm_dev_put(dev);
+ return ret;
+@@ -303,10 +345,11 @@
+ )
+ {
+ nv_linux_state_t *nvl;
++ struct nv_drm_extra_priv_data *extra = dev->dev_private;
+
+ for (nvl = nv_linux_devices; nvl != NULL; nvl = nvl->next)
+ {
+- if (nvl->dev == dev->pdev)
++ if (nvl->dev == extra->pdev)
+ {
+ nvl->drm = dev;
+ return 0;
+@@ -327,10 +370,11 @@
+ )
+ {
+ nv_linux_state_t *nvl;
++ struct nv_drm_extra_priv_data *extra = dev->dev_private;
+
+ for (nvl = nv_linux_devices; nvl != NULL; nvl = nvl->next)
+ {
+- if (nvl->dev == dev->pdev)
++ if (nvl->dev == extra->pdev)
+ {
+ BUG_ON(nvl->drm != dev);
+ nvl->drm = NULL;
+diff -Naur NVIDIA-Linux-x86_64-340.108-no-compat32.5.13/kernel/os-interface.c NVIDIA-Linux-x86_64-340.108-no-compat32.5.14/kernel/os-interface.c
+--- NVIDIA-Linux-x86_64-340.108-no-compat32.5.13/kernel/os-interface.c 2021-07-25 10:29:29.083168593 +0200
++++ NVIDIA-Linux-x86_64-340.108-no-compat32.5.14/kernel/os-interface.c 2021-09-16 13:17:43.345906445 +0200
+@@ -549,7 +549,11 @@
+ // 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
+ current->state = TASK_INTERRUPTIBLE;
++#endif
+ do
+ {
+ schedule_timeout(jiffies);
diff --git a/system/nvidia-legacy340-kernel/patches/0007-kernel-5.15.patch b/system/nvidia-legacy340-kernel/patches/0007-kernel-5.15.patch
new file mode 100644
index 0000000000..dd367186f9
--- /dev/null
+++ b/system/nvidia-legacy340-kernel/patches/0007-kernel-5.15.patch
@@ -0,0 +1,14 @@
+diff -Naur NVIDIA-Linux-x86_64-340.108-old/kernel/nv-drm.c NVIDIA-Linux-x86_64-340.108-new/kernel/nv-drm.c
+--- NVIDIA-Linux-x86_64-340.108-old/kernel/nv-drm.c 2021-11-06 20:08:18.779739237 +0200
++++ NVIDIA-Linux-x86_64-340.108-new/kernel/nv-drm.c 2021-11-06 20:42:13.443288819 +0200
+@@ -529,7 +529,9 @@ RM_STATUS NV_API_CALL nv_alloc_os_descri
+ #if defined(NV_DRM_GEM_OBJECT_PUT_UNLOCKED_PRESENT)
+ drm_gem_object_put_unlocked(&nv_obj->base);
+ #else
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 9, 0)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 0)
++ drm_gem_object_put(&nv_obj->base);
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(5, 9, 0)
+ drm_gem_object_put_locked(&nv_obj->base);
+ #else
+ drm_gem_object_unreference_unlocked(&nv_obj->base);
diff --git a/system/nvidia-legacy340-kernel/patches/0008-kernel-5.16.patch b/system/nvidia-legacy340-kernel/patches/0008-kernel-5.16.patch
new file mode 100644
index 0000000000..0337bc6d3d
--- /dev/null
+++ b/system/nvidia-legacy340-kernel/patches/0008-kernel-5.16.patch
@@ -0,0 +1,30 @@
+--- a/kernel/os-interface.h 2019-12-11 22:04:24.000000000 +0000
++++ b/kernel/os-interface.h 2022-01-10 02:04:26.740899810 +0000
+@@ -24,7 +24,12 @@
+ * *
+ \***************************************************************************/
+
++#include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 16, 0)
++#include <linux/stdarg.h>
++#else
+ #include <stdarg.h>
++#endif
+
+ /*
+ * Define away Microsoft compiler extensions when possible
+--- a/kernel/nv.h 2019-12-11 22:04:24.000000000 +0000
++++ b/kernel/nv.h 2022-01-10 02:29:07.828733372 +0000
+@@ -13,7 +13,12 @@
+ #define _NV_H_
+
+ #include <nvtypes.h>
++#include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 16, 0)
++#include <linux/stdarg.h>
++#else
+ #include <stdarg.h>
++#endif
+
+ #if !defined(NV_MIN)
+ #define NV_MIN(_a,_b) ((_a) < (_b) ? (_a) : (_b))
diff --git a/system/nvidia-legacy340-kernel/patches/0009-kernel-5.17.patch b/system/nvidia-legacy340-kernel/patches/0009-kernel-5.17.patch
new file mode 100644
index 0000000000..2c55f8092b
--- /dev/null
+++ b/system/nvidia-legacy340-kernel/patches/0009-kernel-5.17.patch
@@ -0,0 +1,57 @@
+diff -Naur a/kernel/conftest.sh b/kernel/conftest.sh
+--- a/kernel/conftest.sh 2022-04-02 10:27:54.463179319 +0000
++++ b/kernel/conftest.sh 2022-04-02 10:27:54.553179467 +0000
+@@ -1619,7 +1619,11 @@
+ CODE="
+ #include <linux/proc_fs.h>
+ void conftest_PDE_DATA(void) {
++ #if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 17, 0)
++ pde_data();
++ #else
+ PDE_DATA();
++ #endif
+ }"
+
+ compile_check_conftest "$CODE" "NV_PDE_DATA_PRESENT" "" "functions"
+diff -Naur a/kernel/nv-linux.h b/kernel/nv-linux.h
+--- a/kernel/nv-linux.h 2022-04-02 10:27:54.463179319 +0000
++++ b/kernel/nv-linux.h 2022-04-02 10:27:54.556512806 +0000
+@@ -266,9 +266,9 @@
+ #endif
+
+ #ifdef CONFIG_PROC_FS
+-#include <linux/proc_fs.h>
+ #include <linux/seq_file.h>
+ #endif
++#include <linux/proc_fs.h>
+
+ #ifdef CONFIG_KDB
+ #include <linux/kdb.h>
+@@ -2052,8 +2052,12 @@
+ })
+
+ #if defined(NV_PDE_DATA_PRESENT)
++#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 17, 0)
+ # define NV_PDE_DATA(inode) PDE_DATA(inode)
+ #else
++# define NV_PDE_DATA(inode) pde_data(inode)
++#endif
++#else
+ # define NV_PDE_DATA(inode) PDE(inode)->data
+ #endif
+
+diff -Naur a/kernel/uvm/conftest.sh b/kernel/uvm/conftest.sh
+--- a/kernel/uvm/conftest.sh 2022-04-02 10:27:54.456512642 +0000
++++ b/kernel/uvm/conftest.sh 2022-04-02 10:27:54.556512806 +0000
+@@ -1578,7 +1578,11 @@
+ CODE="
+ #include <linux/proc_fs.h>
+ void conftest_PDE_DATA(void) {
++ #if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 17, 0)
++ pde_data();
++ #else
+ PDE_DATA();
++ #endif
+ }"
+
+ compile_check_conftest "$CODE" "NV_PDE_DATA_PRESENT" "" "functions"