repackaged with libglvnd and libmesa layout [release 340.108-7mamba;Fri Apr 23 2021]

This commit is contained in:
Silvan Calarco 2024-01-06 07:46:49 +01:00
parent 788f8167e4
commit 2fcf4da333
7 changed files with 1195 additions and 295 deletions

View File

@ -0,0 +1,18 @@
https://github.com/warpme/minimyth2/tree/master/script/nvidia/nvidia-340.108/files
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 2020-12-13 19:10:56.759999937 +0100
+++ NVIDIA-Linux-x86_64-340.108-new/kernel/nv-drm.c 2020-12-13 19:09:02.039999925 +0100
@@ -322,8 +322,11 @@
{
struct nv_gem_object *nv_obj = container_of(obj, struct nv_gem_object, base);
int page_count = obj->size >> PAGE_SHIFT;
-
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 10, 0)
+ return drm_prime_pages_to_sg(obj->dev, nv_obj->pages, page_count);
+#else
return drm_prime_pages_to_sg(nv_obj->pages, page_count);
+#endif
}
static void* nv_gem_prime_vmap(

View File

@ -0,0 +1,25 @@
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 @@
#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 */
#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 @@
#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 */
#include <linux/interrupt.h> /* tasklets, interrupt helpers */
#include <linux/timer.h>

View File

@ -0,0 +1,780 @@
From 2154cc447a2377cfd60a7b7c5b619e689ebf71b1 Mon Sep 17 00:00:00 2001
From: graysky <graysky@archlinux.us>
Date: Thu, 22 Oct 2020 06:58:53 -0400
Subject: [PATCH 1/3] kernel-5.7
credit: https://gitlab.manjaro.org/packages?utf8=%E2%9C%93&filter=nvidia-340xx
---
kernel/Makefile | 5 +
kernel/conftest.sh | 81 +++++++++++++
kernel/dkms.conf | 8 +-
kernel/nv-drm.c | 229 ++++++++++++++++++++++++++++++++++-
kernel/nv-linux.h | 49 ++++++++
kernel/nv-procfs.c | 20 +++
kernel/nv-time.h | 9 +-
kernel/nv.c | 2 +-
kernel/os-interface.c | 8 +-
kernel/uvm/Makefile | 1 +
kernel/uvm/conftest.sh | 4 +
kernel/uvm/nvidia_uvm_lite.c | 29 ++++-
12 files changed, 431 insertions(+), 14 deletions(-)
diff --git a/kernel/Makefile b/kernel/Makefile
index 125a690..2597080 100644
--- a/kernel/Makefile
+++ b/kernel/Makefile
@@ -108,12 +108,14 @@ COMPILE_TESTS = \
acquire_console_sem \
console_lock \
kmem_cache_create \
+ kmem_cache_create_usercopy \
outer_flush_all \
on_each_cpu \
smp_call_function \
nvmap_support \
acpi_evaluate_integer \
ioremap_cache \
+ ioremap_nocache \
ioremap_wc \
proc_dir_entry \
INIT_WORK \
@@ -122,6 +124,7 @@ COMPILE_TESTS = \
pci_domain_nr \
pci_dma_mapping_error \
file_operations \
+ proc_ops \
sg_alloc_table \
sg_init_table \
pci_get_domain_bus_and_slot \
@@ -147,6 +150,8 @@ COMPILE_TESTS = \
vm_fault_present \
vm_fault_has_address \
drm_driver_unload_has_int_return_type \
+ drm_get_pci_dev \
+ drm_pci_init \
drm_legacy_pci_init \
timer_setup \
do_gettimeofday \
diff --git a/kernel/conftest.sh b/kernel/conftest.sh
index b7a85f0..a5225e5 100755
--- a/kernel/conftest.sh
+++ b/kernel/conftest.sh
@@ -176,6 +176,7 @@ test_headers() {
FILES="$FILES linux/ktime.h"
FILES="$FILES linux/file.h"
+ FILES_ARCH="$FILES_ARCH asm/pgtable.h"
FILES_ARCH="$FILES_ARCH asm/set_memory.h"
translate_and_find_header_files $HEADERS $FILES
@@ -440,6 +441,9 @@ compile_test() {
# Determine if the set_memory_array_uc() function is present.
#
CODE="
+ #if defined(NV_ASM_PGTABLE_H_PRESENT)
+ #include <asm/pgtable.h>
+ #endif
#if defined(NV_ASM_SET_MEMORY_H_PRESENT)
#include <asm/set_memory.h>
#else
@@ -914,6 +918,21 @@ compile_test() {
fi
;;
+ kmem_cache_create_usercopy)
+ #
+ # Determine if the kmem_cache_create_usercopy function exists.
+ #
+ # This function was added by:
+ # 2017-06-10 8eb8284b412906181357c2b0110d879d5af95e52
+ CODE="
+ #include <linux/slab.h>
+ void kmem_cache_create_usercopy(void) {
+ kmem_cache_create_usercopy();
+ }"
+
+ compile_check_conftest "$CODE" "NV_KMEM_CACHE_CREATE_USERCOPY_PRESENT" "" "functions"
+ ;;
+
smp_call_function)
#
# Determine if the smp_call_function() function is
@@ -1188,6 +1207,22 @@ compile_test() {
compile_check_conftest "$CODE" "NV_IOREMAP_CACHE_PRESENT" "" "functions"
;;
+ ioremap_nocache)
+ #
+ # Determine if the ioremap_nocache() function is present.
+ #
+ # Removed by commit 4bdc0d676a64 ("remove ioremap_nocache and
+ # devm_ioremap_nocache") in v5.6 (2020-01-06)
+ #
+ CODE="
+ #include <asm/io.h>
+ void conftest_ioremap_nocache(void) {
+ ioremap_nocache();
+ }"
+
+ compile_check_conftest "$CODE" "NV_IOREMAP_NOCACHE_PRESENT" "" "functions"
+ ;;
+
ioremap_wc)
#
# Determine if the ioremap_wc() function is present.
@@ -1371,6 +1406,16 @@ compile_test() {
compile_check_conftest "$CODE" "NV_FILE_OPERATIONS_HAS_COMPAT_IOCTL" "" "types"
;;
+ proc_ops)
+ CODE="
+ #include <linux/proc_fs.h>
+ int conftest_proc_ops(void) {
+ return offsetof(struct proc_ops, proc_open);
+ }"
+
+ compile_check_conftest "$CODE" "NV_HAVE_PROC_OPS" "" "types"
+ ;;
+
sg_init_table)
#
# Determine if the sg_init_table() function is present.
@@ -2044,6 +2089,42 @@ compile_test() {
compile_check_conftest "$CODE" "NV_DRM_DRIVER_UNLOAD_HAS_INT_RETURN_TYPE" "" "types"
;;
+ drm_get_pci_dev)
+ #
+ # Determine if drm_get_pci_dev() is present.
+ #
+ CODE="
+ #if defined(NV_DRM_DRMP_H_PRESENT)
+ #include <drm/drmP.h>
+ #endif
+
+ #if defined(NV_DRM_DRM_PCI_H_PRESENT)
+ #include <drm/drm_pci.h>
+ #endif
+
+ void conftest_drm_legacy_pci_init(void) {
+ drm_get_pci_dev();
+ }"
+
+ compile_check_conftest "$CODE" "NV_DRM_GET_PCI_DEV_PRESENT" "" "functions"
+ ;;
+
+ drm_pci_init)
+ #
+ # Determine if drm_pci_init() is present.
+ #
+ CODE="
+ #if defined(NV_DRM_DRMP_H_PRESENT)
+ #include <drm/drmP.h>
+ #endif
+
+ void conftest_drm_legacy_pci_init(void) {
+ drm_pci_init();
+ }"
+
+ compile_check_conftest "$CODE" "NV_DRM_PCI_INIT_PRESENT" "" "functions"
+ ;;
+
drm_legacy_pci_init)
#
# Determine if drm_legacy_pci_init() is present. drm_pci_init() was
diff --git a/kernel/dkms.conf b/kernel/dkms.conf
index 79a02ae..3140f03 100644
--- a/kernel/dkms.conf
+++ b/kernel/dkms.conf
@@ -1,7 +1,13 @@
+if [ -x /usr/bin/nproc ]; then
+ num_cpu_cores=$(nproc)
+else
+ num_cpu_cores=1
+fi
+
PACKAGE_NAME="nvidia"
PACKAGE_VERSION="340.108"
BUILT_MODULE_NAME[0]="$PACKAGE_NAME"
DEST_MODULE_LOCATION[0]="/kernel/drivers/video"
-MAKE[0]="make module KERNEL_UNAME=${kernelver}"
+MAKE[0]="make -j$num_cpu_cores module KERNEL_UNAME=${kernelver}"
CLEAN="make clean"
AUTOINSTALL="yes"
diff --git a/kernel/nv-drm.c b/kernel/nv-drm.c
index 0d1cdbf..85db07e 100644
--- a/kernel/nv-drm.c
+++ b/kernel/nv-drm.c
@@ -50,9 +50,236 @@
#if defined(NV_DRM_LEGACY_PCI_INIT_PRESENT)
#define nv_drm_pci_init drm_legacy_pci_init
#define nv_drm_pci_exit drm_legacy_pci_exit
-#else
+#elif defined(NV_DRM_PCI_INIT_PRESENT)
#define nv_drm_pci_init drm_pci_init
#define nv_drm_pci_exit drm_pci_exit
+#else
+#if defined(NV_DRM_GET_PCI_DEV_PRESENT)
+#define nv_drm_get_pci_dev drm_get_pci_dev
+#else
+#include <drm/drm_agpsupport.h>
+
+struct nv_drm_agp_head {
+ struct agp_kern_info agp_info;
+ struct list_head memory;
+ unsigned long mode;
+ struct agp_bridge_data *bridge;
+ int enabled;
+ int acquired;
+ unsigned long base;
+ int agp_mtrr;
+ int cant_use_aperture;
+ unsigned long page_mask;
+};
+
+struct nv_drm_agp_mem {
+ unsigned long handle;
+ struct agp_memory *memory;
+ unsigned long bound;
+ int pages;
+ struct list_head head;
+};
+
+/*
+ * Code from drm_agp_init/nv_drm_{free,unbind}_agp
+ * Extracted from commit: 5b8b9d0c6d0e0f1993c6c56deaf9646942c49d94, file: drivers/gpu/drm/drm_agpsupport.c
+ */
+struct drm_agp_head *nv_drm_agp_init(struct drm_device *dev)
+{
+ struct nv_drm_agp_head *head = NULL;
+
+ head = kzalloc(sizeof(*head), GFP_KERNEL);
+ if (!head)
+ return NULL;
+ head->bridge = agp_find_bridge(dev->pdev);
+ if (!head->bridge) {
+ head->bridge = agp_backend_acquire(dev->pdev);
+ if (!head->bridge) {
+ kfree(head);
+ return NULL;
+ }
+ agp_copy_info(head->bridge, &head->agp_info);
+ agp_backend_release(head->bridge);
+ } else {
+ agp_copy_info(head->bridge, &head->agp_info);
+ }
+ if (head->agp_info.chipset == NOT_SUPPORTED) {
+ kfree(head);
+ return NULL;
+ }
+ INIT_LIST_HEAD(&head->memory);
+ head->cant_use_aperture = head->agp_info.cant_use_aperture;
+ head->page_mask = head->agp_info.page_mask;
+ head->base = head->agp_info.aper_base;
+ return (struct drm_agp_head *)head;
+}
+
+void nv_drm_free_agp(struct agp_memory *handle, int pages)
+{
+ agp_free_memory(handle);
+}
+
+int nv_drm_unbind_agp(struct agp_memory *handle)
+{
+ return agp_unbind_memory(handle);
+}
+
+/*
+ * Code from drm_pci_agp_{clear,destroy,init}/drm_get_pci_dev
+ * Extracted from commit: 5b8b9d0c6d0e0f1993c6c56deaf9646942c49d94, file: drivers/gpu/drm/drm_pci.c
+ */
+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 *
+ 1024 * 1024);
+ }
+ }
+}
+
+void nv_drm_legacy_agp_clear(struct drm_device *dev)
+{
+ struct nv_drm_agp_mem *entry, *tempe;
+
+ if (!dev->agp)
+ return;
+ if (!drm_core_check_feature(dev, DRIVER_LEGACY))
+ return;
+
+ list_for_each_entry_safe(entry, tempe, &dev->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);
+
+ if (dev->agp->acquired)
+ drm_agp_release(dev);
+
+ dev->agp->acquired = 0;
+ dev->agp->enabled = 0;
+}
+
+void nv_drm_pci_agp_destroy(struct drm_device *dev)
+{
+ if (dev->agp) {
+ arch_phys_wc_del(dev->agp->agp_mtrr);
+ nv_drm_legacy_agp_clear(dev);
+ kfree(dev->agp);
+ dev->agp = NULL;
+ }
+}
+
+static int nv_drm_get_pci_dev(struct pci_dev *pdev,
+ const struct pci_device_id *ent,
+ struct drm_driver *driver)
+{
+ struct drm_device *dev;
+ int ret;
+
+ DRM_DEBUG("\n");
+
+ dev = drm_dev_alloc(driver, &pdev->dev);
+ if (IS_ERR(dev))
+ return PTR_ERR(dev);
+
+ ret = pci_enable_device(pdev);
+ if (ret)
+ goto err_free;
+
+ dev->pdev = pdev;
+#ifdef __alpha__
+ dev->hose = pdev->sysdata;
+#endif
+
+ if (drm_core_check_feature(dev, DRIVER_MODESET))
+ pci_set_drvdata(pdev, dev);
+
+ nv_drm_pci_agp_init(dev);
+
+ ret = drm_dev_register(dev, ent->driver_data);
+ if (ret)
+ goto err_agp;
+
+ /* No locking needed since shadow-attach is single-threaded since it may
+ * only be called from the per-driver module init hook. */
+ if (drm_core_check_feature(dev, DRIVER_LEGACY))
+ list_add_tail(&dev->legacy_dev_list, &driver->legacy_dev_list);
+
+ return 0;
+
+err_agp:
+ nv_drm_pci_agp_destroy(dev);
+ pci_disable_device(pdev);
+err_free:
+ drm_dev_put(dev);
+ return ret;
+}
+#endif
+
+/*
+ * Code from drm_legacy_pci_{init,exit}
+ * Extracted from tag: v5.6.3, file: drivers/gpu/drm/drm_pci.c
+ */
+int nv_drm_pci_init(struct drm_driver *driver, struct pci_driver *pdriver)
+{
+ struct pci_dev *pdev = NULL;
+ const struct pci_device_id *pid;
+ int i;
+
+ DRM_DEBUG("\n");
+
+ if (WARN_ON(!(driver->driver_features & DRIVER_LEGACY)))
+ return -EINVAL;
+
+ /* If not using KMS, fall back to stealth mode manual scanning. */
+ INIT_LIST_HEAD(&driver->legacy_dev_list);
+ for (i = 0; pdriver->id_table[i].vendor != 0; i++) {
+ pid = &pdriver->id_table[i];
+
+ /* Loop around setting up a DRM device for each PCI device
+ * matching our ID and device class. If we had the internal
+ * function that pci_get_subsys and pci_get_class used, we'd
+ * be able to just pass pid in instead of doing a two-stage
+ * thing.
+ */
+ pdev = NULL;
+ while ((pdev =
+ pci_get_subsys(pid->vendor, pid->device, pid->subvendor,
+ pid->subdevice, pdev)) != NULL) {
+ if ((pdev->class & pid->class_mask) != pid->class)
+ continue;
+
+ /* stealth mode requires a manual probe */
+ pci_dev_get(pdev);
+ nv_drm_get_pci_dev(pdev, pid, driver);
+ }
+ }
+ return 0;
+}
+
+void nv_drm_pci_exit(struct drm_driver *driver, struct pci_driver *pdriver)
+{
+ struct drm_device *dev, *tmp;
+ DRM_DEBUG("\n");
+
+ if (!(driver->driver_features & DRIVER_LEGACY)) {
+ WARN_ON(1);
+ } else {
+ list_for_each_entry_safe(dev, tmp, &driver->legacy_dev_list,
+ legacy_dev_list) {
+ list_del(&dev->legacy_dev_list);
+ drm_put_dev(dev);
+ }
+ }
+ DRM_INFO("Module unloaded\n");
+}
#endif
extern nv_linux_state_t *nv_linux_devices;
diff --git a/kernel/nv-linux.h b/kernel/nv-linux.h
index a1d2c68..83e6433 100644
--- a/kernel/nv-linux.h
+++ b/kernel/nv-linux.h
@@ -688,11 +688,16 @@ extern nv_spinlock_t km_lock;
VM_ALLOC_RECORD(ptr, size, "vm_ioremap"); \
}
+#if defined(NV_IOREMAP_NOCACHE_PRESENT)
#define NV_IOREMAP_NOCACHE(ptr, physaddr, size) \
{ \
(ptr) = ioremap_nocache(physaddr, size); \
VM_ALLOC_RECORD(ptr, size, "vm_ioremap_nocache"); \
}
+#else
+#define NV_IOREMAP_NOCACHE(ptr, physaddr, size) \
+ NV_IOREMAP(ptr, physaddr, size)
+#endif
#if defined(NV_IOREMAP_CACHE_PRESENT)
#define NV_IOREMAP_CACHE(ptr, physaddr, size) \
@@ -774,6 +779,17 @@ extern nv_spinlock_t km_lock;
#error "NV_KMEM_CACHE_CREATE() undefined (kmem_cache_create() unavailable)!"
#endif
+#if defined(NV_KMEM_CACHE_CREATE_USERCOPY_PRESENT)
+#define NV_KMEM_CACHE_CREATE_USERCOPY(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_USERCOPY(kmem_cache, name, type) \
+ NV_KMEM_CACHE_CREATE(kmem_cache, name, type)
+#endif
+
#define NV_KMEM_CACHE_ALLOC(ptr, kmem_cache, type) \
{ \
(ptr) = kmem_cache_alloc(kmem_cache, GFP_KERNEL); \
@@ -1971,6 +1987,19 @@ extern NvU32 nv_assign_gpu_count;
})
#endif
+#if defined(NV_HAVE_PROC_OPS)
+#define NV_CREATE_PROC_FILE(filename,parent,__name,__data) \
+ ({ \
+ struct proc_dir_entry *__entry; \
+ int mode = (S_IFREG | S_IRUGO); \
+ const struct proc_ops *fops = &nv_procfs_##__name##_fops; \
+ if (fops->proc_write != 0) \
+ mode |= S_IWUSR; \
+ __entry = NV_CREATE_PROC_ENTRY(filename, mode, parent, fops, \
+ __data); \
+ __entry; \
+ })
+#else
#define NV_CREATE_PROC_FILE(filename,parent,__name,__data) \
({ \
struct proc_dir_entry *__entry; \
@@ -1982,6 +2011,7 @@ extern NvU32 nv_assign_gpu_count;
__data); \
__entry; \
})
+#endif
/*
* proc_mkdir_mode exists in Linux 2.6.9, but isn't exported until Linux 3.0.
@@ -2023,6 +2053,24 @@ extern NvU32 nv_assign_gpu_count;
remove_proc_entry(entry->name, entry->parent);
#endif
+#if defined(NV_HAVE_PROC_OPS)
+#define NV_DEFINE_PROCFS_SINGLE_FILE(__name) \
+ static int nv_procfs_open_##__name( \
+ struct inode *inode, \
+ struct file *filep \
+ ) \
+ { \
+ return single_open(filep, nv_procfs_read_##__name, \
+ NV_PDE_DATA(inode)); \
+ } \
+ \
+ static const struct proc_ops nv_procfs_##__name##_fops = { \
+ .proc_open = nv_procfs_open_##__name, \
+ .proc_read = seq_read, \
+ .proc_lseek = seq_lseek, \
+ .proc_release = single_release, \
+ };
+#else
#define NV_DEFINE_PROCFS_SINGLE_FILE(__name) \
static int nv_procfs_open_##__name( \
struct inode *inode, \
@@ -2040,6 +2088,7 @@ extern NvU32 nv_assign_gpu_count;
.llseek = seq_lseek, \
.release = single_release, \
};
+#endif
#endif /* CONFIG_PROC_FS */
diff --git a/kernel/nv-procfs.c b/kernel/nv-procfs.c
index ebca3e8..9365c3c 100644
--- a/kernel/nv-procfs.c
+++ b/kernel/nv-procfs.c
@@ -409,6 +409,15 @@ done:
return ((status < 0) ? status : (int)count);
}
+#if defined(NV_HAVE_PROC_OPS)
+static struct proc_ops nv_procfs_registry_fops = {
+ .proc_open = nv_procfs_open_registry,
+ .proc_read = seq_read,
+ .proc_write = nv_procfs_write_file,
+ .proc_lseek = seq_lseek,
+ .proc_release = nv_procfs_close_registry,
+};
+#else
static struct file_operations nv_procfs_registry_fops = {
.owner = THIS_MODULE,
.open = nv_procfs_open_registry,
@@ -417,6 +426,7 @@ static struct file_operations nv_procfs_registry_fops = {
.llseek = seq_lseek,
.release = nv_procfs_close_registry,
};
+#endif
static int
nv_procfs_read_unbind_lock(
@@ -538,6 +548,15 @@ done:
return rc;
}
+#if defined(NV_HAVE_PROC_OPS)
+static struct proc_ops nv_procfs_unbind_lock_fops = {
+ .proc_open = nv_procfs_open_unbind_lock,
+ .proc_read = seq_read,
+ .proc_write = nv_procfs_write_file,
+ .proc_lseek = seq_lseek,
+ .proc_release = nv_procfs_close_unbind_lock,
+};
+#else
static struct file_operations nv_procfs_unbind_lock_fops = {
.owner = THIS_MODULE,
.open = nv_procfs_open_unbind_lock,
@@ -546,6 +565,7 @@ static struct file_operations nv_procfs_unbind_lock_fops = {
.llseek = seq_lseek,
.release = nv_procfs_close_unbind_lock,
};
+#endif
static int
nv_procfs_read_text_file(
diff --git a/kernel/nv-time.h b/kernel/nv-time.h
index a34ceb2..780f8bc 100644
--- a/kernel/nv-time.h
+++ b/kernel/nv-time.h
@@ -28,7 +28,12 @@
#include <linux/ktime.h>
#endif
-static inline void nv_gettimeofday(struct timeval *tv)
+struct nv_timeval {
+ __kernel_long_t tv_sec;
+ __kernel_suseconds_t tv_usec;
+};
+
+static inline void nv_gettimeofday(struct nv_timeval *tv)
{
#ifdef NV_DO_GETTIMEOFDAY_PRESENT
do_gettimeofday(tv);
@@ -37,7 +42,7 @@ static inline void nv_gettimeofday(struct timeval *tv)
ktime_get_real_ts64(&now);
- *tv = (struct timeval) {
+ *tv = (struct nv_timeval) {
.tv_sec = now.tv_sec,
.tv_usec = now.tv_nsec/1000,
};
diff --git a/kernel/nv.c b/kernel/nv.c
index a167be9..a218f83 100644
--- a/kernel/nv.c
+++ b/kernel/nv.c
@@ -752,7 +752,7 @@ int __init nvidia_init_module(void)
NV_SPIN_LOCK_INIT(&km_lock);
#endif
- NV_KMEM_CACHE_CREATE(nv_stack_t_cache, NV_STACK_CACHE_STR, nv_stack_t);
+ NV_KMEM_CACHE_CREATE_USERCOPY(nv_stack_t_cache, NV_STACK_CACHE_STR, nv_stack_t);
if (nv_stack_t_cache == NULL)
{
nv_printf(NV_DBG_ERRORS, "NVRM: stack cache allocation failed!\n");
diff --git a/kernel/os-interface.c b/kernel/os-interface.c
index 7190b26..0c0dc05 100644
--- a/kernel/os-interface.c
+++ b/kernel/os-interface.c
@@ -439,7 +439,7 @@ RM_STATUS NV_API_CALL os_get_current_time(
NvU32 *useconds
)
{
- struct timeval tm;
+ struct nv_timeval tm;
nv_gettimeofday(&tm);
@@ -474,7 +474,7 @@ RM_STATUS NV_API_CALL os_delay_us(NvU32 MicroSeconds)
unsigned long usec;
#ifdef NV_CHECK_DELAY_ACCURACY
- struct timeval tm1, tm2;
+ struct nv_timeval tm1, tm2;
nv_gettimeofday(&tm1);
#endif
@@ -514,9 +514,9 @@ RM_STATUS NV_API_CALL os_delay(NvU32 MilliSeconds)
unsigned long MicroSeconds;
unsigned long jiffies;
unsigned long mdelay_safe_msec;
- struct timeval tm_end, tm_aux;
+ struct nv_timeval tm_end, tm_aux;
#ifdef NV_CHECK_DELAY_ACCURACY
- struct timeval tm_start;
+ struct nv_timeval tm_start;
#endif
nv_gettimeofday(&tm_aux);
diff --git a/kernel/uvm/Makefile b/kernel/uvm/Makefile
index 0cad8ff..043a08d 100644
--- a/kernel/uvm/Makefile
+++ b/kernel/uvm/Makefile
@@ -207,6 +207,7 @@ ccflags-y += $(EXTRA_CFLAGS)
RM_MODULE_SYMVERS:= $(RM_OUT_DIR)/Module.symvers
UVM_MODULE_SYMVERS:= $(obj)/Module.symvers
+KBUILD_EXTRA_SYMBOLS:= $(UVM_MODULE_SYMVERS)
module $(MODULE_NAME).ko: $(UVM_MODULE_SYMVERS) debug_diagnostics_printing
diff --git a/kernel/uvm/conftest.sh b/kernel/uvm/conftest.sh
index b7a85f0..33e2a63 100755
--- a/kernel/uvm/conftest.sh
+++ b/kernel/uvm/conftest.sh
@@ -176,6 +176,7 @@ test_headers() {
FILES="$FILES linux/ktime.h"
FILES="$FILES linux/file.h"
+ FILES_ARCH="$FILES_ARCH asm/pgtable.h"
FILES_ARCH="$FILES_ARCH asm/set_memory.h"
translate_and_find_header_files $HEADERS $FILES
@@ -440,6 +441,9 @@ compile_test() {
# Determine if the set_memory_array_uc() function is present.
#
CODE="
+ #if defined(NV_ASM_PGTABLE_H_PRESENT)
+ #include <asm/pgtable.h>
+ #endif
#if defined(NV_ASM_SET_MEMORY_H_PRESENT)
#include <asm/set_memory.h>
#else
diff --git a/kernel/uvm/nvidia_uvm_lite.c b/kernel/uvm/nvidia_uvm_lite.c
index 6943e7c..9a7e3b6 100644
--- a/kernel/uvm/nvidia_uvm_lite.c
+++ b/kernel/uvm/nvidia_uvm_lite.c
@@ -131,8 +131,8 @@ static
RM_STATUS _preexisting_error_on_channel(UvmGpuMigrationTracking *pMigTracker,
UvmCommitRecord *pRecord);
-static void _set_timeout_in_usec(struct timeval *src,
- struct timeval *result,
+static void _set_timeout_in_usec(struct nv_timeval *src,
+ struct nv_timeval *result,
unsigned long timeoutInUsec)
{
if (!src || !result)
@@ -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;
@@ -1992,9 +2011,9 @@ void umvlite_destroy_per_process_gpu_resources(UvmGpuUuid *gpuUuidStruct)
static RM_STATUS _check_ecc_errors(UvmGpuMigrationTracking *pMigTracker,
NvBool *pIsEccErrorSet)
{
- struct timeval eccErrorStartTime = {0};
- struct timeval eccErrorCurrentTime = {0};
- struct timeval eccTimeout = {0};
+ struct nv_timeval eccErrorStartTime = {0};
+ struct nv_timeval eccErrorCurrentTime = {0};
+ struct nv_timeval eccTimeout = {0};
NvBool bEccErrorTimeout = NV_FALSE;
NvBool bEccIncomingError = NV_FALSE;
unsigned rmInterruptSet = 0;
--
2.29.0

View File

@ -0,0 +1,92 @@
From 2cc3342b4b3c96bcc4062513011d35c079b009a2 Mon Sep 17 00:00:00 2001
From: graysky <graysky@archlinux.us>
Date: Thu, 22 Oct 2020 06:59:59 -0400
Subject: [PATCH 2/3] kernel-5.8
credit: https://launchpad.net/~kelebek333/+archive/ubuntu/nvidia-legacy/+packages
extracted from: https://launchpadlibrarian.net/492468557/nvidia-graphics-drivers-340_340.108-1lmtrfocal3_340.108-2lmtrfocal.diff.gz
---
kernel/nv-linux.h | 8 ++++++++
kernel/nvidia-modules-common.mk | 1 +
kernel/os-mlock.c | 8 ++++++++
kernel/uvm/nvidia_uvm_lite_api.c | 4 ++++
4 files changed, 21 insertions(+)
diff --git a/kernel/nv-linux.h b/kernel/nv-linux.h
index 83e6433..d055552 100644
--- a/kernel/nv-linux.h
+++ b/kernel/nv-linux.h
@@ -669,11 +669,19 @@ extern nv_spinlock_t km_lock;
# define KM_FREE_RECORD(a,b,c)
#endif
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 8, 0)
+#define NV_VMALLOC(ptr, size) \
+ { \
+ (ptr) = __vmalloc(size, GFP_KERNEL); \
+ VM_ALLOC_RECORD(ptr, size, "vm_vmalloc"); \
+ }
+#else
#define NV_VMALLOC(ptr, size) \
{ \
(ptr) = __vmalloc(size, GFP_KERNEL, PAGE_KERNEL); \
VM_ALLOC_RECORD(ptr, size, "vm_vmalloc"); \
}
+#endif
#define NV_VFREE(ptr, size) \
{ \
diff --git a/kernel/nvidia-modules-common.mk b/kernel/nvidia-modules-common.mk
index b94591b..0e4c228 100644
--- a/kernel/nvidia-modules-common.mk
+++ b/kernel/nvidia-modules-common.mk
@@ -222,6 +222,7 @@ build-sanity-checks:
define BUILD_MODULE_RULE
$(1): build-sanity-checks $(3)
@echo "NVIDIA: calling KBUILD..."; \
+ touch .nv-kernel.o.cmd; \
$$(MAKE) "CC=$$(CC)" NV_MODULE_SUFFIX=$$(strip $(2)) $$(KBUILD_PARAMS) modules; \
echo "NVIDIA: left KBUILD."; \
if ! [ -f $(1) ]; then \
diff --git a/kernel/os-mlock.c b/kernel/os-mlock.c
index 8a1fa2f..fc50543 100644
--- a/kernel/os-mlock.c
+++ b/kernel/os-mlock.c
@@ -44,11 +44,19 @@ RM_STATUS NV_API_CALL os_lock_user_pages(
return rmStatus;
}
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 8, 0)
+ down_read(&mm->mmap_lock);
+ ret = NV_GET_USER_PAGES((unsigned long)address,
+ page_count, write, force, user_pages, NULL);
+ up_read(&mm->mmap_lock);
+ pinned = ret;
+#else
down_read(&mm->mmap_sem);
ret = NV_GET_USER_PAGES((unsigned long)address,
page_count, write, force, user_pages, NULL);
up_read(&mm->mmap_sem);
pinned = ret;
+#endif
if (ret < 0)
{
diff --git a/kernel/uvm/nvidia_uvm_lite_api.c b/kernel/uvm/nvidia_uvm_lite_api.c
index 8448eb6..97a4818 100644
--- a/kernel/uvm/nvidia_uvm_lite_api.c
+++ b/kernel/uvm/nvidia_uvm_lite_api.c
@@ -30,6 +30,10 @@
#include "uvm_gpu_ops_tests.h"
#endif
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 8, 0)
+#define mmap_sem mmap_lock
+#endif
+
//
// nvidia_uvm_lite_api.c
//
--
2.29.0

View File

@ -0,0 +1,107 @@
From fea401df7500bfbead5a42b1e74560dbddf2f5a3 Mon Sep 17 00:00:00 2001
From: graysky <graysky@archlinux.us>
Date: Thu, 22 Oct 2020 07:00:35 -0400
Subject: [PATCH 3/3] kernel-5.9
credit: https://github.com/warpme/minimyth2/blob/master/script/nvidia/nvidia-340.108/files/nvidia-340.108-fix-5.9-kernel-compile.patch
---
kernel/nv-drm.c | 8 ++++++++
kernel/nv-linux.h | 9 +++++++--
kernel/nv.c | 4 ++++
kernel/uvm/nvidia_uvm_linux.h | 2 ++
4 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/kernel/nv-drm.c b/kernel/nv-drm.c
index 85db07e..f0c1299 100644
--- a/kernel/nv-drm.c
+++ b/kernel/nv-drm.c
@@ -415,7 +415,11 @@ static struct drm_driver nv_drm_driver = {
.set_busid = drm_pci_set_busid,
#endif
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 9, 0)
+ .gem_free_object_unlocked = nv_gem_free,
+#else
.gem_free_object = nv_gem_free,
+#endif
.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
.gem_prime_export = drm_gem_prime_export,
@@ -511,8 +515,12 @@ RM_STATUS NV_API_CALL nv_alloc_os_descriptor_handle(
#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)
+ drm_gem_object_put_locked(&nv_obj->base);
#else
drm_gem_object_unreference_unlocked(&nv_obj->base);
+#endif
#endif
status = RM_OK;
diff --git a/kernel/nv-linux.h b/kernel/nv-linux.h
index d055552..524a8fe 100644
--- a/kernel/nv-linux.h
+++ b/kernel/nv-linux.h
@@ -136,8 +136,10 @@
#if defined(NVCPU_X86_64) && !defined(HAVE_COMPAT_IOCTL)
#include <linux/syscalls.h> /* sys_ioctl() */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 9, 0)
#include <linux/ioctl32.h> /* register_ioctl32_conversion() */
#endif
+#endif
#if !defined(NV_FILE_OPERATIONS_HAS_IOCTL) && \
!defined(NV_FILE_OPERATIONS_HAS_UNLOCKED_IOCTL)
@@ -2249,10 +2251,13 @@ static inline NvU64 nv_node_end_pfn(int nid)
pages, vmas, NULL);
#else
-
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 9, 0)
+ return get_user_pages_remote(mm, start, nr_pages, flags,
+ pages, vmas, NULL);
+#else
return get_user_pages_remote(tsk, mm, start, nr_pages, flags,
pages, vmas);
-
+#endif
#endif
}
diff --git a/kernel/nv.c b/kernel/nv.c
index a218f83..be4e0f8 100644
--- a/kernel/nv.c
+++ b/kernel/nv.c
@@ -2785,7 +2785,11 @@ nvidia_probe
#if defined(CONFIG_VGA_ARB)
#if defined(VGA_DEFAULT_DEVICE)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 9, 0)
+ vga_get(VGA_DEFAULT_DEVICE, VGA_RSRC_LEGACY_MASK, 0);
+#else
vga_tryget(VGA_DEFAULT_DEVICE, VGA_RSRC_LEGACY_MASK);
+#endif
#endif
vga_set_legacy_decoding(dev, VGA_RSRC_NONE);
#endif
diff --git a/kernel/uvm/nvidia_uvm_linux.h b/kernel/uvm/nvidia_uvm_linux.h
index 1625209..efc181f 100644
--- a/kernel/uvm/nvidia_uvm_linux.h
+++ b/kernel/uvm/nvidia_uvm_linux.h
@@ -158,8 +158,10 @@
#if defined(NVCPU_X86_64) && !defined(HAVE_COMPAT_IOCTL)
#include <linux/syscalls.h> /* sys_ioctl() */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 9, 0)
#include <linux/ioctl32.h> /* register_ioctl32_conversion() */
#endif
+#endif
#if !defined(NV_FILE_OPERATIONS_HAS_IOCTL) && \
!defined(NV_FILE_OPERATIONS_HAS_UNLOCKED_IOCTL)
--
2.29.0

View File

@ -2,7 +2,7 @@
Name: nvidia_340
Version: 340.108
Epoch: 1
Release: 3mamba
Release: 7mamba
Summary: NVIDIA proprietary accelerated drivers for the Linux Kernel
Group: System/Kernel and Hardware
Vendor: openmamba
@ -11,15 +11,29 @@ Packager: Silvan Calarco <silvan.calarco@mambasoft.it>
URL: http://www.nvidia.com/object/unix.html
Source0: http://us.download.nvidia.com/XFree86/Linux-x86/%{version}/NVIDIA-Linux-x86-%{version}.run
Source1: http://us.download.nvidia.com/XFree86/Linux-x86_64/%{version}/NVIDIA-Linux-x86_64-%{version}.run
Source2: nvidia_340.sysusers
Patch0: nvidia-331.20-x86-conftest.patch
Patch1: nvidia-340.102-kernel-4.9.patch
Patch2: nvidia_340-340.102-kernel-4.9-2.patch
Patch3: nvidia_340-340.107-conftest-x86.patch
Patch4: nvidia_340-340.108-kernel-5.7.patch
Patch5: nvidia_340-340.108-kernel-5.8.patch
Patch6: nvidia_340-340.108-kernel-5.9.patch
Patch7: nvidia_340-340.108-kernel-5.10.patch
Patch8: nvidia_340-340.108-kernel-5.11.patch
License: no OSI Approved
## AUTOBUILDREQ-BEGIN
BuildRequires: glibc-devel
BuildRequires: libX11-devel
BuildRequires: libXext-devel
BuildRequires: libatk-devel
BuildRequires: libgdk-pixbuf-devel
BuildRequires: libglib-devel
BuildRequires: libglvnd-devel
BuildRequires: libgtk2-devel
BuildRequires: libpango-devel
## AUTOBUILDREQ-END
ExclusiveArch: i586 x86_64
BuildRoot: %{_tmppath}/%{name}-%{version}-root
%description
nvidia proprietary accelerated drivers for the Linux Kernel.
@ -38,59 +52,27 @@ Provides: xorgdrvvideo
Provides: kernelnvidia
Conflicts: xorg-drv-video-nvidia
Conflicts: xorg-drv-video-nvidia_304
AutoReq: no
Conflicts: xorg-drv-video-nvidia_390
Provides: libGL-%{name}-X11
Obsoletes: libGL-%{name}-X11 < 1:340.108-7mamba
Obsoletes: libglx-nvidia < 1:340.108-7mamba
Provides: xorg-ext-libglx-%{name}
Obsoletes: xorg-ext-libglx-%{name} < 1:340.108-7mamba
Conflicts: xorg-ext-libglx-nvidia_304
Conflicts: xorg-ext-libglx-nvidia_390
Conflicts: xorg-ext-libglx-nvidia
Provides: xorg-apps-%{name}
Obsoletes: xorg-apps-%{name} < 1:340.108-7mamba
Conflicts: xorg-apps-nvidia_304
Conflicts: xorg-apps-nvidia_390
Conflicts: xorg-apps-nvidia
%description -n xorg-drv-video-%{name}
The NVIDIA Accelerated Linux Driver Set brings both accelerated 2D functionality and high performance OpenGL support to Linux x86 with theuse of NVIDIA graphics processing units (GPUs).
These drivers provide optimized hardware acceleration of OpenGL applications via a direct-rendering X Server and support nearly all NVIDIA graphics chips.
TwinView, TV-Out and flat panel displays are also supported.
This package contains the Xorg libraries.
%package -n libGL-%{name}-X11
Group: System/Libraries
Summary: NVIDIA proprietary OpenGL library implementation
Requires: xorg-ext-libglx-%{name} == %{epoch}:%{version}-%{release}
Provides: xorglibGL
Provides: libGL.so.1
Conflicts: libGL-nvidia-X11
%description -n libGL-%{name}-X11
The NVIDIA Accelerated Linux Driver Set brings both accelerated 2D functionality and high performance OpenGL support to Linux x86 with theuse of NVIDIA graphics processing units (GPUs).
These drivers provide optimized hardware acceleration of OpenGL applications via a direct-rendering X Server and support nearly all NVIDIA graphics chips.
TwinView, TV-Out and flat panel displays are also supported.
This package contains the NVIDIA proprietary OpenGL library implementation for Xorg.
%package -n xorg-ext-libglx-%{name}
Group: System/Libraries
Summary: NVIDIA proprietary glx library implementation
Provides: xorglibglx
Conflicts: xorg-ext-libglx-nvidia
%description -n xorg-ext-libglx-%{name}
The NVIDIA Accelerated Linux Driver Set brings both accelerated 2D functionality and high performance OpenGL support to Linux x86 with theuse of NVIDIA graphics processing units (GPUs).
These drivers provide optimized hardware acceleration of OpenGL applications via a direct-rendering X Server and support nearly all NVIDIA graphics chips.
TwinView, TV-Out and flat panel displays are also supported.
This package contains the NVIDIA proprietary glx library implementation for Xorg.
%package -n xorg-apps-%{name}
Group: System/Tools
Summary: NVIDIA configuration tools
Conflicts: xorg-apps-nvidia
%description -n xorg-apps-%{name}
The NVIDIA Accelerated Linux Driver Set brings both accelerated 2D functionality and high performance OpenGL support to Linux x86 with theuse of NVIDIA graphics processing units (GPUs).
These drivers provide optimized hardware acceleration of OpenGL applications via a direct-rendering X Server and support nearly all NVIDIA graphics chips.
TwinView, TV-Out and flat panel displays are also supported.
This package contains the NVIDIA tools nvidia-settings, nvidia-xconfig, and nvidia-smi.
%package -n xorg-drv-video-%{name}-doc
Group: Documentation
Summary: HTML documentation for NVIDIA Accelerated Libraries for Xorg
@ -98,14 +80,15 @@ AutoReq: no
%description -n xorg-drv-video-%{name}-doc
The NVIDIA Accelerated Linux Driver Set brings both accelerated 2D functionality and high performance OpenGL support to Linux x86 with theuse of NVIDIA graphics processing units (GPUs).
These drivers provide optimized hardware acceleration of OpenGL applications via a direct-rendering X Server and support nearly all NVIDIA graphics chips.
TwinView, TV-Out and flat panel displays are also supported.
This package contains the HTML documentation.
%prep
%setup -q -c -n %{name}-%{version} -T
%global __provides_exclude ^(libGL\\.so.*|libEGL\\.so.*|libGLESv1_CM\\.so.*|libGLESv2\\.so.*|libOpenCL\\.so.*)$
#
# unpack NVIDIA files
#
@ -125,6 +108,12 @@ cd current
%patch1 -p1
#%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
%patch6 -p1
%patch7 -p1
%patch8 -p1
tar xf nvidia-persistenced-init.tar.bz2
cd ..
%build
@ -133,126 +122,104 @@ cd ..
[ "%{buildroot}" != / ] && rm -rf "%{buildroot}"
pushd current
# From Arch Linux
# X driver
install -D -m755 nvidia_drv.so %{buildroot}%{_libdir}/xorg/modules/drivers/nvidia_drv.so
# GLX extension module for X
install -D -m755 libglx.so.%{version} %{buildroot}%{_libdir}/nvidia/xorg/libglx.so.%{version}
# Ensure that X finds glx
ln -s libglx.so.%{version} %{buildroot}%{_libdir}/nvidia/xorg/libglx.so.1
ln -s libglx.so.%{version} %{buildroot}%{_libdir}/nvidia/xorg/libglx.so
# EGL and OpenGL ES libraries
install -D -m755 libGL.so.%{version} %{buildroot}%{_libdir}/libGL.so.%{version}
install -D -m755 libEGL.so.%{version} %{buildroot}%{_libdir}/libEGL.so.%{version}
install -D -m755 libGLESv1_CM.so.%{version} %{buildroot}%{_libdir}/libGLESv1_CM.so.%{version}
install -D -m755 libGLESv2.so.%{version} %{buildroot}%{_libdir}/libGLESv2.so.%{version}
# OpenGL core library
install -D -m755 libnvidia-glcore.so.%{version} %{buildroot}%{_libdir}/libnvidia-glcore.so.%{version}
install -D -m755 libnvidia-eglcore.so.%{version} %{buildroot}%{_libdir}/libnvidia-eglcore.so.%{version}
install -D -m755 libnvidia-glsi.so.%{version} %{buildroot}%{_libdir}/libnvidia-glsi.so.%{version}
# OpenCL
install -D -m644 nvidia.icd %{buildroot}%{_sysconfdir}/OpenCL/vendors/nvidia.icd
install -D -m755 libnvidia-compiler.so.%{version} %{buildroot}%{_libdir}/libnvidia-compiler.so.%{version}
install -D -m755 libnvidia-opencl.so.%{version} %{buildroot}%{_libdir}/libnvidia-opencl.so.%{version}
# misc
install -D -m755 libnvidia-ifr.so.%{version} %{buildroot}%{_libdir}/libnvidia-ifr.so.%{version}
install -D -m755 libnvidia-fbc.so.%{version} %{buildroot}%{_libdir}/libnvidia-fbc.so.%{version}
install -D -m755 libnvidia-encode.so.%{version} %{buildroot}%{_libdir}/libnvidia-encode.so.%{version}
install -D -m755 libnvidia-cfg.so.%{version} %{buildroot}%{_libdir}/libnvidia-cfg.so.%{version}
install -D -m755 libnvidia-ml.so.%{version} %{buildroot}%{_libdir}/libnvidia-ml.so.%{version}
# VDPAU
install -D -m755 libvdpau_nvidia.so.%{version} %{buildroot}%{_libdir}/vdpau/libvdpau_nvidia.so.%{version}
# nvidia-tls library
install -D -m755 tls/libnvidia-tls.so.%{version} %{buildroot}%{_libdir}/tls/libnvidia-tls.so.%{version}
# CUDA
install -D -m755 libcuda.so.%{version} %{buildroot}%{_libdir}/libcuda.so.%{version}
install -D -m755 libnvcuvid.so.%{version} %{buildroot}%{_libdir}/libnvcuvid.so.%{version}
# DEBUG
install -D -m755 nvidia-debugdump %{buildroot}%{_bindir}/nvidia-debugdump
# nvidia-xconfig
install -D -m755 nvidia-xconfig %{buildroot}%{_bindir}/nvidia-xconfig
install -D -m644 nvidia-xconfig.1.gz %{buildroot}%{_mandir}/man1/nvidia-xconfig.1.gz
# nvidia-settings
install -D -m755 nvidia-settings %{buildroot}%{_bindir}/nvidia-settings
install -D -m644 nvidia-settings.1.gz %{buildroot}%{_mandir}/man1/nvidia-settings.1.gz
install -D -m644 nvidia-settings.desktop %{buildroot}%{_datadir}/applications/nvidia-settings.desktop
install -D -m644 nvidia-settings.png %{buildroot}%{_datadir}/pixmaps/nvidia-settings.png
sed -e 's:__UTILS_PATH__:/usr/bin:' -e 's:__PIXMAP_PATH__:/usr/share/pixmaps:' -i %{buildroot}%{_datadir}/applications/nvidia-settings.desktop
# nvidia-bug-report
install -D -m755 nvidia-bug-report.sh %{buildroot}%{_bindir}/nvidia-bug-report.sh
# nvidia-smi
install -D -m755 nvidia-smi %{buildroot}%{_bindir}/nvidia-smi
install -D -m644 nvidia-smi.1.gz %{buildroot}%{_mandir}/man1/nvidia-smi.1.gz
# nvidia-cuda-mps
install -D -m755 nvidia-cuda-mps-server %{buildroot}%{_bindir}/nvidia-cuda-mps-server
install -D -m755 nvidia-cuda-mps-control %{buildroot}%{_bindir}/nvidia-cuda-mps-control
install -D -m644 nvidia-cuda-mps-control.1.gz %{buildroot}%{_mandir}/man1/nvidia-cuda-mps-control.1.gz
# nvidia-modprobe
# This should be removed if nvidia fixed their uvm module!
install -D -m4755 nvidia-modprobe %{buildroot}%{_bindir}/nvidia-modprobe
install -D -m644 nvidia-modprobe.1.gz %{buildroot}%{_mandir}/man1/nvidia-modprobe.1.gz
# nvidia-persistenced
install -D -m755 nvidia-persistenced %{buildroot}%{_bindir}/nvidia-persistenced
install -D -m644 nvidia-persistenced.1.gz %{buildroot}%{_mandir}/man1/nvidia-persistenced.1.gz
install -D -m644 nvidia-persistenced-init/systemd/nvidia-persistenced.service.template %{buildroot}%{_unitdir}/nvidia-persistenced.service
sed -i 's/__USER__/nvidia-persistenced/' %{buildroot}%{_unitdir}/nvidia-persistenced.service
# application profiles
install -D -m644 nvidia-application-profiles-%{version}-rc %{buildroot}%{_datadir}/nvidia/nvidia-application-profiles-%{version}-rc
install -D -m644 nvidia-application-profiles-%{version}-key-documentation %{buildroot}%{_datadir}/nvidia/nvidia-application-profiles-%{version}-key-documentation
install -Dm644 %{SOURCE2} %{buildroot}%{_sysusersdir}/nvidia.conf
# dkms
install -d -m0755 %{buildroot}%{_prefix}/src/%{name}-%{version}
cp -a kernel/* %{buildroot}%{_prefix}/src/%{name}-%{version}/
cat > %{buildroot}%{_prefix}/src/%{name}-%{version}/dkms.conf << _EOF
PACKAGE_NAME=%{name}
PACKAGE_VERSION=%{version}
MAKE="ln -sf /usr/src/\${PACKAGE_NAME}-\${PACKAGE_VERSION}/nv-kernel.o \${dkms_tree}/\${PACKAGE_NAME}/\${PACKAGE_VERSION}/build/;\
IGNORE_CC_MISMATCH=1 make -C \${kernel_source_dir} KERNEL_SOURCES=\${kernel_source_dir} M=\${dkms_tree}/\${PACKAGE_NAME}/\${PACKAGE_VERSION}/build modules"
CLEAN="make -C \${kernel_source_dir} M=\${dkms_tree}/\${PACKAGE_NAME}/\${PACKAGE_VERSION}/build clean"
BUILT_MODULE_NAME=nvidia
BUILT_MODULE_LOCATION=./
DEST_MODULE_LOCATION=/kernel/drivers/video
REMAKE_INITRD=no
AUTOINSTALL=yes
_EOF
cat kernel/uvm/dkms.conf.fragment >> %{buildroot}%{_prefix}/src/%{name}-%{version}/dkms.conf
install -D -m 0755 libnvidia-wfb.so.%{nvidia_current_libver} \
%{buildroot}%{_libdir}/xorg/modules/libnvidia-wfb.so.%{nvidia_current_libver}
install -D -m 0755 libcuda.so.%{nvidia_current_libver} \
%{buildroot}%{_libdir}/libcuda.so.%{nvidia_current_libver}
install -D -m 0755 libGL.so.%{nvidia_current_libver} \
%{buildroot}%{_libdir}/libGL_so.%{nvidia_current_libver}
ln -s libGL_so.%{nvidia_current_libver} %{buildroot}%{_libdir}/libGL_current_so.1
install -D -m 0755 libglx.so.%{nvidia_current_libver} \
%{buildroot}%{_libdir}/xorg/modules/extensions/libglx_so.%{nvidia_current_libver}
ln -s libglx_so.%{nvidia_current_libver} \
%{buildroot}%{_libdir}/xorg/modules/extensions/libglx_current_so
install -D -m 0755 libnvcuvid.so.%{nvidia_current_libver} \
%{buildroot}%{_libdir}/libnvcuvid.so.%{nvidia_current_libver}
install -D -m 0755 libnvidia-cfg.so.%{nvidia_current_libver} \
%{buildroot}%{_libdir}/libnvidia-cfg_so.%{nvidia_current_libver}
ln -s libnvidia-cfg_so.%{nvidia_current_libver} \
%{buildroot}%{_libdir}/libnvidia-cfg_current_so
install -D -m 0755 libnvidia-compiler.so.%{nvidia_current_libver} \
%{buildroot}%{_libdir}/libnvidia-compiler.so.%{nvidia_current_libver}
install -D -m 0755 libnvidia-encode.so.%{nvidia_current_libver} \
%{buildroot}%{_libdir}/libnvidia-encode.so.%{nvidia_current_libver}
install -D -m 0755 libnvidia-glcore.so.%{nvidia_current_libver} \
%{buildroot}%{_libdir}/libnvidia-glcore.so.%{nvidia_current_libver}
install -D -m 0755 libnvidia-ml.so.%{nvidia_current_libver} \
%{buildroot}%{_libdir}/libnvidia-ml.so.%{nvidia_current_libver}
ln -s libnvidia-ml.so.%{nvidia_current_libver} \
%{buildroot}%{_libdir}/libnvidia-ml.so.1
install -D -m 0755 libnvidia-opencl.so.%{nvidia_current_libver} \
%{buildroot}%{_libdir}/libnvidia-opencl.so.%{nvidia_current_libver}
install -D -m 0755 tls/libnvidia-tls.so.%{nvidia_current_libver} \
%{buildroot}%{_libdir}/tls/libnvidia-tls.so.%{nvidia_current_libver}
#ln -s libnvidia-tls_so.%{nvidia_current_libver} \
# %{buildroot}%{_libdir}/tls/libnvidia-tls_current_so.1
install -D -m 0755 libnvidia-tls.so.%{nvidia_current_libver} \
%{buildroot}%{_libdir}/libnvidia-tls.so.%{nvidia_current_libver}
#ln -s libnvidia-tls_so.%{nvidia_current_libver} \
# %{buildroot}%{_libdir}/libnvidia-tls_current_so.1
install -D -m755 libOpenCL.so.1.0.0 \
%{buildroot}%{_libdir}/libOpenCL_nvidia_so.1.0.0
#install -D -m755 libvdpau_nvidia.so.%{nvidia_current_libver} \
# %{buildroot}%{_libdir}/vdpau/libvdpau_nvidia.so.%{nvidia_current_libver}
#ln -s libvdpau_nvidia.so.%{nvidia_current_libver} \
# %{buildroot}%{_libdir}/vdpau/libvdpau_nvidia.so
#install -D -m 0755 libXvMCNVIDIA.so.%{nvidia_current_libver} \
# %{buildroot}%{_libdir}/libXvMCNVIDIA_so.%{nvidia_current_libver}
#ln -s libXvMCNVIDIA_so.%{nvidia_current_libver} \
# %{buildroot}%{_libdir}/libXvMCNVIDIA_current_so
#install -D -m 644 libXvMCNVIDIA.a %{buildroot}%{_libdir}/libXvMCNVIDIA.a
install -D -m 0755 nvidia_drv.so \
%{buildroot}%{_libdir}/xorg/modules/drivers/nvidia_current_drv_so
install -d %{buildroot}%{_sbindir}
cat > %{buildroot}%{_sbindir}/update-alternatives-set-nvidia << _EOF
#!/bin/sh
#update-alternatives --set nvidia_\$(uname -r)_%{kernel_ver_u}.ko \
#/lib/modules/\$(uname -r)/kernel/drivers/video/nvidia_current_ko
update-alternatives --set libglx.so %{_libdir}/xorg/modules/extensions/libglx_current_so
update-alternatives --set nvidia_drv.so %{_libdir}/xorg/modules/drivers/nvidia_current_drv_so
update-alternatives --set libGL.so.1 %{_libdir}/libGL_current_so.1
#update-alternatives --set libXvMCNVIDIA_dynamic.so %{_libdir}/libXvMCNVIDIA_current_so
update-alternatives --set libnvidia-cfg.so %{_libdir}/libnvidia-cfg_current_so
update-alternatives --set libOpenCL.so.1 %{_libdir}/libOpenCL_nvidia_so.1.0.0
#update-alternatives --set libnvidia-tls.so.1.lib %{_libdir}/libnvidia-tls_current_so.1
#update-alternatives --set libnvidia-tls.so.1 %{_libdir}/tls/libnvidia-tls_current_so.1
_EOF
for f in nvidia-xconfig nvidia-settings nvidia-smi; do
install -D -m 775 ${f} %{buildroot}%{_bindir}/${f}
install -D -m 644 ${f}.1.gz %{buildroot}%{_mandir}/man1/${f}.1.gz
done
install -D -m 644 nvidia-settings.desktop \
%{buildroot}%{_datadir}/applications/nvidia-settings.desktop
install -D -m 644 nvidia-settings.png \
%{buildroot}%{_datadir}/pixmaps/nvidia-settings.png
install -D -m755 libvdpau_nvidia.so.%{nvidia_current_libver} \
%{buildroot}%{_libdir}/vdpau/libvdpau_nvidia.so.%{nvidia_current_libver}
install -D -m755 libOpenCL.so.1.0.0 \
%{buildroot}%{_libdir}/libOpenCL_nvidia_so.1.0.0
ln -s libvdpau_nvidia.so.%{nvidia_current_libver} \
%{buildroot}%{_libdir}/vdpau/libvdpau_nvidia.so
# Clutter workaround (http://blog.sukimashita.com/2015/04/13/gnome-3-16-and-nvidia-binary-driver-crash-with-totem-gnome-maps-cheese-and-others/)
mkdir -p %{buildroot}%{_sysconfdir}/profile.d/
cat > %{buildroot}%{_sysconfdir}/profile.d/nvidia-clutter.sh << _EOF
export CLUTTER_BACKEND=x11
_EOF
chmod +x %{buildroot}%{_sysconfdir}/profile.d/nvidia-clutter.sh
## Clutter workaround (http://blog.sukimashita.com/2015/04/13/gnome-3-16-and-nvidia-binary-driver-crash-with-totem-gnome-maps-cheese-and-others/)
#mkdir -p %{buildroot}%{_sysconfdir}/profile.d/
#cat > %{buildroot}%{_sysconfdir}/profile.d/nvidia-clutter.sh << _EOF
#export CLUTTER_BACKEND=x11
#_EOF
#chmod +x %{buildroot}%{_sysconfdir}/profile.d/nvidia-clutter.sh
%check
cd current/kernel
@ -283,161 +250,71 @@ fi
:
%post -n xorg-drv-video-%{name}
# new install
update-alternatives --remove libnvidia-tls.so %{_libdir}/libnvidia-tls_current.so 2>/dev/null
if [ $1 -ge 1 ]; then
# update-alternatives \
# --install %{_libdir}/libXvMCNVIDIA_dynamic.so libXvMCNVIDIA_dynamic.so \
# %{_libdir}/libXvMCNVIDIA_current_so 50
update-alternatives \
--install %{_libdir}/libnvidia-cfg.so libnvidia-cfg.so \
%{_libdir}/libnvidia-cfg_current_so 50
# update-alternatives \
# --install %{_libdir}/libnvidia-tls.so.1 libnvidia-tls.so.1.lib \
# %{_libdir}/libnvidia-tls_current_so.1 50
# update-alternatives \
# --install %{_libdir}/tls/libnvidia-tls.so.1 libnvidia-tls.so.1 \
# %{_libdir}/tls/libnvidia-tls_current_so.1 50
[ -e %{_libdir}/xorg/modules/drivers/nvidia_drv.so ] && \
rm -f %{_libdir}/xorg/modules/drivers/nvidia_drv.so
update-alternatives \
--install %{_libdir}/xorg/modules/drivers/nvidia_drv.so nvidia_drv.so \
%{_libdir}/xorg/modules/drivers/nvidia_current_drv_so 50
update-alternatives \
--install %{_libdir}/libOpenCL.so.1 libOpenCL.so.1 \
%{_libdir}/libOpenCL_nvidia_so.1.0.0 20
fi
if [ $1 -eq 1 -a -n "`grep nv /etc/X11/xorg.conf 2>/dev/null`" ]; then
sed -i "s|\"nv\"|\"nvidia\"|" /etc/X11/xorg.conf
sed -i "s|Load \"dri\"||" /etc/X11/xorg.conf
fi
/sbin/ldconfig
/sbin/depmod -a -F /boot/System.map-%{kernel_ver}%{?KERNEL_TARGET} \
%{kernel_ver}%{?KERNEL_TARGET} &>/dev/null
exit 0
:
%preun -n xorg-drv-video-%{name}
# erase
dkms remove -q -m %{name} -v %{version} --all
if [ $1 -eq 0 ]; then
# update-alternatives \
# --remove libXvMCNVIDIA_dynamic.so %{_libdir}/libXvMCNVIDIA_current_so
update-alternatives \
--remove libnvidia-cfg.so %{_libdir}/libnvidia-cfg_current_so
update-alternatives \
--remove libnvidia-tls.so.1.lib %{_libdir}/libnvidia-tls_current_so.1
update-alternatives \
--remove libnvidia-tls.so.1 %{_libdir}/tls/libnvidia-tls_current_so.1
[ ! -L %{_libdir}/xorg/modules/drivers/nvidia_drv.so ] && \
rm -f %{_libdir}/xorg/modules/drivers/nvidia_drv.so
update-alternatives \
--remove nvidia_drv.so %{_libdir}/xorg/modules/drivers/nvidia_current_drv_so
update-alternatives \
--remove libOpenCL.so.1 %{_libdir}/libOpenCL_nvidia_so.1.0.0
[ -w /etc/X11/xorg.conf ] && \
sed -i "s|\"nvidia\"|\"nv\"|" /etc/X11/xorg.conf
/sbin/ldconfig
/sbin/depmod -a -F /boot/System.map-`uname -r` \
`uname -r` &>/dev/null
fi
exit 0
%post -n xorg-ext-libglx-%{name}
update-alternatives --remove libglx.so %{_libdir}/libglx_current.so 2>/dev/null
/usr/sbin/update-alternatives \
--install %{_libdir}/xorg/modules/extensions/libglx.so libglx.so \
%{_libdir}/xorg/modules/extensions/libglx_current_so 20
exit 0
%preun -n xorg-ext-libglx-%{name}
if [ $1 -eq 0 ]; then
/usr/sbin/update-alternatives --remove libglx.so \
%{_libdir}/xorg/modules/extensions/libglx_current_so
fi
exit 0
%post -n libGL-%{name}-X11
update-alternatives --remove libGL.so.1 %{_libdir}/libGL_current.so.1 2>/dev/null
/usr/sbin/update-alternatives \
--install %{_libdir}/libGL.so.1 libGL.so.1 \
%{_libdir}/libGL_current_so.1 20
/sbin/ldconfig
exit 0
%preun -n libGL-%{name}-X11
if [ $1 -eq 0 ]; then
/usr/sbin/update-alternatives --remove libGL.so.1 \
%{_libdir}/libGL_current_so.1
fi
/sbin/ldconfig
exit 0
%files -n libGL-%{name}-X11
%defattr(-,root,root)
%{_libdir}/libGL_so.%{nvidia_current_libver}
%{_libdir}/libGL_current_so.1
%files -n xorg-ext-libglx-%{name}
%defattr(-,root,root)
%{_libdir}/xorg/modules/extensions/libglx_current_so
%{_libdir}/xorg/modules/extensions/libglx_so.%{nvidia_current_libver}
:
%files -n xorg-drv-video-%{name}
%defattr(-,root,root)
%{_sysconfdir}/profile.d/nvidia-clutter.sh
#%{_sysconfdir}/profile.d/nvidia-clutter.sh
%{_sysconfdir}/OpenCL/vendors/nvidia.icd
%dir %{_prefix}/src/%{name}-%{version}
%{_prefix}/src/%{name}-%{version}/*
%attr(0755,root,root) %{_sbindir}/update-alternatives-set-nvidia
%{_libdir}/libnvidia-glcore.so.%{nvidia_current_libver}
#%{_libdir}/libXvMCNVIDIA.a
#%{_libdir}/libXvMCNVIDIA_so.%{nvidia_current_libver}
#%{_libdir}/libXvMCNVIDIA_current_so
%{_libdir}/xorg/modules/drivers/nvidia_current_drv_so
%{_libdir}/xorg/modules/libnvidia-wfb.so.%{nvidia_current_libver}
#%{_libdir}/xorg/modules/libwfb.so
%{_bindir}/nvidia-*
%{_prefix}/lib/systemd/system/nvidia-persistenced.service
%{_prefix}/lib/sysusers.d/nvidia.conf
%{_libdir}/libEGL.so.*
%{_libdir}/libGL.so.*
%{_libdir}/libGLESv1_CM.so.*
%{_libdir}/libGLESv2.so.*
%{_libdir}/libcuda.so.*
%{_libdir}/libnvcuvid.so.*
%{_libdir}/libnvidia-compiler.so.*
%{_libdir}/libnvidia-encode.so.*
%{_libdir}/libnvidia-opencl.so.*
%{_libdir}/libnvidia-cfg_so.%{nvidia_current_libver}
%{_libdir}/libnvidia-cfg_current_so
%{_libdir}/libnvidia-tls.so.%{nvidia_current_libver}
#%{_libdir}/libnvidia-tls_current_so.1
#%{_libdir}/tls/libnvidia-tls_current_so.1
%{_libdir}/libnvidia-ml.so.1
%{_libdir}/libnvidia-ml.so.%{nvidia_current_libver}
%{_libdir}/tls/libnvidia-tls.so.%{nvidia_current_libver}
%{_libdir}/libOpenCL_nvidia_so.1.0.0
%{_libdir}/vdpau/libvdpau_nvidia.so
%{_libdir}/vdpau/libvdpau_nvidia.so.%{nvidia_current_libver}
%doc current/LICENSE
%files -n xorg-apps-%{name}
%defattr(-,root,root)
%{_bindir}/nvidia-settings
%{_bindir}/nvidia-xconfig
%{_bindir}/nvidia-smi
%{_libdir}/libnvidia-*.so.*
%{_libdir}/nvidia/xorg/libglx.so
%{_libdir}/nvidia/xorg/libglx.so.*
%{_libdir}/tls/libnvidia-tls.so.*
%{_libdir}/vdpau/libvdpau_nvidia.so.*
%{_libdir}/xorg/modules/drivers/nvidia_drv.so
%{_datadir}/applications/nvidia-settings.desktop
%{_datadir}/nvidia/nvidia-application-profiles-%{version}-key-documentation
%{_datadir}/nvidia/nvidia-application-profiles-%{version}-rc
%{_datadir}/pixmaps/nvidia-settings.png
%{_mandir}/man1/nvidia-settings.*
%{_mandir}/man1/nvidia-smi.*
%{_mandir}/man1/nvidia-xconfig.*
%{_mandir}/man1/nvidia-cuda-mps-control.1*
%{_mandir}/man1/nvidia-modprobe.1*
%{_mandir}/man1/nvidia-persistenced.1*
%{_mandir}/man1/nvidia-settings.1*
%{_mandir}/man1/nvidia-smi.1*
%{_mandir}/man1/nvidia-xconfig.1*
%doc current/LICENSE
%files -n xorg-drv-video-%{name}-doc
%defattr(-,root,root)
%doc current/{LICENSE,NVIDIA_Changelog,README.txt} current/html
%doc current/{NVIDIA_Changelog,README.txt} current/html
%changelog
* Fri Apr 23 2021 Silvan Calarco <silvan.calarco@mambasoft.it> 340.108-7mamba
- repackaged with libglvnd and libmesa layout
* Sun Apr 18 2021 Silvan Calarco <silvan.calarco@mambasoft.it> 340.108-6mamba
- install included dkms file
* Sun Apr 18 2021 Silvan Calarco <silvan.calarco@mambasoft.it> 340.108-5mamba
- install included dkms file
* Thu Apr 15 2021 Silvan Calarco <silvan.calarco@mambasoft.it> 340.108-4mamba
- added patches up to kernel 5.11
* Fri Aug 21 2020 Silvan Calarco <silvan.calarco@mambasoft.it> 340.108-3mamba
- dkms: add IGNORE_CC_MISMATCH=1 before make command to fix build with gcc 10.1+

1
nvidia_340.sysusers Normal file
View File

@ -0,0 +1 @@
u nvidia-persistenced 143 'NVIDIA Persistence Daemon'