Github messages for voidlinux
 help / color / mirror / Atom feed
* [PR PATCH] New package: nvidia-vulkan-440.66.08
@ 2020-04-03  0:57 Hyper-KVM
  2020-04-03  3:31 ` [PR PATCH] [Updated] " Hyper-KVM
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Hyper-KVM @ 2020-04-03  0:57 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 439 bytes --]

There is a new pull request by Hyper-KVM against master on the void-packages repository

https://github.com/Hyper-KVM/void-packages nvidia-vulkan
https://github.com/void-linux/void-packages/pull/20582

New package: nvidia-vulkan-440.66.08
The linux5.6 patch needs to be updated for linux5.6.2, but otherwise the drivers work fine on older kernels.

A patch file from https://github.com/void-linux/void-packages/pull/20582.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-nvidia-vulkan-20582.patch --]
[-- Type: text/x-diff, Size: 34545 bytes --]

From e2cc31f3c14e982a72ba92145a91a5ab1d63b43e Mon Sep 17 00:00:00 2001
From: Hyper-KVM <hyperkvmx86@gmail.com>
Date: Thu, 2 Apr 2020 17:09:45 -0400
Subject: [PATCH] New package: nvidia-vulkan-440.66.08

---
 common/shlibs                                 |   7 +
 srcpkgs/nvidia-dkms-vulkan                    |   1 +
 srcpkgs/nvidia-gtklibs-vulkan                 |   1 +
 srcpkgs/nvidia-libs-32bit-vulkan              |   1 +
 srcpkgs/nvidia-libs-vulkan                    |   1 +
 srcpkgs/nvidia-opencl-vulkan                  |   1 +
 srcpkgs/nvidia-vulkan/files/dkms.conf         |  19 +
 srcpkgs/nvidia-vulkan/files/linux5.6.patch    | 504 ++++++++++++++++++
 .../files/nvidia-drm-outputclass.conf         |  18 +
 .../nvidia-vulkan/nvidia-dkms-vulkan.INSTALL  |  13 +
 .../nvidia-vulkan/nvidia-dkms-vulkan.REMOVE   |   9 +
 srcpkgs/nvidia-vulkan/template                | 275 ++++++++++
 srcpkgs/nvidia-vulkan/update                  |   2 +
 13 files changed, 852 insertions(+)
 create mode 120000 srcpkgs/nvidia-dkms-vulkan
 create mode 120000 srcpkgs/nvidia-gtklibs-vulkan
 create mode 120000 srcpkgs/nvidia-libs-32bit-vulkan
 create mode 120000 srcpkgs/nvidia-libs-vulkan
 create mode 120000 srcpkgs/nvidia-opencl-vulkan
 create mode 100644 srcpkgs/nvidia-vulkan/files/dkms.conf
 create mode 100644 srcpkgs/nvidia-vulkan/files/linux5.6.patch
 create mode 100644 srcpkgs/nvidia-vulkan/files/nvidia-drm-outputclass.conf
 create mode 100644 srcpkgs/nvidia-vulkan/nvidia-dkms-vulkan.INSTALL
 create mode 100644 srcpkgs/nvidia-vulkan/nvidia-dkms-vulkan.REMOVE
 create mode 100644 srcpkgs/nvidia-vulkan/template
 create mode 100644 srcpkgs/nvidia-vulkan/update

diff --git a/common/shlibs b/common/shlibs
index dbb31233ee0..37936dc2dc1 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -150,6 +150,13 @@ libnvidia-glsi.so.346.72 nvidia-libs-346.72_1 ignore
 libnvidia-glsi.so.340.107 nvidia340-libs-340.107_7 ignore
 libnvidia-fatbinaryloader.so.390.132 nvidia390-libs-390.132_1 ignore
 libnvidia-fatbinaryloader.so.430.40 nvidia-libs-430.40_1 ignore
+libnvidia-ml.so.1 nvidia-libs-vulkan-440.66.08_1 ignore
+libnvidia-tls.so.346.47 nvidia-libs-vulkan-440.66.08_1 ignore
+libnvidia-glcore.so.346.47 nvidia-libs-vulkan-440.66.08_1 ignore
+libnvidia-gtk2.so.346.47 nvidia-gtklibs-vulkan-440.66.08_1 ignore
+libnvidia-gtk3.so.346.47 nvidia-gtklibs-vulkan-440.66.08_1 ignore
+libnvidia-glsi.so.346.72 nvidia-libs-vulkan-440.66.08_1 ignore
+libnvidia-fatbinaryloader.so.430.40 nvidia-libs-vulkan-440.66.08_1 ignore
 libglapi.so.0 libglapi-7.11_1
 libgbm.so.1 libgbm-9.0_1
 libOpenGL.so.0 libglvnd-1.3.0_1
diff --git a/srcpkgs/nvidia-dkms-vulkan b/srcpkgs/nvidia-dkms-vulkan
new file mode 120000
index 00000000000..ec3ca44c3a6
--- /dev/null
+++ b/srcpkgs/nvidia-dkms-vulkan
@@ -0,0 +1 @@
+nvidia-vulkan
\ No newline at end of file
diff --git a/srcpkgs/nvidia-gtklibs-vulkan b/srcpkgs/nvidia-gtklibs-vulkan
new file mode 120000
index 00000000000..ec3ca44c3a6
--- /dev/null
+++ b/srcpkgs/nvidia-gtklibs-vulkan
@@ -0,0 +1 @@
+nvidia-vulkan
\ No newline at end of file
diff --git a/srcpkgs/nvidia-libs-32bit-vulkan b/srcpkgs/nvidia-libs-32bit-vulkan
new file mode 120000
index 00000000000..ec3ca44c3a6
--- /dev/null
+++ b/srcpkgs/nvidia-libs-32bit-vulkan
@@ -0,0 +1 @@
+nvidia-vulkan
\ No newline at end of file
diff --git a/srcpkgs/nvidia-libs-vulkan b/srcpkgs/nvidia-libs-vulkan
new file mode 120000
index 00000000000..ec3ca44c3a6
--- /dev/null
+++ b/srcpkgs/nvidia-libs-vulkan
@@ -0,0 +1 @@
+nvidia-vulkan
\ No newline at end of file
diff --git a/srcpkgs/nvidia-opencl-vulkan b/srcpkgs/nvidia-opencl-vulkan
new file mode 120000
index 00000000000..ec3ca44c3a6
--- /dev/null
+++ b/srcpkgs/nvidia-opencl-vulkan
@@ -0,0 +1 @@
+nvidia-vulkan
\ No newline at end of file
diff --git a/srcpkgs/nvidia-vulkan/files/dkms.conf b/srcpkgs/nvidia-vulkan/files/dkms.conf
new file mode 100644
index 00000000000..bbd9f6ae194
--- /dev/null
+++ b/srcpkgs/nvidia-vulkan/files/dkms.conf
@@ -0,0 +1,19 @@
+PACKAGE_NAME="nvidia-dev"
+PACKAGE_VERSION="__PKGVER"
+AUTOINSTALL="yes"
+
+# By default, DKMS will add KERNELRELEASE to the make command line; however,
+# this will cause the kernel module build to infer that it was invoked via
+# Kbuild directly instead of DKMS. The dkms(8) manual page recommends quoting
+# the 'make' command name to suppress this behavior.
+MAKE[0]="'make' __MAKEJOBS NV_EXCLUDE_BUILD_MODULES='' KERNEL_UNAME=${kernelver} modules"
+
+# The list of kernel modules was generated by nvidia-installer at runtime.
+BUILT_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"
diff --git a/srcpkgs/nvidia-vulkan/files/linux5.6.patch b/srcpkgs/nvidia-vulkan/files/linux5.6.patch
new file mode 100644
index 00000000000..6b0764a3ee1
--- /dev/null
+++ b/srcpkgs/nvidia-vulkan/files/linux5.6.patch
@@ -0,0 +1,504 @@
+diff --git a/kernel/common/inc/nv-procfs.h b/kernel/common/inc/nv-procfs.h
+index 8b53f86..4c5aceb 100644
+--- a/kernel/common/inc/nv-procfs.h
++++ b/kernel/common/inc/nv-procfs.h
+@@ -28,6 +28,18 @@
+ 
+ #define IS_EXERCISE_ERROR_FORWARDING_ENABLED() (EXERCISE_ERROR_FORWARDING)
+ 
++#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 = proc_create_data(filename, mode, parent, fops, __data);\
++        __entry;                                                         \
++    })
++#else
+ #define NV_CREATE_PROC_FILE(filename,parent,__name,__data)               \
+    ({                                                                    \
+         struct proc_dir_entry *__entry;                                  \
+@@ -38,6 +50,7 @@
+         __entry = proc_create_data(filename, mode, parent, fops, __data);\
+         __entry;                                                         \
+     })
++#endif
+ 
+ /*
+  * proc_mkdir_mode exists in Linux 2.6.9, but isn't exported until Linux 3.0.
+@@ -77,6 +90,44 @@
+     remove_proc_entry(entry->name, entry->parent);
+ #endif
+ 
++#if defined(NV_HAVE_PROC_OPS)
++#define NV_DEFINE_SINGLE_PROCFS_FILE(name, open_callback, close_callback)     \
++    static int nv_procfs_open_##name(                                         \
++        struct inode *inode,                                                  \
++        struct file *filep                                                    \
++    )                                                                         \
++    {                                                                         \
++        int ret;                                                              \
++        ret = single_open(filep, nv_procfs_read_##name,                       \
++                          NV_PDE_DATA(inode));                                \
++        if (ret < 0)                                                          \
++        {                                                                     \
++            return ret;                                                       \
++        }                                                                     \
++        ret = open_callback();                                                \
++        if (ret < 0)                                                          \
++        {                                                                     \
++            single_release(inode, filep);                                     \
++        }                                                                     \
++        return ret;                                                           \
++    }                                                                         \
++                                                                              \
++    static int nv_procfs_release_##name(                                      \
++        struct inode *inode,                                                  \
++        struct file *filep                                                    \
++    )                                                                         \
++    {                                                                         \
++        close_callback();                                                     \
++        return singe_release(inode, filep);                                  \
++    }                                                                         \
++                                                                              \
++    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    = nv_procfs_release_##name,                          \
++    };
++#else
+ #define NV_DEFINE_SINGLE_PROCFS_FILE(name, open_callback, close_callback)     \
+     static int nv_procfs_open_##name(                                         \
+         struct inode *inode,                                                  \
+@@ -114,6 +165,7 @@
+         .llseek     = seq_lseek,                                              \
+         .release    = nv_procfs_release_##name,                               \
+     };
++#endif
+ 
+ #endif  /* CONFIG_PROC_FS */
+ 
+diff --git a/kernel/common/inc/nv-time.h b/kernel/common/inc/nv-time.h
+index 968b873..f03c7b0 100644
+--- a/kernel/common/inc/nv-time.h
++++ b/kernel/common/inc/nv-time.h
+@@ -27,7 +27,12 @@
+ 
+ #include <linux/ktime.h>
+ 
+-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);
+@@ -36,7 +41,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/conftest.sh b/kernel/conftest.sh
+index 57d85a4..4eb703f 100755
+--- a/kernel/conftest.sh
++++ b/kernel/conftest.sh
+@@ -806,6 +806,46 @@ compile_test() {
+             compile_check_conftest "$CODE" "NV_FILE_OPERATIONS_HAS_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"
++        ;;
++
++        ktime_get_raw_ts64)
++            #
++            # Determine if the ktime_get_raw_ts64() function is present.
++            #
++            CODE="
++            #include <linux/ktime.h>
++            int conftest_ktime_get_raw_ts64(void) {
++                struct timespec64 ts = {0};
++
++                ktime_get_raw_ts64(&ts64);
++            }"
++
++            compile_check_conftest "$CODE" "NV_KTIME_GET_RAW_TS64_PRESENT" "" "functions"
++        ;;
++
++        ktime_get_real_ts64)
++            #
++            # Determine if the ktime_get_real_ts64() function is present.
++            #
++            CODE="
++            #include <linux/ktime.h>
++            int conftest_ktime_get_raw_ts64(void) {
++                struct timespec64 ts = {0};
++
++                ktime_get_real_ts64(&ts64);
++            }"
++
++            compile_check_conftest "$CODE" "NV_KTIME_GET_REAL_TS64_PRESENT" "" "functions"
++        ;;
++
+         sg_alloc_table)
+             #
+             # sg_alloc_table_from_pages added by commit efc42bc98058
+diff --git a/kernel/nvidia-modeset/nvidia-modeset-linux.c b/kernel/nvidia-modeset/nvidia-modeset-linux.c
+index 0ca2c7d..8902143 100644
+--- a/kernel/nvidia-modeset/nvidia-modeset-linux.c
++++ b/kernel/nvidia-modeset/nvidia-modeset-linux.c
+@@ -266,7 +266,7 @@ void NVKMS_API_CALL nvkms_usleep(NvU64 usec)
+ 
+ NvU64 NVKMS_API_CALL nvkms_get_usec(void)
+ {
+-    struct timeval tv;
++    struct nv_timeval tv;
+ 
+     nv_gettimeofday(&tv);
+ 
+diff --git a/kernel/nvidia-uvm/uvm_linux.h b/kernel/nvidia-uvm/uvm_linux.h
+index 30a9dea..1a20eff 100644
+--- a/kernel/nvidia-uvm/uvm_linux.h
++++ b/kernel/nvidia-uvm/uvm_linux.h
+@@ -301,7 +301,16 @@ static inline uint64_t NV_DIV64(uint64_t dividend, uint64_t divisor, uint64_t *r
+ }
+ #endif
+ 
+-#if defined(CLOCK_MONOTONIC_RAW)
++#if defined(NV_KTIME_GET_RAW_TS64_PRESENT)
++static inline NvU64 NV_GETTIME(void)
++{
++    struct timespec64 ts;
++
++    ktime_get_raw_ts64(&ts);
++
++    return (ts.tv_sec * 1000000000ULL + ts.tv_nsec);
++}
++#elif defined(CLOCK_MONOTONIC_RAW)
+ /* Return a nanosecond-precise value */
+ static inline NvU64 NV_GETTIME(void)
+ {
+@@ -317,7 +326,7 @@ static inline NvU64 NV_GETTIME(void)
+  * available non-GPL symbols. */
+ static inline NvU64 NV_GETTIME(void)
+ {
+-    struct timeval tv = {0};
++    struct nv_timeval tv = {0};
+ 
+     nv_gettimeofday(&tv);
+ 
+diff --git a/kernel/nvidia/linux_nvswitch.c b/kernel/nvidia/linux_nvswitch.c
+index 1d2c1bc..0a0b4e8 100644
+--- a/kernel/nvidia/linux_nvswitch.c
++++ b/kernel/nvidia/linux_nvswitch.c
+@@ -1578,10 +1578,17 @@ nvswitch_os_get_platform_time
+     void
+ )
+ {
++#if defined(NV_KTIME_GET_REAL_TS64_PRESENT)
++    struct timespec64 ts64;
++
++    ktime_get_real_ts64(&ts64);
++    return ((NvU64)(ts64.tv_sec * NSEC_PER_SEC) + ts64.tv_nsec);
++#else
+     struct timespec ts;
+ 
+     getnstimeofday(&ts);
+     return ((NvU64) timespec_to_ns(&ts));
++#endif
+ }
+ 
+ void
+diff --git a/kernel/nvidia/nv-procfs.c b/kernel/nvidia/nv-procfs.c
+index 064d727..a7308d3 100644
+--- a/kernel/nvidia/nv-procfs.c
++++ b/kernel/nvidia/nv-procfs.c
+@@ -452,6 +452,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,
+@@ -460,6 +469,7 @@ static struct file_operations nv_procfs_registry_fops = {
+     .llseek  = seq_lseek,
+     .release = nv_procfs_close_registry,
+ };
++#endif
+ 
+ #if defined(CONFIG_PM)
+ static int
+@@ -531,6 +541,15 @@ nv_procfs_open_suspend_depth(
+     return single_open(file, nv_procfs_show_suspend_depth, NULL);
+ }
+ 
++#if defined(NV_HAVE_PROC_OPS)
++static struct proc_ops nv_procfs_suspend_depth_fops = {
++    .proc_open    = nv_procfs_open_suspend_depth,
++    .proc_read    = seq_read,
++    .proc_write   = nv_procfs_write_suspend_depth,
++    .proc_lseek   = seq_lseek,
++    .proc_release = single_release
++};
++#else
+ static struct file_operations nv_procfs_suspend_depth_fops = {
+     .owner   = THIS_MODULE,
+     .open    = nv_procfs_open_suspend_depth,
+@@ -539,6 +558,7 @@ static struct file_operations nv_procfs_suspend_depth_fops = {
+     .llseek  = seq_lseek,
+     .release = single_release
+ };
++#endif
+ 
+ static int
+ nv_procfs_show_suspend(
+@@ -613,6 +633,15 @@ nv_procfs_open_suspend(
+     return single_open(file, nv_procfs_show_suspend, NULL);
+ }
+ 
++#if defined(NV_HAVE_PROC_OPS)
++static struct proc_ops nv_procfs_suspend_fops = {
++    .proc_open    = nv_procfs_open_suspend,
++    .proc_read    = seq_read,
++    .proc_write   = nv_procfs_write_suspend,
++    .proc_lseek   = seq_lseek,
++    .proc_release = single_release
++};
++#else
+ static struct file_operations nv_procfs_suspend_fops = {
+     .owner   = THIS_MODULE,
+     .open    = nv_procfs_open_suspend,
+@@ -622,6 +651,7 @@ static struct file_operations nv_procfs_suspend_fops = {
+     .release = single_release
+ };
+ #endif
++#endif
+ 
+ /*
+  * Forwards error to nv_log_error which exposes data to vendor callback
+@@ -724,12 +754,20 @@ done:
+     return status;
+ }
+ 
++#if defined(NV_HAVE_PROC_OPS)
++static struct proc_ops nv_procfs_exercise_error_forwarding_fops = {
++    .proc_open    = nv_procfs_open_exercise_error_forwarding,
++    .proc_write   = nv_procfs_write_file,
++    .proc_release = nv_procfs_close_exercise_error_forwarding,
++};
++#else
+ static struct file_operations nv_procfs_exercise_error_forwarding_fops = {
+     .owner   = THIS_MODULE,
+     .open    = nv_procfs_open_exercise_error_forwarding,
+     .write   = nv_procfs_write_file,
+     .release = nv_procfs_close_exercise_error_forwarding,
+ };
++#endif
+ 
+ static int
+ nv_procfs_read_unbind_lock(
+@@ -851,6 +889,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,
+@@ -859,6 +906,7 @@ static struct file_operations nv_procfs_unbind_lock_fops = {
+     .llseek  = seq_lseek,
+     .release = nv_procfs_close_unbind_lock,
+ };
++#endif
+ 
+ static const char*
+ numa_status_describe(nv_numa_status_t state)
+@@ -1187,6 +1235,22 @@ done:
+     return retval;
+ }
+ 
++#if defined(NV_HAVE_PROC_OPS)
++static const struct proc_ops nv_procfs_numa_status_fops = {
++    .proc_open    = nv_procfs_open_numa_status,
++    .proc_read    = seq_read,
++    .proc_write   = nv_procfs_write_file,
++    .proc_lseek   = seq_lseek,
++    .proc_release = nv_procfs_close_numa_status,
++};
++
++static const struct proc_ops nv_procfs_offline_pages_fops = {
++    .proc_open    = nv_procfs_open_offline_pages,
++    .proc_read    = seq_read,
++    .proc_lseek   = seq_lseek,
++    .proc_release = nv_procfs_close_offline_pages,
++};
++#else
+ static const struct file_operations nv_procfs_numa_status_fops = {
+     .owner   = THIS_MODULE,
+     .open    = nv_procfs_open_numa_status,
+@@ -1203,6 +1267,7 @@ static const struct file_operations nv_procfs_offline_pages_fops = {
+     .llseek  = seq_lseek,
+     .release = nv_procfs_close_offline_pages,
+ };
++#endif
+ 
+ static int
+ nv_procfs_read_text_file(
+diff --git a/kernel/nvidia/nvidia.Kbuild b/kernel/nvidia/nvidia.Kbuild
+index 5ec3e65..339a757 100644
+--- a/kernel/nvidia/nvidia.Kbuild
++++ b/kernel/nvidia/nvidia.Kbuild
+@@ -150,6 +150,9 @@ NV_CONFTEST_SYMBOL_COMPILE_TESTS += is_export_symbol_present_swiotlb_dma_ops
+ NV_CONFTEST_TYPE_COMPILE_TESTS += acpi_op_remove
+ NV_CONFTEST_TYPE_COMPILE_TESTS += outer_flush_all
+ NV_CONFTEST_TYPE_COMPILE_TESTS += file_operations
++NV_CONFTEST_TYPE_COMPILE_TESTS += proc_ops
++NV_CONFTEST_TYPE_COMPILE_TESTS += ktime_get_raw_ts64
++NV_CONFTEST_TYPE_COMPILE_TESTS += ktime_get_real_ts64
+ NV_CONFTEST_TYPE_COMPILE_TESTS += file_inode
+ NV_CONFTEST_TYPE_COMPILE_TESTS += kuid_t
+ NV_CONFTEST_TYPE_COMPILE_TESTS += dma_ops
+diff --git a/kernel/nvidia/nvlink_linux.c b/kernel/nvidia/nvlink_linux.c
+index c84b36a..54fe244 100644
+--- a/kernel/nvidia/nvlink_linux.c
++++ b/kernel/nvidia/nvlink_linux.c
+@@ -513,8 +513,8 @@ int NVLINK_API_CALL nvlink_memcmp(const void *s1, const void *s2, NvLength size)
+ 
+ static NvBool nv_timer_less_than
+ (
+-    const struct timeval *a,
+-    const struct timeval *b
++    const struct nv_timeval *a,
++    const struct nv_timeval *b
+ )
+ {
+     return (a->tv_sec == b->tv_sec) ? (a->tv_usec < b->tv_usec) 
+@@ -523,9 +523,9 @@ static NvBool nv_timer_less_than
+ 
+ static void nv_timeradd
+ (
+-    const struct timeval    *a,
+-    const struct timeval    *b,
+-    struct timeval          *result
++    const struct nv_timeval    *a,
++    const struct nv_timeval    *b,
++    struct nv_timeval          *result
+ )
+ {
+     result->tv_sec = a->tv_sec + b->tv_sec;
+@@ -539,9 +539,9 @@ static void nv_timeradd
+ 
+ static void nv_timersub
+ (
+-    const struct timeval    *a,
+-    const struct timeval    *b,
+-    struct timeval          *result
++    const struct nv_timeval    *a,
++    const struct nv_timeval    *b,
++    struct nv_timeval          *result
+ )
+ {
+     result->tv_sec = a->tv_sec - b->tv_sec;
+@@ -561,7 +561,7 @@ void NVLINK_API_CALL nvlink_sleep(unsigned int ms)
+     unsigned long us;
+     unsigned long jiffies;
+     unsigned long mdelay_safe_msec;
+-    struct timeval tm_end, tm_aux;
++    struct nv_timeval tm_end, tm_aux;
+ 
+     nv_gettimeofday(&tm_aux);
+ 
+diff --git a/kernel/nvidia/os-interface.c b/kernel/nvidia/os-interface.c
+index 07f1b77..239be58 100644
+--- a/kernel/nvidia/os-interface.c
++++ b/kernel/nvidia/os-interface.c
+@@ -463,7 +463,7 @@ NV_STATUS NV_API_CALL os_get_current_time(
+     NvU32 *useconds
+ )
+ {
+-    struct timeval tm;
++    struct nv_timeval tm;
+ 
+     nv_gettimeofday(&tm);
+ 
+@@ -477,9 +477,15 @@ NV_STATUS NV_API_CALL os_get_current_time(
+ 
+ void NV_API_CALL os_get_current_tick(NvU64 *nseconds)
+ {
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 5, 0)
++    struct timespec64 ts;
++
++    jiffies_to_timespec64(jiffies, &ts);
++#else
+     struct timespec ts;
+ 
+     jiffies_to_timespec(jiffies, &ts);
++#endif
+ 
+     *nseconds = ((NvU64)ts.tv_sec * NSEC_PER_SEC + (NvU64)ts.tv_nsec);
+ }
+@@ -549,7 +555,7 @@ NV_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
+@@ -589,9 +595,9 @@ NV_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);
+@@ -1954,7 +1960,7 @@ static NV_STATUS NV_API_CALL _os_ipmi_receive_resp
+ {
+     struct ipmi_recv_msg    *rx_msg;
+     int                     err_no;
+-    struct timeval          tv;
++    struct nv_timeval          tv;
+     NvU64                   start_time;
+ 
+     nv_gettimeofday(&tv);
+
diff --git a/srcpkgs/nvidia-vulkan/files/nvidia-drm-outputclass.conf b/srcpkgs/nvidia-vulkan/files/nvidia-drm-outputclass.conf
new file mode 100644
index 00000000000..65e3fd38622
--- /dev/null
+++ b/srcpkgs/nvidia-vulkan/files/nvidia-drm-outputclass.conf
@@ -0,0 +1,18 @@
+Section "ServerLayout"
+  Identifier "layout"
+  Option "AllowNVIDIAGPUScreens"
+EndSection
+
+Section "OutputClass"
+    Identifier "intel"
+    MatchDriver "i915"
+    Driver "modesetting"
+EndSection
+
+Section "OutputClass"
+    Identifier "nvidia"
+    MatchDriver "nvidia-drm"
+    Driver "nvidia"
+    Option "AllowEmptyInitialConfiguration"
+    ModulePath "/usr/lib/nvidia/xorg"
+EndSection
diff --git a/srcpkgs/nvidia-vulkan/nvidia-dkms-vulkan.INSTALL b/srcpkgs/nvidia-vulkan/nvidia-dkms-vulkan.INSTALL
new file mode 100644
index 00000000000..943fc6e77f0
--- /dev/null
+++ b/srcpkgs/nvidia-vulkan/nvidia-dkms-vulkan.INSTALL
@@ -0,0 +1,13 @@
+case "${ACTION}" in
+post)
+	if [ "${ARCH}" = "x86_64" ]; then
+		# Regenerate initramfs.
+		echo "Regenerating initramfs, please wait..."
+		dracut -f -q --regenerate-all
+	else
+		echo "Nvidia has dropped support for 32-bit kernels.\n"
+		echo "Please consider installing the nvidia390 package as an alternative.\n"
+		echo "This package is now only useful if you're using a x86_64 kernel.\n"
+	fi
+	;;
+esac
diff --git a/srcpkgs/nvidia-vulkan/nvidia-dkms-vulkan.REMOVE b/srcpkgs/nvidia-vulkan/nvidia-dkms-vulkan.REMOVE
new file mode 100644
index 00000000000..c10a4035d6a
--- /dev/null
+++ b/srcpkgs/nvidia-vulkan/nvidia-dkms-vulkan.REMOVE
@@ -0,0 +1,9 @@
+# Regenerate initramfs.
+case ${ACTION} in
+purge)
+	if [ "${ARCH}" = "x86_64" ]; then
+		echo "Regenerating initramfs, please wait..."
+		dracut -f -q --regenerate-all
+	fi
+	;;
+esac
diff --git a/srcpkgs/nvidia-vulkan/template b/srcpkgs/nvidia-vulkan/template
new file mode 100644
index 00000000000..04e6044030b
--- /dev/null
+++ b/srcpkgs/nvidia-vulkan/template
@@ -0,0 +1,275 @@
+# Template file for 'nvidia-vulkan'
+
+_desc="NVIDIA drivers for linux (Vulkan developer branch)"
+
+pkgname=nvidia-vulkan
+version=440.66.08
+revision=1
+maintainer="Hyper-KVM <hyperkvmx86@gmail.com>"
+license="custom:NVIDIA Proprietary"
+homepage="https://www.nvidia.com"
+
+archs="x86_64"
+nopie=yes
+create_wrksrc=yes
+short_desc="${_desc} - Libraries and Utilities"
+hostmakedepends="tar"
+conflicts="xserver-abi-video>24_1"
+
+_pkg="NVIDIA-Linux-x86_64-${version}"
+distfiles="https://developer.nvidia.com/vulkan-beta-${version//.}-linux>${_pkg}.run"
+checksum=af23e041f358a27f3fc531a9f4db591311cf8a074865b6992bb1763f29a1e478
+subpackages="nvidia-gtklibs-vulkan nvidia-dkms-vulkan nvidia-opencl-vulkan nvidia-libs-vulkan nvidia-libs-32bit-vulkan"
+depends="nvidia-libs-vulkan-${version}_${revision} nvidia-gtklibs-vulkan-${version}_${revision} nvidia-dkms-vulkan-${version}_${revision}"
+
+_install_libs() {
+	local libdir=$1
+
+	# GLX client libs
+	# Required for GLVND option
+	vinstall libGLX_nvidia.so.${version} 755 ${libdir}
+	ln -sf libGLX_nvidia.so.${version} ${DESTDIR}/${libdir}/libGLX_nvidia.so.0
+	ln -sf libGLX_nvidia.so.${version} ${DESTDIR}/${libdir}/libGLX_indirect.so.0
+
+	# OpenGL core library
+	vinstall libnvidia-glcore.so.${version} 755 ${libdir}
+	vinstall libnvidia-eglcore.so.${version} 755 ${libdir}
+	vinstall libnvidia-glsi.so.${version} 755 ${libdir}
+
+	# Vulkan core library
+	vinstall libnvidia-glvkspirv.so.${version} 755 ${libdir}
+
+	vinstall libEGL_nvidia.so.${version} 755 ${libdir}
+	ln -sf libEGL_nvidia.so.${version} ${DESTDIR}/${libdir}/libEGL_nvidia.so.0
+
+	vinstall libGLESv1_CM_nvidia.so.${version} 755 ${libdir}
+	ln -sf libGLESv1_CM_nvidia.so.${version} \
+		${DESTDIR}/${libdir}/libGLESv1_CM_nvidia.so.1
+
+	vinstall libGLESv2_nvidia.so.${version} 755 ${libdir}
+	ln -sf libGLESv2_nvidia.so.${version} ${DESTDIR}/${libdir}/libGLESv2_nvidia.so.2
+
+	# Thread Local Storage
+	vinstall libnvidia-tls.so.${version} 755 ${libdir}
+
+	# VDPAU
+	vinstall libvdpau_nvidia.so.${version} 755 ${libdir}/vdpau
+	ln -sf libvdpau_nvidia.so.${version} \
+		${DESTDIR}/${libdir}/vdpau/libvdpau_nvidia.so.1
+
+	vinstall libnvidia-ml.so.${version} 755 ${libdir}
+	ln -sf libnvidia-ml.so.${version} ${DESTDIR}/${libdir}/libnvidia-ml.so
+	ln -sf libnvidia-ml.so.${version} ${DESTDIR}/${libdir}/libnvidia-ml.so.1
+
+	vinstall libnvidia-encode.so.${version} 755 ${libdir}
+	ln -sf libnvidia-encode.so.${version} ${DESTDIR}/${libdir}/libnvidia-encode.so
+	ln -sf libnvidia-encode.so.${version} ${DESTDIR}/${libdir}/libnvidia-encode.so.1
+
+	vinstall libnvidia-ifr.so.${version} 755 ${libdir}
+	ln -sf libnvidia-ifr.so.${version} ${DESTDIR}/${libdir}/libnvidia-ifr.so
+	ln -sf libnvidia-ifr.so.${version} ${DESTDIR}/${libdir}/libnvidia-ifr.so.1
+
+	vinstall libnvidia-fbc.so.${version} 755 ${libdir}
+	ln -sf libnvidia-fbc.so.${version} ${DESTDIR}/${libdir}/libnvidia-fbc.so
+	ln -sf libnvidia-fbc.so.${version} ${DESTDIR}/${libdir}/libnvidia-fbc.so.1
+
+	vinstall libnvidia-fatbinaryloader.so.${version} 755 ${libdir}
+	ln -sf libnvidia-fatbinaryloader.so.${version} \
+		${DESTDIR}/${libdir}/libnvidia-fatbinaryloader.so.1
+	ln -sf libnvidia-fatbinaryloader.so.1 \
+		${DESTDIR}/${libdir}/libnvidia-fatbinaryloader.so
+
+	# CUDA
+	vinstall libcuda.so.${version} 755 ${libdir}
+	ln -sf libcuda.so.${version} ${DESTDIR}/${libdir}/libcuda.so
+	ln -sf libcuda.so.${version} ${DESTDIR}/${libdir}/libcuda.so.1
+
+	vinstall libnvcuvid.so.${version} 755 ${libdir}
+	ln -sf libnvcuvid.so.${version} ${DESTDIR}/${libdir}/libnvcuvid.so
+	ln -sf libnvcuvid.so.${version} ${DESTDIR}/${libdir}/libnvcuvid.so.1
+
+	vinstall libnvidia-opticalflow.so.${version} 755 ${libdir}
+	ln -sf libnvidia-opticalflow.so.${version} \
+		${DESTDIR}/${libdir}/libnvidia-opticalflow.so
+	ln -sf libnvidia-opticalflow.so.${version} \
+		${DESTDIR}/${libdir}/libnvidia-opticalflow.so.1
+
+	vinstall libnvidia-ptxjitcompiler.so.${version} 755 ${libdir}
+	ln -sf libnvidia-ptxjitcompiler.so.${version} \
+		${DESTDIR}/${libdir}/libnvidia-ptxjitcompiler.so.1
+	ln -sf libnvidia-ptxjitcompiler.so.1 \
+		${DESTDIR}/${libdir}/libnvidia-ptxjitcompiler.so
+
+	# helper libs for approved partners' GRID remote apps
+	vinstall libnvidia-ifr.so.${version} 755 usr/lib
+	vinstall libnvidia-fbc.so.${version} 755 usr/lib
+}
+
+do_extract() {
+	install -m755 ${XBPS_SRCDISTDIR}/${pkgname}-${version}/${_pkg}.run ${wrksrc}
+	cd ${wrksrc}
+	./${_pkg}.run --extract-only
+	rm -f ${_pkg}.run
+}
+
+do_patch() {
+	cd ${_pkg}
+	patch -p1 < ${FILESDIR}/linux5.6.patch
+}
+
+do_install() {
+	cd ${_pkg}
+
+	# X driver
+	vinstall nvidia_drv.so 755 usr/lib/xorg/modules/drivers
+
+	# GLX extension module for X
+	vinstall libglxserver_nvidia.so.${version} 755 usr/lib/nvidia/xorg
+	ln -sf libglxserver_nvidia.so.${version} \
+		${DESTDIR}/usr/lib/nvidia/xorg/libglxserver_nvidia.so
+	ln -sf libglxserver_nvidia.so.${version} \
+		${DESTDIR}/usr/lib/nvidia/xorg/libglxserver_nvidia.so.1
+
+	vinstall libnvidia-egl-wayland.so.1.1.4 755 usr/lib
+	ln -sf libnvidia-egl-wayland.so.1.1.4 \
+		${DESTDIR}/usr/lib/libnvidia-egl-wayland.so.1
+
+	vinstall 10_nvidia.json 755 usr/share/glvnd/egl_vendor.d
+	vinstall 10_nvidia_wayland.json \
+		755 usr/share/egl/egl_external_platform.d
+
+	vinstall libnvidia-cfg.so.${version} 755 usr/lib
+	ln -sf libnvidia-cfg.so.${version} ${DESTDIR}/usr/lib/libnvidia-cfg.so
+	ln -sf libnvidia-cfg.so.${version} ${DESTDIR}/usr/lib/libnvidia-cfg.so.1
+
+	vbin nvidia-cuda-mps-control
+	vbin nvidia-cuda-mps-server
+	gzip -d nvidia-cuda-mps-control.1.gz
+	vman nvidia-cuda-mps-control.1
+
+	# nvidia-xconfig
+	vbin nvidia-xconfig
+	gzip -d nvidia-xconfig.1.gz
+	vman nvidia-xconfig.1
+
+	# nvidia-settings
+	vbin nvidia-settings
+	gzip -d nvidia-settings.1.gz
+	vman nvidia-settings.1
+	vinstall nvidia-settings.desktop 644 usr/share/applications
+	vinstall nvidia-settings.png 644 usr/share/pixmaps
+	sed -e 's:__UTILS_PATH__:/usr/bin:' \
+		-e 's:__PIXMAP_PATH__:/usr/share/pixmaps:' \
+		-i ${DESTDIR}/usr/share/applications/nvidia-settings.desktop
+
+	vinstall libnvidia-gtk3.so.${version} 755 usr/lib
+	vinstall libnvidia-gtk2.so.${version} 755 usr/lib
+
+	# application profiles (needed by nvidia-settings)
+	vinstall nvidia-application-profiles-${version}-key-documentation \
+		644 usr/share/nvidia
+	vinstall nvidia-application-profiles-${version}-rc 644 usr/share/nvidia
+
+	# nvidia-bug-report
+	vbin nvidia-bug-report.sh nvidia-bug-report
+	vbin nvidia-debugdump
+
+	# nvidia-smi
+	vbin nvidia-smi
+	gzip -d nvidia-smi.1.gz
+	vman nvidia-smi.1
+
+	# nvidia-modprobe
+	vinstall nvidia-modprobe 4755 usr/bin
+	gzip -d nvidia-modprobe.1.gz
+	vman nvidia-modprobe.1
+
+	# opencl pkg
+	vinstall nvidia.icd 644 etc/OpenCL/vendors
+
+	vinstall libnvidia-compiler.so.${version} 755 usr/lib
+
+	vinstall libnvidia-opencl.so.${version} 755 usr/lib
+	ln -sf libnvidia-opencl.so.${version} \
+		${DESTDIR}/usr/lib/libnvidia-opencl.so
+	ln -sf libnvidia-opencl.so.${version} \
+		${DESTDIR}/usr/lib/libnvidia-opencl.so.1
+
+	# vulkan icd
+	vinstall nvidia_icd.json 644 usr/share/vulkan/icd.d
+
+	# vulkan real-time ray tracing extensions
+	vinstall libnvidia-rtcore.so.${version} 755 usr/lib
+	vinstall libnvidia-cbl.so.${version} 755 usr/lib
+
+	# optix ray racing engine
+	vinstall libnvoptix.so.${version} 755 usr/lib
+
+	# dkms pkg
+	vmkdir usr/src/nvidia-${version}
+	vcopy "kernel/*" usr/src/nvidia-${version}
+	vcopy ${FILESDIR}/dkms.conf usr/src/nvidia-${version}
+	sed -e "s/__PKGVER/${version}/g" \
+		-e 's/__MAKEJOBS/-j$(nproc)/g' \
+		-i ${DESTDIR}/usr/src/nvidia-${version}/dkms.conf
+
+	vmkdir /usr/share/X11/xorg.conf.d/
+	vinstall ${FILESDIR}/nvidia-drm-outputclass.conf 644 \
+		/usr/share/X11/xorg.conf.d 10-nvidia-drm-outputclass.conf
+
+	# Blacklist nouveau
+	vmkdir usr/lib/modprobe.d
+	echo "blacklist nouveau" > ${DESTDIR}/usr/lib/modprobe.d/nvidia.conf
+	chmod 644 ${DESTDIR}/usr/lib/modprobe.d/nvidia.conf
+
+	# License and documentation
+	vlicense LICENSE
+	vdoc README.txt README
+	vdoc NVIDIA_Changelog
+
+	# Libraries (64bit)
+	_install_libs usr/lib
+	cd 32
+	# Libraries (32bit)
+	_install_libs usr/lib32
+}
+
+nvidia-gtklibs-vulkan_package() {
+	short_desc="${_desc} - GTK+ libraries"
+	pkg_install() {
+		vmove "usr/lib/lib*gtk*.so*"
+	}
+}
+nvidia-libs-32bit-vulkan_package() {
+	short_desc="${_desc} - common libraries (32bit)"
+	# manually set 32bit depends for libglvnd
+	depends="glibc-32bit>=0 libX11-32bit>=0 libXext-32bit>=0 libglvnd-32bit>=0"
+	pkg_install() {
+		vmove usr/lib32
+	}
+}
+nvidia-libs-vulkan_package() {
+	short_desc="${_desc} - common libraries"
+	depends="libglvnd"
+	pkg_install() {
+		vmove usr/lib
+	}
+}
+nvidia-dkms-vulkan_package() {
+	short_desc="${_desc} - DKMS kernel module"
+	dkms_modules="nvidia ${version}"
+	depends="dkms"
+	pkg_install() {
+		vmove usr/src
+		vmove usr/lib/modprobe.d
+	}
+}
+nvidia-opencl-vulkan_package() {
+	short_desc="${_desc} - OpenCL implementation"
+	depends="libOpenCL"
+	pkg_install() {
+		vmove "usr/lib/libnvidia-compiler*"
+		vmove "usr/lib/libnvidia-opencl*"
+		vmove etc/OpenCL
+	}
+}
diff --git a/srcpkgs/nvidia-vulkan/update b/srcpkgs/nvidia-vulkan/update
new file mode 100644
index 00000000000..d33b1d9a141
--- /dev/null
+++ b/srcpkgs/nvidia-vulkan/update
@@ -0,0 +1,2 @@
+site="http://www.nvidia.com/object/unix.html"
+pattern='Branch Version.+>\K[\d.]+(?=</A>)'

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PR PATCH] [Updated] New package: nvidia-vulkan-440.66.08
  2020-04-03  0:57 [PR PATCH] New package: nvidia-vulkan-440.66.08 Hyper-KVM
@ 2020-04-03  3:31 ` Hyper-KVM
  2020-04-03  6:36 ` xtraeme
  2020-04-03  6:36 ` [PR PATCH] [Closed]: " xtraeme
  2 siblings, 0 replies; 4+ messages in thread
