Merge pull request #14034 from Rmys/master

kernel-6.6.30
This commit is contained in:
Rmys
2024-05-04 18:10:46 +03:00
committed by GitHub
9 changed files with 371 additions and 5 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
<?xml version="1.0" ?>
<!DOCTYPE PISI SYSTEM "http://www.pisilinux.org/projeler/pisi/pisi-spec.dtd">
<!DOCTYPE PISI SYSTEM "https://www.pisilinux.org/projeler/pisi/pisi-spec.dtd">
<PISI>
<Source>
<Name>module-nvidia340</Name>
+8 -2
View File
@@ -30,6 +30,7 @@ def setup():
#shelltools.move("tmp/.manifest", ".")
#shelltools.system("patch -p1 < kernel-5.14-pdev.patch")
#shelltools.system("patch -p1 < kernel-5.14-state.patch")
#if get.buildTYPE() != 'emul32':
#shelltools.system("patch -p1 < linux-5.1.patch")
@@ -59,8 +60,13 @@ def build():
#kernel 5.6.4 32 bit patch hatası
#elif get.ARCH() == "x86_64":
#shelltools.system("patch -p1 < kernel-5.6-uvm.patch")
elif get.ARCH() == "x86_64":
shelltools.system("patch -p1 < kernel-6.2.patch")
shelltools.system("patch -p1 < kernel-6.3.patch")
shelltools.system("patch -p1 < kernel-6.4.patch")
shelltools.system("patch -p1 < kernel-6.5.patch")
shelltools.system("patch -p1 < kernel-6.6.patch")
shelltools.system("patch -p1 < kernel-6.8.patch")
shelltools.export("SYSSRC", "/lib/modules/%s/build" % KDIR)
shelltools.cd("kernel")
@@ -0,0 +1,145 @@
From 5db7eb5a62003bbe04f3f07d089fcf5445b34a29 Mon Sep 17 00:00:00 2001
From: Joan Bruguera <joanbrugueram@gmail.com>
Date: Sun, 25 Dec 2022 22:05:14 +0000
Subject: [PATCH] Tentative fix for NVIDIA 470.161.03 driver for Linux 6.2-rc1
---
kernel/nvidia-drm/nvidia-drm-connector.c | 22 ++++++++++++++++++++++
kernel/nvidia-drm/nvidia-drm-drv.c | 4 ++++
kernel/nvidia/nv-acpi.c | 19 ++++++++++++++++---
3 files changed, 42 insertions(+), 3 deletions(-)
diff --git a/kernel/nvidia-drm/nvidia-drm-connector.c b/kernel/nvidia-drm/nvidia-drm-connector.c
index 6fbcd63..a5ab9e9 100644
--- a/kernel/nvidia-drm/nvidia-drm-connector.c
+++ b/kernel/nvidia-drm/nvidia-drm-connector.c
@@ -20,6 +20,8 @@
* DEALINGS IN THE SOFTWARE.
*/
+#include <linux/version.h>
+#include <drm/drm_edid.h>
#include "nvidia-drm-conftest.h" /* NV_DRM_ATOMIC_MODESET_AVAILABLE */
#if defined(NV_DRM_ATOMIC_MODESET_AVAILABLE)
@@ -98,6 +100,7 @@ __nv_drm_detect_encoder(struct NvKmsKapiDynamicDisplayParams *pDetectParams,
break;
}
+#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 2, 0)
if (connector->override_edid) {
const struct drm_property_blob *edid = connector->edid_blob_ptr;
@@ -110,6 +113,25 @@ __nv_drm_detect_encoder(struct NvKmsKapiDynamicDisplayParams *pDetectParams,
sizeof(pDetectParams->edid.buffer));
}
}
+#else
+ // Rel. commit "drm/edid: detach debugfs EDID override from EDID property update" (Jani Nikula, 24 Oct 2022)
+ // NOTE: HUGE HACK!
+ mutex_lock(&connector->edid_override_mutex);
+ if (connector->edid_override) {
+ const struct edid *edid = drm_edid_raw(connector->edid_override);
+ size_t edid_length = EDID_LENGTH * (edid->extensions + 1);
+ if (edid_length <= sizeof(pDetectParams->edid.buffer)) {
+ memcpy(pDetectParams->edid.buffer, edid, edid_length);
+ pDetectParams->edid.bufferSize = edid_length;
+ pDetectParams->overrideEdid = NV_TRUE;
+ } else {
+ WARN_ON(edid_length >
+ sizeof(pDetectParams->edid.buffer));
+ }
+ }
+ mutex_unlock(&connector->edid_override_mutex);
+
+#endif
if (!nvKms->getDynamicDisplayInfo(nv_dev->pDevice, pDetectParams)) {
NV_DRM_DEV_LOG_ERR(
diff --git a/kernel/nvidia-drm/nvidia-drm-drv.c b/kernel/nvidia-drm/nvidia-drm-drv.c
index 6d007b1..d08ab4c 100644
--- a/kernel/nvidia-drm/nvidia-drm-drv.c
+++ b/kernel/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"
@@ -240,9 +241,12 @@ nv_drm_init_mode_config(struct nv_drm_device *nv_dev,
dev->mode_config.preferred_depth = 24;
dev->mode_config.prefer_shadow = 1;
+// Rel. commit "drm: Remove drm_mode_config::fb_base" (Zack Rusin, 18 Oct 2022)
+#if defined(CONFIG_FB) && LINUX_VERSION_CODE < KERNEL_VERSION(6, 2, 0)
/* Currently unused. Update when needed. */
dev->mode_config.fb_base = 0;
+#endif
#if defined(NV_DRM_CRTC_STATE_HAS_ASYNC_FLIP) || \
defined(NV_DRM_CRTC_STATE_HAS_PAGEFLIP_FLAGS)
diff --git a/kernel/nvidia/nv-acpi.c b/kernel/nvidia/nv-acpi.c
index 07501eb..1fdf71c 100644
--- a/kernel/nvidia/nv-acpi.c
+++ b/kernel/nvidia/nv-acpi.c
@@ -8,6 +8,7 @@
* _NVRM_COPYRIGHT_END_
*/
+#include <linux/version.h>
#define __NO_VERSION__
#include "os-interface.h"
@@ -24,7 +25,10 @@ static NV_STATUS nv_acpi_extract_object (const union acpi_object *, void *, N
static int nv_acpi_add (struct acpi_device *);
-#if !defined(NV_ACPI_DEVICE_OPS_REMOVE_ARGUMENT_COUNT) || (NV_ACPI_DEVICE_OPS_REMOVE_ARGUMENT_COUNT == 2)
+// Rel. commit "ACPI: make remove callback of ACPI driver void" (Dawei Li, 14 Nov 2022)
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 2, 0))
+static void nv_acpi_remove_one_arg_void(struct acpi_device *device);
+#elif !defined(NV_ACPI_DEVICE_OPS_REMOVE_ARGUMENT_COUNT) || (NV_ACPI_DEVICE_OPS_REMOVE_ARGUMENT_COUNT == 2)
static int nv_acpi_remove_two_args(struct acpi_device *device, int type);
#else
static int nv_acpi_remove_one_arg(struct acpi_device *device);
@@ -80,7 +84,10 @@ static const struct acpi_driver nv_acpi_driver_template = {
.ids = nv_video_device_ids,
.ops = {
.add = nv_acpi_add,
-#if !defined(NV_ACPI_DEVICE_OPS_REMOVE_ARGUMENT_COUNT) || (NV_ACPI_DEVICE_OPS_REMOVE_ARGUMENT_COUNT == 2)
+// Rel. commit "ACPI: make remove callback of ACPI driver void" (Dawei Li, 14 Nov 2022)
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 2, 0))
+ .remove = nv_acpi_remove_one_arg_void,
+#elif !defined(NV_ACPI_DEVICE_OPS_REMOVE_ARGUMENT_COUNT) || (NV_ACPI_DEVICE_OPS_REMOVE_ARGUMENT_COUNT == 2)
.remove = nv_acpi_remove_two_args,
#else
.remove = nv_acpi_remove_one_arg,
@@ -342,7 +349,10 @@ static int nv_acpi_add(struct acpi_device *device)
return 0;
}
-#if !defined(NV_ACPI_DEVICE_OPS_REMOVE_ARGUMENT_COUNT) || (NV_ACPI_DEVICE_OPS_REMOVE_ARGUMENT_COUNT == 2)
+// Rel. commit "ACPI: make remove callback of ACPI driver void" (Dawei Li, 14 Nov 2022)
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 2, 0))
+static void nv_acpi_remove_one_arg_void(struct acpi_device *device)
+#elif !defined(NV_ACPI_DEVICE_OPS_REMOVE_ARGUMENT_COUNT) || (NV_ACPI_DEVICE_OPS_REMOVE_ARGUMENT_COUNT == 2)
static int nv_acpi_remove_two_args(struct acpi_device *device, int type)
#else
static int nv_acpi_remove_one_arg(struct acpi_device *device)
@@ -396,7 +406,10 @@ static int nv_acpi_remove_one_arg(struct acpi_device *device)
device->driver_data = NULL;
}
+// Rel. commit "ACPI: make remove callback of ACPI driver void" (Dawei Li, 14 Nov 2022)
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(6, 2, 0))
return status;
+#endif
}
/*
--
2.39.0
@@ -0,0 +1,89 @@
diff --git a/kernel/common/inc/nv-linux.h b/kernel/common/inc/nv-linux.h
index 2c4cb7b..f68fcf2 100644
--- a/kernel/common/inc/nv-linux.h
+++ b/kernel/common/inc/nv-linux.h
@@ -1996,4 +1996,17 @@ static inline NvU64 nv_expand_nvlink_addr(NvU64 addr47)
#include <linux/backlight.h>
#endif
+#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 3, 0)
+// Rel. commit "mm: introduce vma->vm_flags wrapper functions" (Suren Baghdasaryan, 26 Jan 2023)
+static inline void vm_flags_set(struct vm_area_struct *vma, vm_flags_t flags)
+{
+ vma->vm_flags |= flags;
+}
+
+static inline void vm_flags_clear(struct vm_area_struct *vma, vm_flags_t flags)
+{
+ vma->vm_flags &= ~flags;
+}
+#endif
+
#endif /* _NV_LINUX_H_ */
diff --git a/kernel/nvidia-drm/nvidia-drm-fb.c b/kernel/nvidia-drm/nvidia-drm-fb.c
index 725164a..c35e0ee 100644
--- a/kernel/nvidia-drm/nvidia-drm-fb.c
+++ b/kernel/nvidia-drm/nvidia-drm-fb.c
@@ -29,6 +29,7 @@
#include "nvidia-drm-fb.h"
#include "nvidia-drm-utils.h"
#include "nvidia-drm-gem.h"
+#include "nvidia-drm-helper.h"
#include <drm/drm_crtc_helper.h>
diff --git a/kernel/nvidia-uvm/uvm8.c b/kernel/nvidia-uvm/uvm8.c
index 11cb373..49e1047 100644
--- a/kernel/nvidia-uvm/uvm8.c
+++ b/kernel/nvidia-uvm/uvm8.c
@@ -658,7 +658,7 @@ static int uvm_mmap(struct file *filp, struct vm_area_struct *vma)
// Using VM_DONTCOPY would be nice, but madvise(MADV_DOFORK) can reset that
// so we have to handle vm_open on fork anyway. We could disable MADV_DOFORK
// with VM_IO, but that causes other mapping issues.
- vma->vm_flags |= VM_MIXEDMAP | VM_DONTEXPAND;
+ vm_flags_set(vma, VM_MIXEDMAP | VM_DONTEXPAND);
vma->vm_ops = &uvm_vm_ops_managed;
diff --git a/kernel/nvidia/nv-mmap.c b/kernel/nvidia/nv-mmap.c
index 0b0a6f2..da891ff 100644
--- a/kernel/nvidia/nv-mmap.c
+++ b/kernel/nvidia/nv-mmap.c
@@ -447,7 +447,7 @@ int nvidia_mmap_helper(
addr = mmap_start;
// Needed for the linux kernel for mapping compound pages
- vma->vm_flags |= VM_MIXEDMAP;
+ vm_flags_set(vma, VM_MIXEDMAP);
for (j = 0; j < pages; j++)
{
@@ -471,7 +471,7 @@ int nvidia_mmap_helper(
}
}
- vma->vm_flags |= VM_IO;
+ vm_flags_set(vma, VM_IO);
}
else
{
@@ -533,15 +533,15 @@ int nvidia_mmap_helper(
NV_PRINT_AT(NV_DBG_MEMINFO, at);
- vma->vm_flags |= (VM_IO | VM_LOCKED | VM_RESERVED);
- vma->vm_flags |= (VM_DONTEXPAND | VM_DONTDUMP);
+ vm_flags_set(vma, VM_IO | VM_LOCKED | VM_RESERVED);
+ vm_flags_set(vma, VM_DONTEXPAND | VM_DONTDUMP);
}
if ((prot & NV_PROTECT_WRITEABLE) == 0)
{
vma->vm_page_prot = NV_PGPROT_READ_ONLY(vma->vm_page_prot);
- vma->vm_flags &= ~VM_WRITE;
- vma->vm_flags &= ~VM_MAYWRITE;
+ vm_flags_clear(vma, VM_WRITE);
+ vm_flags_clear(vma, VM_MAYWRITE);
}
vma->vm_ops = &nv_vm_ops;
@@ -0,0 +1,16 @@
diff --git a/kernel/nvidia-drm/nvidia-drm-drv.c b/kernel/nvidia-drm/nvidia-drm-drv.c
index e5dee49..caa9e8c 100644
--- a/kernel/nvidia-drm/nvidia-drm-drv.c
+++ b/kernel/nvidia-drm/nvidia-drm-drv.c
@@ -766,7 +766,11 @@ static void nv_drm_update_drm_driver_features(void)
nv_drm_driver.dumb_create = nv_drm_dumb_create;
nv_drm_driver.dumb_map_offset = nv_drm_dumb_map_offset;
+// Rel. commit "drm: remove dumb_destroy callback" (Christian König, 26 Jan 2023)
+// NB: No resources are leaked, the kernel releases the same resources by default
+#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 4, 0)
nv_drm_driver.dumb_destroy = nv_drm_dumb_destroy;
+#endif
#if defined(NV_DRM_DRIVER_HAS_GEM_PRIME_CALLBACKS)
nv_drm_driver.gem_vm_ops = &nv_drm_gem_vma_ops;
@@ -0,0 +1,70 @@
diff --git a/kernel/common/inc/nv-mm.h b/kernel/common/inc/nv-mm.h
index aec55b0..acd396d 100644
--- a/kernel/common/inc/nv-mm.h
+++ b/kernel/common/inc/nv-mm.h
@@ -23,6 +23,7 @@
#ifndef __NV_MM_H__
#define __NV_MM_H__
+#include <linux/version.h>
#include "conftest.h"
#if !defined(NV_VM_FAULT_T_IS_PRESENT)
@@ -47,7 +48,27 @@ typedef int vm_fault_t;
*
*/
-#if defined(NV_GET_USER_PAGES_HAS_TASK_STRUCT)
+// Rel. commit. "mm/gup: remove unused vmas parameter from get_user_pages()" (Lorenzo Stoakes, 14 May 2023)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 5, 0)
+#include <linux/mm.h>
+
+static inline long NV_GET_USER_PAGES(unsigned long start,
+ unsigned long nr_pages,
+ int write,
+ int force,
+ struct page **pages,
+ struct vm_area_struct **vmas)
+{
+ unsigned int flags = 0;
+
+ if (write)
+ flags |= FOLL_WRITE;
+ if (force)
+ flags |= FOLL_FORCE;
+
+ return get_user_pages(start, nr_pages, flags, pages);
+}
+#elif defined(NV_GET_USER_PAGES_HAS_TASK_STRUCT)
#if defined(NV_GET_USER_PAGES_HAS_WRITE_AND_FORCE_ARGS)
#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)
@@ -130,7 +151,27 @@ typedef int vm_fault_t;
*
*/
-#if defined(NV_GET_USER_PAGES_REMOTE_PRESENT)
+// Rel. commit. "mm/gup: remove unused vmas parameter from get_user_pages_remote()" (Lorenzo Stoakes, 14 May 2023)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 5, 0)
+static inline long NV_GET_USER_PAGES_REMOTE(struct task_struct *tsk,
+ struct mm_struct *mm,
+ unsigned long start,
+ unsigned long nr_pages,
+ int write,
+ int force,
+ struct page **pages,
+ struct vm_area_struct **vmas)
+{
+ unsigned int flags = 0;
+
+ if (write)
+ flags |= FOLL_WRITE;
+ if (force)
+ flags |= FOLL_FORCE;
+
+ return get_user_pages_remote(mm, start, nr_pages, flags, pages, NULL);
+}
+#elif defined(NV_GET_USER_PAGES_REMOTE_PRESENT)
#if defined(NV_GET_USER_PAGES_REMOTE_HAS_WRITE_AND_FORCE_ARGS)
#define NV_GET_USER_PAGES_REMOTE get_user_pages_remote
#else
@@ -0,0 +1,16 @@
diff --git a/kernel/nvidia-drm/nvidia-drm-drv.c b/kernel/nvidia-drm/nvidia-drm-drv.c
index caa9e8c..132d4d4 100644
--- a/kernel/nvidia-drm/nvidia-drm-drv.c
+++ b/kernel/nvidia-drm/nvidia-drm-drv.c
@@ -705,7 +705,11 @@ static struct drm_driver nv_drm_driver = {
.ioctls = nv_drm_ioctls,
.num_ioctls = ARRAY_SIZE(nv_drm_ioctls),
+// Rel. commit "drm/prime: Unexport helpers for fd/handle conversion" (Thomas Zimmermann, 20 Jun 2023)
+// This function is no longer exported, but leaving it to NULL is equivalent
+#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 6, 0)
.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
+#endif
#if defined(NV_DRM_DRIVER_HAS_GEM_PRIME_CALLBACKS)
.gem_prime_export = nv_drm_gem_prime_export,
@@ -0,0 +1,18 @@
diff --git a/kernel/nvidia-drm/nvidia-drm-drv.c b/kernel/nvidia-drm/nvidia-drm-drv.c
index 132d4d4..1291893 100644
--- a/kernel/nvidia-drm/nvidia-drm-drv.c
+++ b/kernel/nvidia-drm/nvidia-drm-drv.c
@@ -654,6 +654,13 @@ static const struct file_operations nv_drm_fops = {
.llseek = noop_llseek,
};
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 8, 0)
+// Rel. commit. "drm: Remove locking for legacy ioctls and DRM_UNLOCKED" (Thomas Zimmermann, 22 Nov 2023)
+// Mock this flag, which was already useless on any recent kernel, since it
+// only did something if the driver set DRIVER_LEGACY in driver_features.
+static const enum drm_ioctl_flags DRM_UNLOCKED = 0;
+#endif
+
static const struct drm_ioctl_desc nv_drm_ioctls[] = {
#if defined(NV_DRM_ATOMIC_MODESET_AVAILABLE)
DRM_IOCTL_DEF_DRV(NVIDIA_GEM_IMPORT_NVKMS_MEMORY,
+8 -2
View File
@@ -18,9 +18,15 @@
<AdditionalFile owner="root" permission="0644" target="dkms.conf">dkms.conf</AdditionalFile>
<AdditionalFile owner="root" permission="0644" target="kernel-5.14-pdev.patch">kernel-5.14-pdev.patch</AdditionalFile>
<AdditionalFile owner="root" permission="0644" target="kernel-5.14-state.patch">kernel-5.14-state.patch</AdditionalFile>
<AdditionalFile owner="root" permission="0644" target="kernel-6.2.patch">kernel-6.2.patch</AdditionalFile>
<AdditionalFile owner="root" permission="0644" target="kernel-6.3.patch">kernel-6.3.patch</AdditionalFile>
<AdditionalFile owner="root" permission="0644" target="kernel-6.4.patch">kernel-6.4.patch</AdditionalFile>
<AdditionalFile owner="root" permission="0644" target="kernel-6.5.patch">kernel-6.5.patch</AdditionalFile>
<AdditionalFile owner="root" permission="0644" target="kernel-6.6.patch">kernel-6.6.patch</AdditionalFile>
<AdditionalFile owner="root" permission="0644" target="kernel-6.8.patch">kernel-6.8.patch</AdditionalFile>
</AdditionalFiles>
<BuildDependencies>
<Dependency version="5.15.158">kernel-module-headers</Dependency>
<Dependency version="6.6.30">kernel-module-headers</Dependency>
<Dependency>libX11-devel</Dependency>
<Dependency>gtk2-devel</Dependency>
<Dependency>gtk3-devel</Dependency>
@@ -32,7 +38,7 @@
<IsA>driver</IsA>
<Summary>Kernel module for current NVIDIA graphics driver releases</Summary>
<RuntimeDependencies>
<Dependency version="5.15.158">kernel</Dependency>
<Dependency version="6.6.30">kernel</Dependency>
<!-- <Dependency release="current">module-nvidia-current-userspace</Dependency> -->
</RuntimeDependencies>
<Files>