From: Hyper-KVM @ 2020-04-03  3:31 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 444 bytes --]

There is an updated pull request by Hyper-KVM against master on the void-packages repository

https://github.com/Hyper-KVM/void-packages nvidia-vulkan
https://github.com/void-linux/void-packages/pull/20582

New package: nvidia-vulkan-440.66.08
The linux5.6 patch needs to be updated for linux5.6.2, but otherwise the drivers work fine on older kernels.

A patch file from https://github.com/void-linux/void-packages/pull/20582.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-nvidia-vulkan-20582.patch --]
[-- Type: text/x-diff, Size: 34623 bytes --]

From be2f509079241c7386952ebb54bd92a165e94523 Mon Sep 17 00:00:00 2001
From: Hyper-KVM <hyperkvmx86@gmail.com>
Date: Thu, 2 Apr 2020 17:09:45 -0400
Subject: [PATCH] New package: nvidia-vulkan-440.66.08

---
 common/shlibs                                 |   7 +
 srcpkgs/nvidia-dkms-vulkan                    |   1 +
 srcpkgs/nvidia-gtklibs-vulkan                 |   1 +
 srcpkgs/nvidia-libs-32bit-vulkan              |   1 +
 srcpkgs/nvidia-libs-vulkan                    |   1 +
 srcpkgs/nvidia-opencl-vulkan                  |   1 +
 srcpkgs/nvidia-vulkan/files/dkms.conf         |  19 +
 srcpkgs/nvidia-vulkan/files/linux5.6.patch    | 504 ++++++++++++++++++
 .../files/nvidia-drm-outputclass.conf         |  18 +
 .../nvidia-vulkan/nvidia-dkms-vulkan.INSTALL  |  13 +
 .../nvidia-vulkan/nvidia-dkms-vulkan.REMOVE   |   9 +
 srcpkgs/nvidia-vulkan/template                | 275 ++++++++++
 srcpkgs/nvidia-vulkan/update                  |   2 +
 13 files changed, 852 insertions(+)
 create mode 120000 srcpkgs/nvidia-dkms-vulkan
 create mode 120000 srcpkgs/nvidia-gtklibs-vulkan
 create mode 120000 srcpkgs/nvidia-libs-32bit-vulkan
 create mode 120000 srcpkgs/nvidia-libs-vulkan
 create mode 120000 srcpkgs/nvidia-opencl-vulkan
 create mode 100644 srcpkgs/nvidia-vulkan/files/dkms.conf
 create mode 100644 srcpkgs/nvidia-vulkan/files/linux5.6.patch
 create mode 100644 srcpkgs/nvidia-vulkan/files/nvidia-drm-outputclass.conf
 create mode 100644 srcpkgs/nvidia-vulkan/nvidia-dkms-vulkan.INSTALL
 create mode 100644 srcpkgs/nvidia-vulkan/nvidia-dkms-vulkan.REMOVE
 create mode 100644 srcpkgs/nvidia-vulkan/template
 create mode 100644 srcpkgs/nvidia-vulkan/update

diff --git a/common/shlibs b/common/shlibs
index dbb31233ee0..37936dc2dc1 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -150,6 +150,13 @@ libnvidia-glsi.so.346.72 nvidia-libs-346.72_1 ignore
 libnvidia-glsi.so.340.107 nvidia340-libs-340.107_7 ignore
 libnvidia-fatbinaryloader.so.390.132 nvidia390-libs-390.132_1 ignore
 libnvidia-fatbinaryloader.so.430.40 nvidia-libs-430.40_1 ignore
+libnvidia-ml.so.1 nvidia-libs-vulkan-440.66.08_1 ignore
+libnvidia-tls.so.346.47 nvidia-libs-vulkan-440.66.08_1 ignore
+libnvidia-glcore.so.346.47 nvidia-libs-vulkan-440.66.08_1 ignore
+libnvidia-gtk2.so.346.47 nvidia-gtklibs-vulkan-440.66.08_1 ignore
+libnvidia-gtk3.so.346.47 nvidia-gtklibs-vulkan-440.66.08_1 ignore
+libnvidia-glsi.so.346.72 nvidia-libs-vulkan-440.66.08_1 ignore
+libnvidia-fatbinaryloader.so.430.40 nvidia-libs-vulkan-440.66.08_1 ignore
 libglapi.so.0 libglapi-7.11_1
 libgbm.so.1 libgbm-9.0_1
 libOpenGL.so.0 libglvnd-1.3.0_1
diff --git a/srcpkgs/nvidia-dkms-vulkan b/srcpkgs/nvidia-dkms-vulkan
new file mode 120000
index 00000000000..ec3ca44c3a6
--- /dev/null
+++ b/srcpkgs/nvidia-dkms-vulkan
@@ -0,0 +1 @@
+nvidia-vulkan
\ No newline at end of file
diff --git a/srcpkgs/nvidia-gtklibs-vulkan b/srcpkgs/nvidia-gtklibs-vulkan
new file mode 120000
index 00000000000..ec3ca44c3a6
--- /dev/null
+++ b/srcpkgs/nvidia-gtklibs-vulkan
@@ -0,0 +1 @@
+nvidia-vulkan
\ No newline at end of file
diff --git a/srcpkgs/nvidia-libs-32bit-vulkan b/srcpkgs/nvidia-libs-32bit-vulkan
new file mode 120000
index 00000000000..ec3ca44c3a6
--- /dev/null
+++ b/srcpkgs/nvidia-libs-32bit-vulkan
@@ -0,0 +1 @@
+nvidia-vulkan
\ No newline at end of file
diff --git a/srcpkgs/nvidia-libs-vulkan b/srcpkgs/nvidia-libs-vulkan
new file mode 120000
index 00000000000..ec3ca44c3a6
--- /dev/null
+++ b/srcpkgs/nvidia-libs-vulkan
@@ -0,0 +1 @@
+nvidia-vulkan
\ No newline at end of file
diff --git a/srcpkgs/nvidia-opencl-vulkan b/srcpkgs/nvidia-opencl-vulkan
new file mode 120000
index 00000000000..ec3ca44c3a6
--- /dev/null
+++ b/srcpkgs/nvidia-opencl-vulkan
@@ -0,0 +1 @@
+nvidia-vulkan
\ No newline at end of file
diff --git a/srcpkgs/nvidia-vulkan/files/dkms.conf b/srcpkgs/nvidia-vulkan/files/dkms.conf
new file mode 100644
index 00000000000..bbd9f6ae194
--- /dev/null
+++ b/srcpkgs/nvidia-vulkan/files/dkms.conf
@@ -0,0 +1,19 @@
+PACKAGE_NAME="nvidia-dev"
+PACKAGE_VERSION="__PKGVER"
+AUTOINSTALL="yes"
+
+# By default, DKMS will add KERNELRELEASE to the make command line; however,
+# this will cause the kernel module build to infer that it was invoked via
+# Kbuild directly instead of DKMS. The dkms(8) manual page recommends quoting
+# the 'make' command name to suppress this behavior.
+MAKE[0]="'make' __MAKEJOBS NV_EXCLUDE_BUILD_MODULES='' KERNEL_UNAME=${kernelver} modules"
+
+# The list of kernel modules was generated by nvidia-installer at runtime.
+BUILT_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"
diff --git a/srcpkgs/nvidia-vulkan/files/linux5.6.patch b/srcpkgs/nvidia-vulkan/files/linux5.6.patch
new file mode 100644
index 00000000000..6b0764a3ee1
--- /dev/null
+++ b/srcpkgs/nvidia-vulkan/files/linux5.6.patch
@@ -0,0 +1,504 @@
+diff --git a/kernel/common/inc/nv-procfs.h b/kernel/common/inc/nv-procfs.h
+index 8b53f86..4c5aceb 100644
+--- a/kernel/common/inc/nv-procfs.h
++++ b/kernel/common/inc/nv-procfs.h
+@@ -28,6 +28,18 @@
+ 
+ #define IS_EXERCISE_ERROR_FORWARDING_ENABLED() (EXERCISE_ERROR_FORWARDING)
+ 
++#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 = proc_create_data(filename, mode, parent, fops, __data);\
++        __entry;                                                         \
++    })
++#else
+ #define NV_CREATE_PROC_FILE(filename,parent,__name,__data)               \
+    ({                                                                    \
+         struct proc_dir_entry *__entry;                                  \
+@@ -38,6 +50,7 @@
+         __entry = proc_create_data(filename, mode, parent, fops, __data);\
+         __entry;                                                         \
+     })
++#endif
+ 
+ /*
+  * proc_mkdir_mode exists in Linux 2.6.9, but isn't exported until Linux 3.0.
+@@ -77,6 +90,44 @@
+     remove_proc_entry(entry->name, entry->parent);
+ #endif
+ 
++#if defined(NV_HAVE_PROC_OPS)
++#define NV_DEFINE_SINGLE_PROCFS_FILE(name, open_callback, close_callback)     \
++    static int nv_procfs_open_##name(                                         \
++        struct inode *inode,                                                  \
++        struct file *filep                                                    \
++    )                                                                         \
++    {                                                                         \
++        int ret;                                                              \
++        ret = single_open(filep, nv_procfs_read_##name,                       \
++                          NV_PDE_DATA(inode));                                \
++        if (ret < 0)                                                          \
++        {                                                                     \
++            return ret;                                                       \
++        }                                                                     \
++        ret = open_callback();                                                \
++        if (ret < 0)                                                          \
++        {                                                                     \
++            single_release(inode, filep);                                     \
++        }                                                                     \
++        return ret;                                                           \
++    }                                                                         \
++                                                                              \
++    static int nv_procfs_release_##name(                                      \
++        struct inode *inode,                                                  \
++        struct file *filep                                                    \
++    )                                                                         \
++    {                                                                         \
++        close_callback();                                                     \
++        return singe_release(inode, filep);                                  \
++    }                                                                         \
++                                                                              \
++    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    = nv_procfs_release_##name,                          \
++    };
++#else
+ #define NV_DEFINE_SINGLE_PROCFS_FILE(name, open_callback, close_callback)     \
+     static int nv_procfs_open_##name(                                         \
+         struct inode *inode,                                                  \
+@@ -114,6 +165,7 @@
+         .llseek     = seq_lseek,                                              \
+         .release    = nv_procfs_release_##name,                               \
+     };
++#endif
+ 
+ #endif  /* CONFIG_PROC_FS */
+ 
+diff --git a/kernel/common/inc/nv-time.h b/kernel/common/inc/nv-time.h
+index 968b873..f03c7b0 100644
+--- a/kernel/common/inc/nv-time.h
++++ b/kernel/common/inc/nv-time.h
+@@ -27,7 +27,12 @@
+ 
+ #include <linux/ktime.h>
+ 
+-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);
+@@ -36,7 +41,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/conftest.sh b/kernel/conftest.sh
+index 57d85a4..4eb703f 100755
+--- a/kernel/conftest.sh
++++ b/kernel/conftest.sh
+@@ -806,6 +806,46 @@ compile_test() {
+             compile_check_conftest "$CODE" "NV_FILE_OPERATIONS_HAS_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"
++        ;;
++
++        ktime_get_raw_ts64)
++            #
++            # Determine if the ktime_get_raw_ts64() function is present.
++            #
++            CODE="
++            #include <linux/ktime.h>
++            int conftest_ktime_get_raw_ts64(void) {
++                struct timespec64 ts = {0};
++
++                ktime_get_raw_ts64(&ts64);
++            }"
++
++            compile_check_conftest "$CODE" "NV_KTIME_GET_RAW_TS64_PRESENT" "" "functions"
++        ;;
++
++        ktime_get_real_ts64)
++            #
++            # Determine if the ktime_get_real_ts64() function is present.
++            #
++            CODE="
++            #include <linux/ktime.h>
++            int conftest_ktime_get_raw_ts64(void) {
++                struct timespec64 ts = {0};
++
++                ktime_get_real_ts64(&ts64);
++            }"
++
++            compile_check_conftest "$CODE" "NV_KTIME_GET_REAL_TS64_PRESENT" "" "functions"
++        ;;
++
+         sg_alloc_table)
+             #
+             # sg_alloc_table_from_pages added by commit efc42bc98058
+diff --git a/kernel/nvidia-modeset/nvidia-modeset-linux.c b/kernel/nvidia-modeset/nvidia-modeset-linux.c
+index 0ca2c7d..8902143 100644
+--- a/kernel/nvidia-modeset/nvidia-modeset-linux.c
++++ b/kernel/nvidia-modeset/nvidia-modeset-linux.c
+@@ -266,7 +266,7 @@ void NVKMS_API_CALL nvkms_usleep(NvU64 usec)
+ 
+ NvU64 NVKMS_API_CALL nvkms_get_usec(void)
+ {
+-    struct timeval tv;
++    struct nv_timeval tv;
+ 
+     nv_gettimeofday(&tv);
+ 
+diff --git a/kernel/nvidia-uvm/uvm_linux.h b/kernel/nvidia-uvm/uvm_linux.h
+index 30a9dea..1a20eff 100644
+--- a/kernel/nvidia-uvm/uvm_linux.h
++++ b/kernel/nvidia-uvm/uvm_linux.h
+@@ -301,7 +301,16 @@ static inline uint64_t NV_DIV64(uint64_t dividend, uint64_t divisor, uint64_t *r
+ }
+ #endif
+ 
+-#if defined(CLOCK_MONOTONIC_RAW)
++#if defined(NV_KTIME_GET_RAW_TS64_PRESENT)
++static inline NvU64 NV_GETTIME(void)
++{
++    struct timespec64 ts;
++
++    ktime_get_raw_ts64(&ts);
++
++    return (ts.tv_sec * 1000000000ULL + ts.tv_nsec);
++}
++#elif defined(CLOCK_MONOTONIC_RAW)
+ /* Return a nanosecond-precise value */
+ static inline NvU64 NV_GETTIME(void)
+ {
+@@ -317,7 +326,7 @@ static inline NvU64 NV_GETTIME(void)
+  * available non-GPL symbols. */
+ static inline NvU64 NV_GETTIME(void)
+ {
+-    struct timeval tv = {0};
++    struct nv_timeval tv = {0};
+ 
+     nv_gettimeofday(&tv);
+ 
+diff --git a/kernel/nvidia/linux_nvswitch.c b/kernel/nvidia/linux_nvswitch.c
+index 1d2c1bc..0a0b4e8 100644
+--- a/kernel/nvidia/linux_nvswitch.c
++++ b/kernel/nvidia/linux_nvswitch.c
+@@ -1578,10 +1578,17 @@ nvswitch_os_get_platform_time
+     void
+ )
+ {
++#if defined(NV_KTIME_GET_REAL_TS64_PRESENT)
++    struct timespec64 ts64;
++
++    ktime_get_real_ts64(&ts64);
++    return ((NvU64)(ts64.tv_sec * NSEC_PER_SEC) + ts64.tv_nsec);
++#else
+     struct timespec ts;
+ 
+     getnstimeofday(&ts);
+     return ((NvU64) timespec_to_ns(&ts));
++#endif
+ }
+ 
+ void
+diff --git a/kernel/nvidia/nv-procfs.c b/kernel/nvidia/nv-procfs.c
+index 064d727..a7308d3 100644
+--- a/kernel/nvidia/nv-procfs.c
++++ b/kernel/nvidia/nv-procfs.c
+@@ -452,6 +452,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,
+@@ -460,6 +469,7 @@ static struct file_operations nv_procfs_registry_fops = {
+     .llseek  = seq_lseek,
+     .release = nv_procfs_close_registry,
+ };
++#endif
+ 
+ #if defined(CONFIG_PM)
+ static int
+@@ -531,6 +541,15 @@ nv_procfs_open_suspend_depth(
+     return single_open(file, nv_procfs_show_suspend_depth, NULL);
+ }
+ 
++#if defined(NV_HAVE_PROC_OPS)
++static struct proc_ops nv_procfs_suspend_depth_fops = {
++    .proc_open    = nv_procfs_open_suspend_depth,
++    .proc_read    = seq_read,
++    .proc_write   = nv_procfs_write_suspend_depth,
++    .proc_lseek   = seq_lseek,
++    .proc_release = single_release
++};
++#else
+ static struct file_operations nv_procfs_suspend_depth_fops = {
+     .owner   = THIS_MODULE,
+     .open    = nv_procfs_open_suspend_depth,
+@@ -539,6 +558,7 @@ static struct file_operations nv_procfs_suspend_depth_fops = {
+     .llseek  = seq_lseek,
+     .release = single_release
+ };
++#endif
+ 
+ static int
+ nv_procfs_show_suspend(
+@@ -613,6 +633,15 @@ nv_procfs_open_suspend(
+     return single_open(file, nv_procfs_show_suspend, NULL);
+ }
+ 
++#if defined(NV_HAVE_PROC_OPS)
++static struct proc_ops nv_procfs_suspend_fops = {
++    .proc_open    = nv_procfs_open_suspend,
++    .proc_read    = seq_read,
++    .proc_write   = nv_procfs_write_suspend,
++    .proc_lseek   = seq_lseek,
++    .proc_release = single_release
++};
++#else
+ static struct file_operations nv_procfs_suspend_fops = {
+     .owner   = THIS_MODULE,
+     .open    = nv_procfs_open_suspend,
+@@ -622,6 +651,7 @@ static struct file_operations nv_procfs_suspend_fops = {
+     .release = single_release
+ };
+ #endif
++#endif
+ 
+ /*
+  * Forwards error to nv_log_error which exposes data to vendor callback
+@@ -724,12 +754,20 @@ done:
+     return status;
+ }
+ 
++#if defined(NV_HAVE_PROC_OPS)
++static struct proc_ops nv_procfs_exercise_error_forwarding_fops = {
++    .proc_open    = nv_procfs_open_exercise_error_forwarding,
++    .proc_write   = nv_procfs_write_file,
++    .proc_release = nv_procfs_close_exercise_error_forwarding,
++};
++#else
+ static struct file_operations nv_procfs_exercise_error_forwarding_fops = {
+     .owner   = THIS_MODULE,
+     .open    = nv_procfs_open_exercise_error_forwarding,
+     .write   = nv_procfs_write_file,
+     .release = nv_procfs_close_exercise_error_forwarding,
+ };
++#endif
+ 
+ static int
+ nv_procfs_read_unbind_lock(
+@@ -851,6 +889,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,
+@@ -859,6 +906,7 @@ static struct file_operations nv_procfs_unbind_lock_fops = {
+     .llseek  = seq_lseek,
+     .release = nv_procfs_close_unbind_lock,
+ };
++#endif
+ 
+ static const char*
+ numa_status_describe(nv_numa_status_t state)
+@@ -1187,6 +1235,22 @@ done:
+     return retval;
+ }
+ 
++#if defined(NV_HAVE_PROC_OPS)
++static const struct proc_ops nv_procfs_numa_status_fops = {
++    .proc_open    = nv_procfs_open_numa_status,
++    .proc_read    = seq_read,
++    .proc_write   = nv_procfs_write_file,
++    .proc_lseek   = seq_lseek,
++    .proc_release = nv_procfs_close_numa_status,
++};
++
++static const struct proc_ops nv_procfs_offline_pages_fops = {
++    .proc_open    = nv_procfs_open_offline_pages,
++    .proc_read    = seq_read,
++    .proc_lseek   = seq_lseek,
++    .proc_release = nv_procfs_close_offline_pages,
++};
++#else
+ static const struct file_operations nv_procfs_numa_status_fops = {
+     .owner   = THIS_MODULE,
+     .open    = nv_procfs_open_numa_status,
+@@ -1203,6 +1267,7 @@ static const struct file_operations nv_procfs_offline_pages_fops = {
+     .llseek  = seq_lseek,
+     .release = nv_procfs_close_offline_pages,
+ };
++#endif
+ 
+ static int
+ nv_procfs_read_text_file(
+diff --git a/kernel/nvidia/nvidia.Kbuild b/kernel/nvidia/nvidia.Kbuild
+index 5ec3e65..339a757 100644
+--- a/kernel/nvidia/nvidia.Kbuild
++++ b/kernel/nvidia/nvidia.Kbuild
+@@ -150,6 +150,9 @@ NV_CONFTEST_SYMBOL_COMPILE_TESTS += is_export_symbol_present_swiotlb_dma_ops
+ NV_CONFTEST_TYPE_COMPILE_TESTS += acpi_op_remove
+ NV_CONFTEST_TYPE_COMPILE_TESTS += outer_flush_all
+ NV_CONFTEST_TYPE_COMPILE_TESTS += file_operations
++NV_CONFTEST_TYPE_COMPILE_TESTS += proc_ops
++NV_CONFTEST_TYPE_COMPILE_TESTS += ktime_get_raw_ts64
++NV_CONFTEST_TYPE_COMPILE_TESTS += ktime_get_real_ts64
+ NV_CONFTEST_TYPE_COMPILE_TESTS += file_inode
+ NV_CONFTEST_TYPE_COMPILE_TESTS += kuid_t
+ NV_CONFTEST_TYPE_COMPILE_TESTS += dma_ops
+diff --git a/kernel/nvidia/nvlink_linux.c b/kernel/nvidia/nvlink_linux.c
+index c84b36a..54fe244 100644
+--- a/kernel/nvidia/nvlink_linux.c
++++ b/kernel/nvidia/nvlink_linux.c
+@@ -513,8 +513,8 @@ int NVLINK_API_CALL nvlink_memcmp(const void *s1, const void *s2, NvLength size)
+ 
+ static NvBool nv_timer_less_than
+ (
+-    const struct timeval *a,
+-    const struct timeval *b
++    const struct nv_timeval *a,
++    const struct nv_timeval *b
+ )
+ {
+     return (a->tv_sec == b->tv_sec) ? (a->tv_usec < b->tv_usec) 
+@@ -523,9 +523,9 @@ static NvBool nv_timer_less_than
+ 
+ static void nv_timeradd
+ (
+-    const struct timeval    *a,
+-    const struct timeval    *b,
+-    struct timeval          *result
++    const struct nv_timeval    *a,
++    const struct nv_timeval    *b,
++    struct nv_timeval          *result
+ )
+ {
+     result->tv_sec = a->tv_sec + b->tv_sec;
+@@ -539,9 +539,9 @@ static void nv_timeradd
+ 
+ static void nv_timersub
+ (
+-    const struct timeval    *a,
+-    const struct timeval    *b,
+-    struct timeval          *result
++    const struct nv_timeval    *a,
++    const struct nv_timeval    *b,
++    struct nv_timeval          *result
+ )
+ {
+     result->tv_sec = a->tv_sec - b->tv_sec;
+@@ -561,7 +561,7 @@ void NVLINK_API_CALL nvlink_sleep(unsigned int ms)
+     unsigned long us;
+     unsigned long jiffies;
+     unsigned long mdelay_safe_msec;
+-    struct timeval tm_end, tm_aux;
++    struct nv_timeval tm_end, tm_aux;
+ 
+     nv_gettimeofday(&tm_aux);
+ 
+diff --git a/kernel/nvidia/os-interface.c b/kernel/nvidia/os-interface.c
+index 07f1b77..239be58 100644
+--- a/kernel/nvidia/os-interface.c
++++ b/kernel/nvidia/os-interface.c
+@@ -463,7 +463,7 @@ NV_STATUS NV_API_CALL os_get_current_time(
+     NvU32 *useconds
+ )
+ {
+-    struct timeval tm;
++    struct nv_timeval tm;
+ 
+     nv_gettimeofday(&tm);
+ 
+@@ -477,9 +477,15 @@ NV_STATUS NV_API_CALL os_get_current_time(
+ 
+ void NV_API_CALL os_get_current_tick(NvU64 *nseconds)
+ {
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 5, 0)
++    struct timespec64 ts;
++
++    jiffies_to_timespec64(jiffies, &ts);
++#else
+     struct timespec ts;
+ 
+     jiffies_to_timespec(jiffies, &ts);
++#endif
+ 
+     *nseconds = ((NvU64)ts.tv_sec * NSEC_PER_SEC + (NvU64)ts.tv_nsec);
+ }
+@@ -549,7 +555,7 @@ NV_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
+@@ -589,9 +595,9 @@ NV_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);
+@@ -1954,7 +1960,7 @@ static NV_STATUS NV_API_CALL _os_ipmi_receive_resp
+ {
+     struct ipmi_recv_msg    *rx_msg;
+     int                     err_no;
+-    struct timeval          tv;
++    struct nv_timeval          tv;
+     NvU64                   start_time;
+ 
+     nv_gettimeofday(&tv);
+
diff --git a/srcpkgs/nvidia-vulkan/files/nvidia-drm-outputclass.conf b/srcpkgs/nvidia-vulkan/files/nvidia-drm-outputclass.conf
new file mode 100644
index 00000000000..65e3fd38622
--- /dev/null
+++ b/srcpkgs/nvidia-vulkan/files/nvidia-drm-outputclass.conf
@@ -0,0 +1,18 @@
+Section "ServerLayout"
+  Identifier "layout"
+  Option "AllowNVIDIAGPUScreens"
+EndSection
+
+Section "OutputClass"
+    Identifier "intel"
+    MatchDriver "i915"
+    Driver "modesetting"
+EndSection
+
+Section "OutputClass"
+    Identifier "nvidia"
+    MatchDriver "nvidia-drm"
+    Driver "nvidia"
+    Option "AllowEmptyInitialConfiguration"
+    ModulePath "/usr/lib/nvidia/xorg"
+EndSection
diff --git a/srcpkgs/nvidia-vulkan/nvidia-dkms-vulkan.INSTALL b/srcpkgs/nvidia-vulkan/nvidia-dkms-vulkan.INSTALL
new file mode 100644
index 00000000000..943fc6e77f0
--- /dev/null
+++ b/srcpkgs/nvidia-vulkan/nvidia-dkms-vulkan.INSTALL
@@ -0,0 +1,13 @@
+case "${ACTION}" in
+post)
+	if [ "${ARCH}" = "x86_64" ]; then
+		# Regenerate initramfs.
+		echo "Regenerating initramfs, please wait..."
+		dracut -f -q --regenerate-all
+	else
+		echo "Nvidia has dropped support for 32-bit kernels.\n"
+		echo "Please consider installing the nvidia390 package as an alternative.\n"
+		echo "This package is now only useful if you're using a x86_64 kernel.\n"
+	fi
+	;;
+esac
diff --git a/srcpkgs/nvidia-vulkan/nvidia-dkms-vulkan.REMOVE b/srcpkgs/nvidia-vulkan/nvidia-dkms-vulkan.REMOVE
new file mode 100644
index 00000000000..c10a4035d6a
--- /dev/null
+++ b/srcpkgs/nvidia-vulkan/nvidia-dkms-vulkan.REMOVE
@@ -0,0 +1,9 @@
+# Regenerate initramfs.
+case ${ACTION} in
+purge)
+	if [ "${ARCH}" = "x86_64" ]; then
+		echo "Regenerating initramfs, please wait..."
+		dracut -f -q --regenerate-all
+	fi
+	;;
+esac
diff --git a/srcpkgs/nvidia-vulkan/template b/srcpkgs/nvidia-vulkan/template
new file mode 100644
index 00000000000..68e80756a28
--- /dev/null
+++ b/srcpkgs/nvidia-vulkan/template
@@ -0,0 +1,275 @@
+# Template file for 'nvidia-vulkan'
+
+_desc="NVIDIA drivers for linux (Vulkan developer branch)"
+
+pkgname=nvidia-vulkan
+version=440.66.08
+revision=1
+maintainer="Hyper-KVM <hyperkvmx86@gmail.com>"
+license="custom:NVIDIA Proprietary"
+homepage="https://www.nvidia.com"
+
+archs="x86_64"
+nopie=yes
+create_wrksrc=yes
+short_desc="${_desc} - Libraries and Utilities"
+hostmakedepends="tar"
+conflicts="xserver-abi-video>24_1 nvidia nvidia-libs nvidia-libs-32bit nvidia-opencl nvidia-dkms nvidia-gtklibs"
+
+_pkg="NVIDIA-Linux-x86_64-${version}"
+distfiles="https://developer.nvidia.com/vulkan-beta-${version//.}-linux>${_pkg}.run"
+checksum=af23e041f358a27f3fc531a9f4db591311cf8a074865b6992bb1763f29a1e478
+subpackages="nvidia-gtklibs-vulkan nvidia-dkms-vulkan nvidia-opencl-vulkan nvidia-libs-vulkan nvidia-libs-32bit-vulkan"
+depends="nvidia-libs-vulkan-${version}_${revision} nvidia-gtklibs-vulkan-${version}_${revision} nvidia-dkms-vulkan-${version}_${revision}"
+
+_install_libs() {
+	local libdir=$1
+
+	# GLX client libs
+	# Required for GLVND option
+	vinstall libGLX_nvidia.so.${version} 755 ${libdir}
+	ln -sf libGLX_nvidia.so.${version} ${DESTDIR}/${libdir}/libGLX_nvidia.so.0
+	ln -sf libGLX_nvidia.so.${version} ${DESTDIR}/${libdir}/libGLX_indirect.so.0
+
+	# OpenGL core library
+	vinstall libnvidia-glcore.so.${version} 755 ${libdir}
+	vinstall libnvidia-eglcore.so.${version} 755 ${libdir}
+	vinstall libnvidia-glsi.so.${version} 755 ${libdir}
+
+	# Vulkan core library
+	vinstall libnvidia-glvkspirv.so.${version} 755 ${libdir}
+
+	vinstall libEGL_nvidia.so.${version} 755 ${libdir}
+	ln -sf libEGL_nvidia.so.${version} ${DESTDIR}/${libdir}/libEGL_nvidia.so.0
+
+	vinstall libGLESv1_CM_nvidia.so.${version} 755 ${libdir}
+	ln -sf libGLESv1_CM_nvidia.so.${version} \
+		${DESTDIR}/${libdir}/libGLESv1_CM_nvidia.so.1
+
+	vinstall libGLESv2_nvidia.so.${version} 755 ${libdir}
+	ln -sf libGLESv2_nvidia.so.${version} ${DESTDIR}/${libdir}/libGLESv2_nvidia.so.2
+
+	# Thread Local Storage
+	vinstall libnvidia-tls.so.${version} 755 ${libdir}
+
+	# VDPAU
+	vinstall libvdpau_nvidia.so.${version} 755 ${libdir}/vdpau
+	ln -sf libvdpau_nvidia.so.${version} \
+		${DESTDIR}/${libdir}/vdpau/libvdpau_nvidia.so.1
+
+	vinstall libnvidia-ml.so.${version} 755 ${libdir}
+	ln -sf libnvidia-ml.so.${version} ${DESTDIR}/${libdir}/libnvidia-ml.so
+	ln -sf libnvidia-ml.so.${version} ${DESTDIR}/${libdir}/libnvidia-ml.so.1
+
+	vinstall libnvidia-encode.so.${version} 755 ${libdir}
+	ln -sf libnvidia-encode.so.${version} ${DESTDIR}/${libdir}/libnvidia-encode.so
+	ln -sf libnvidia-encode.so.${version} ${DESTDIR}/${libdir}/libnvidia-encode.so.1
+
+	vinstall libnvidia-ifr.so.${version} 755 ${libdir}
+	ln -sf libnvidia-ifr.so.${version} ${DESTDIR}/${libdir}/libnvidia-ifr.so
+	ln -sf libnvidia-ifr.so.${version} ${DESTDIR}/${libdir}/libnvidia-ifr.so.1
+
+	vinstall libnvidia-fbc.so.${version} 755 ${libdir}
+	ln -sf libnvidia-fbc.so.${version} ${DESTDIR}/${libdir}/libnvidia-fbc.so
+	ln -sf libnvidia-fbc.so.${version} ${DESTDIR}/${libdir}/libnvidia-fbc.so.1
+
+	vinstall libnvidia-fatbinaryloader.so.${version} 755 ${libdir}
+	ln -sf libnvidia-fatbinaryloader.so.${version} \
+		${DESTDIR}/${libdir}/libnvidia-fatbinaryloader.so.1
+	ln -sf libnvidia-fatbinaryloader.so.1 \
+		${DESTDIR}/${libdir}/libnvidia-fatbinaryloader.so
+
+	# CUDA
+	vinstall libcuda.so.${version} 755 ${libdir}
+	ln -sf libcuda.so.${version} ${DESTDIR}/${libdir}/libcuda.so
+	ln -sf libcuda.so.${version} ${DESTDIR}/${libdir}/libcuda.so.1
+
+	vinstall libnvcuvid.so.${version} 755 ${libdir}
+	ln -sf libnvcuvid.so.${version} ${DESTDIR}/${libdir}/libnvcuvid.so
+	ln -sf libnvcuvid.so.${version} ${DESTDIR}/${libdir}/libnvcuvid.so.1
+
+	vinstall libnvidia-opticalflow.so.${version} 755 ${libdir}
+	ln -sf libnvidia-opticalflow.so.${version} \
+		${DESTDIR}/${libdir}/libnvidia-opticalflow.so
+	ln -sf libnvidia-opticalflow.so.${version} \
+		${DESTDIR}/${libdir}/libnvidia-opticalflow.so.1
+
+	vinstall libnvidia-ptxjitcompiler.so.${version} 755 ${libdir}
+	ln -sf libnvidia-ptxjitcompiler.so.${version} \
+		${DESTDIR}/${libdir}/libnvidia-ptxjitcompiler.so.1
+	ln -sf libnvidia-ptxjitcompiler.so.1 \
+		${DESTDIR}/${libdir}/libnvidia-ptxjitcompiler.so
+
+	# helper libs for approved partners' GRID remote apps
+	vinstall libnvidia-ifr.so.${version} 755 usr/lib
+	vinstall libnvidia-fbc.so.${version} 755 usr/lib
+}
+
+do_extract() {
+	install -m755 ${XBPS_SRCDISTDIR}/${pkgname}-${version}/${_pkg}.run ${wrksrc}
+	cd ${wrksrc}
+	./${_pkg}.run --extract-only
+	rm -f ${_pkg}.run
+}
+
+do_patch() {
+	cd ${_pkg}
+	patch -p1 < ${FILESDIR}/linux5.6.patch
+}
+
+do_install() {
+	cd ${_pkg}
+
+	# X driver
+	vinstall nvidia_drv.so 755 usr/lib/xorg/modules/drivers
+
+	# GLX extension module for X
+	vinstall libglxserver_nvidia.so.${version} 755 usr/lib/nvidia/xorg
+	ln -sf libglxserver_nvidia.so.${version} \
+		${DESTDIR}/usr/lib/nvidia/xorg/libglxserver_nvidia.so
+	ln -sf libglxserver_nvidia.so.${version} \
+		${DESTDIR}/usr/lib/nvidia/xorg/libglxserver_nvidia.so.1
+
+	vinstall libnvidia-egl-wayland.so.1.1.4 755 usr/lib
+	ln -sf libnvidia-egl-wayland.so.1.1.4 \
+		${DESTDIR}/usr/lib/libnvidia-egl-wayland.so.1
+
+	vinstall 10_nvidia.json 755 usr/share/glvnd/egl_vendor.d
+	vinstall 10_nvidia_wayland.json \
+		755 usr/share/egl/egl_external_platform.d
+
+	vinstall libnvidia-cfg.so.${version} 755 usr/lib
+	ln -sf libnvidia-cfg.so.${version} ${DESTDIR}/usr/lib/libnvidia-cfg.so
+	ln -sf libnvidia-cfg.so.${version} ${DESTDIR}/usr/lib/libnvidia-cfg.so.1
+
+	vbin nvidia-cuda-mps-control
+	vbin nvidia-cuda-mps-server
+	gzip -d nvidia-cuda-mps-control.1.gz
+	vman nvidia-cuda-mps-control.1
+
+	# nvidia-xconfig
+	vbin nvidia-xconfig
+	gzip -d nvidia-xconfig.1.gz
+	vman nvidia-xconfig.1
+
+	# nvidia-settings
+	vbin nvidia-settings
+	gzip -d nvidia-settings.1.gz
+	vman nvidia-settings.1
+	vinstall nvidia-settings.desktop 644 usr/share/applications
+	vinstall nvidia-settings.png 644 usr/share/pixmaps
+	sed -e 's:__UTILS_PATH__:/usr/bin:' \
+		-e 's:__PIXMAP_PATH__:/usr/share/pixmaps:' \
+		-i ${DESTDIR}/usr/share/applications/nvidia-settings.desktop
+
+	vinstall libnvidia-gtk3.so.${version} 755 usr/lib
+	vinstall libnvidia-gtk2.so.${version} 755 usr/lib
+
+	# application profiles (needed by nvidia-settings)
+	vinstall nvidia-application-profiles-${version}-key-documentation \
+		644 usr/share/nvidia
+	vinstall nvidia-application-profiles-${version}-rc 644 usr/share/nvidia
+
+	# nvidia-bug-report
+	vbin nvidia-bug-report.sh nvidia-bug-report
+	vbin nvidia-debugdump
+
+	# nvidia-smi
+	vbin nvidia-smi
+	gzip -d nvidia-smi.1.gz
+	vman nvidia-smi.1
+
+	# nvidia-modprobe
+	vinstall nvidia-modprobe 4755 usr/bin
+	gzip -d nvidia-modprobe.1.gz
+	vman nvidia-modprobe.1
+
+	# opencl pkg
+	vinstall nvidia.icd 644 etc/OpenCL/vendors
+
+	vinstall libnvidia-compiler.so.${version} 755 usr/lib
+
+	vinstall libnvidia-opencl.so.${version} 755 usr/lib
+	ln -sf libnvidia-opencl.so.${version} \
+		${DESTDIR}/usr/lib/libnvidia-opencl.so
+	ln -sf libnvidia-opencl.so.${version} \
+		${DESTDIR}/usr/lib/libnvidia-opencl.so.1
+
+	# vulkan icd
+	vinstall nvidia_icd.json 644 usr/share/vulkan/icd.d
+
+	# vulkan real-time ray tracing extensions
+	vinstall libnvidia-rtcore.so.${version} 755 usr/lib
+	vinstall libnvidia-cbl.so.${version} 755 usr/lib
+
+	# optix ray racing engine
+	vinstall libnvoptix.so.${version} 755 usr/lib
+
+	# dkms pkg
+	vmkdir usr/src/nvidia-${version}
+	vcopy "kernel/*" usr/src/nvidia-${version}
+	vcopy ${FILESDIR}/dkms.conf usr/src/nvidia-${version}
+	sed -e "s/__PKGVER/${version}/g" \
+		-e 's/__MAKEJOBS/-j$(nproc)/g' \
+		-i ${DESTDIR}/usr/src/nvidia-${version}/dkms.conf
+
+	vmkdir /usr/share/X11/xorg.conf.d/
+	vinstall ${FILESDIR}/nvidia-drm-outputclass.conf 644 \
+		/usr/share/X11/xorg.conf.d 10-nvidia-drm-outputclass.conf
+
+	# Blacklist nouveau
+	vmkdir usr/lib/modprobe.d
+	echo "blacklist nouveau" > ${DESTDIR}/usr/lib/modprobe.d/nvidia.conf
+	chmod 644 ${DESTDIR}/usr/lib/modprobe.d/nvidia.conf
+
+	# License and documentation
+	vlicense LICENSE
+	vdoc README.txt README
+	vdoc NVIDIA_Changelog
+
+	# Libraries (64bit)
+	_install_libs usr/lib
+	cd 32
+	# Libraries (32bit)
+	_install_libs usr/lib32
+}
+
+nvidia-gtklibs-vulkan_package() {
+	short_desc="${_desc} - GTK+ libraries"
+	pkg_install() {
+		vmove "usr/lib/lib*gtk*.so*"
+	}
+}
+nvidia-libs-32bit-vulkan_package() {
+	short_desc="${_desc} - common libraries (32bit)"
+	# manually set 32bit depends for libglvnd
+	depends="glibc-32bit>=0 libX11-32bit>=0 libXext-32bit>=0 libglvnd-32bit>=0"
+	pkg_install() {
+		vmove usr/lib32
+	}
+}
+nvidia-libs-vulkan_package() {
+	short_desc="${_desc} - common libraries"
+	depends="libglvnd"
+	pkg_install() {
+		vmove usr/lib
+	}
+}
+nvidia-dkms-vulkan_package() {
+	short_desc="${_desc} - DKMS kernel module"
+	dkms_modules="nvidia ${version}"
+	depends="dkms"
+	pkg_install() {
+		vmove usr/src
+		vmove usr/lib/modprobe.d
+	}
+}
+nvidia-opencl-vulkan_package() {
+	short_desc="${_desc} - OpenCL implementation"
+	depends="libOpenCL"
+	pkg_install() {
+		vmove "usr/lib/libnvidia-compiler*"
+		vmove "usr/lib/libnvidia-opencl*"
+		vmove etc/OpenCL
+	}
+}
diff --git a/srcpkgs/nvidia-vulkan/update b/srcpkgs/nvidia-vulkan/update
new file mode 100644
index 00000000000..d33b1d9a141
--- /dev/null
+++ b/srcpkgs/nvidia-vulkan/update
@@ -0,0 +1,2 @@
+site="http://www.nvidia.com/object/unix.html"
+pattern='Branch Version.+>\K[\d.]+(?=</A>)'

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: New package: nvidia-vulkan-440.66.08
  2020-04-03  0:57 [PR PATCH] New package: nvidia-vulkan-440.66.08 Hyper-KVM
  2020-04-03  3:31 ` [PR PATCH] [Updated] " Hyper-KVM
@ 2020-04-03  6:36 ` xtraeme
  2020-04-03  6:36 ` [PR PATCH] [Closed]: " xtraeme
  2 siblings, 0 replies; 4+ messages in thread
From: xtraeme @ 2020-04-03  6:36 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 164 bytes --]

New comment by xtraeme on void-packages repository

https://github.com/void-linux/void-packages/pull/20582#issuecomment-608257358

Comment:
This is beta software. 

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PR PATCH] [Closed]: New package: nvidia-vulkan-440.66.08
  2020-04-03  0:57 [PR PATCH] New package: nvidia-vulkan-440.66.08 Hyper-KVM
  2020-04-03  3:31 ` [PR PATCH] [Updated] " Hyper-KVM
  2020-04-03  6:36 ` xtraeme
@ 2020-04-03  6:36 ` xtraeme
  2 siblings, 0 replies; 4+ messages in thread
From: xtraeme @ 2020-04-03  6:36 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 278 bytes --]

There's a closed pull request on the void-packages repository

New package: nvidia-vulkan-440.66.08
https://github.com/void-linux/void-packages/pull/20582

Description:
The linux5.6 patch needs to be updated for linux5.6.2, but otherwise the drivers work fine on older kernels.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2020-04-03  6:36 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-03  0:57 [PR PATCH] New package: nvidia-vulkan-440.66.08 Hyper-KVM
2020-04-03  3:31 ` [PR PATCH] [Updated] " Hyper-KVM
2020-04-03  6:36 ` xtraeme
2020-04-03  6:36 ` [PR PATCH] [Closed]: " xtraeme

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).