diff --git a/kernel/drivers/module-nvidia-current/actions.py b/kernel/drivers/module-nvidia-current/actions.py old mode 100644 new mode 100755 index 7c38889227..1b38d32c3d --- a/kernel/drivers/module-nvidia-current/actions.py +++ b/kernel/drivers/module-nvidia-current/actions.py @@ -22,19 +22,21 @@ nvlibdir = "%s/%s" % (libdir, driver_dir_name) xorglibdir= "%s/xorg" % libdir def setup(): - shelltools.system("sh NVIDIA-Linux-%s-%s.run -x --target tmp" - % (arch, get.srcVERSION())) + shelltools.system("sh NVIDIA-Linux-x86_64-%s.run -x --target tmp" + % get.srcVERSION()) shelltools.move("tmp/*", ".") #shelltools.system("patch -p1 < NVIDIA-Linux-x86_64-390.87-kernel-4.19.patch") #shelltools.system("patch -p1 < NVIDIA-Linux-x86_64-390.87-kernel-4.20.patch") + #shelltools.system("patch -p1 < header-fix.patch") + # Our libc is TLS enabled so use TLS library #shelltools.unlink("*-tls.so*") #shelltools.move("tls/*", ".") # xorg-server provides libwfb.so - shelltools.unlink("libnvidia-wfb.so.*") + #shelltools.unlink("libnvidia-wfb.so.*") shelltools.echo("ld.so.conf", nvlibdir) shelltools.echo("XvMCConfig", "%s/libXvMCNVIDIA.so" % nvlibdir) @@ -46,11 +48,8 @@ def build(): shelltools.export("SYSSRC", "/lib/modules/%s/build" % KDIR) shelltools.cd("kernel") - - autotools.make("module") + autotools.make("module") - #shelltools.cd("uvm") - #autotools.make("module") def install(): @@ -58,6 +57,9 @@ def install(): # Kernel driver pisitools.insinto("/lib/modules/%s/extra" % KDIR, "kernel/nvidia.ko") + + pisitools.insinto("/lib/modules/%s/extra" % KDIR, + "kernel/nvidia-drm.ko") pisitools.insinto("/lib/modules/%s/extra" % KDIR, "kernel/nvidia-uvm.ko") @@ -84,89 +86,188 @@ def install(): ### Libraries - # OpenGl library - pisitools.dolib("libGL.so.%s" % version, nvlibdir) - pisitools.dosym("libGL.so.%s" % version, "%s/libGL.so.1.2.0" % nvlibdir) - pisitools.dolib("libGL.so.%s" % version, libdir) - pisitools.dolib("libEGL.so.1.1.0", nvlibdir) - pisitools.dosym("libEGL.so.1.1.0", "%s/libEGL.so.1" % nvlibdir) - pisitools.dolib("libEGL_nvidia.so.%s" % version, libdir) - pisitools.dolib("libGLESv1_CM_nvidia.so.%s" % version, libdir) - pisitools.dolib("libGLESv2_nvidia.so.%s" % version, libdir) - - # OpenCL - pisitools.insinto("/etc/OpenCL/vendors", "nvidia.icd") - pisitools.dolib("libnvidia-compiler.so.%s" % version, libdir) - pisitools.dosym("libnvidia-compiler.so.%s" % version, "%s/libnvidia-compiler.so.1" % libdir) + # 32-bit libraries + if get.buildTYPE() == 'emul32': + pisitools.dolib("32/libGL.so.1.7.0", nvlibdir) + pisitools.dosym("libGL.so.1.7.0", "%s/libGL.so.1.2.0" % nvlibdir) + pisitools.dosym("libGL.so.1.7.0", "%s/libGL.so.1" % nvlibdir) + pisitools.dosym("libGL.so.1.7.0", "%s/libGL.so" % nvlibdir) + + pisitools.dolib("32/libEGL.so.1.1.0", nvlibdir) + #pisitools.dosym("%s/libEGL.so.1.1.0" % nvlibdir, "%s/libEGL.so.1.1.0" % libdir) + #pisitools.dosym("%s/libEGL.so.1.1.0" % nvlibdir, "%s/libEGL.so.1.0.0" % nvlibdir) + #pisitools.dosym("%s/libEGL.so.1.1.0" % nvlibdir, "%s/libEGL.so.1" % nvlibdir) + #pisitools.dosym("%s/libEGL.so.1.1.0" % nvlibdir, "%s/libEGL.so" % nvlibdir) + + pisitools.dolib("32/libEGL_nvidia.so.%s" % version, libdir) + pisitools.dosym("libEGL_nvidia.so.%s" % version, "%s/libEGL_nvidia.so.1" %libdir) + pisitools.dosym("libEGL_nvidia.so.%s" % version, "%s/libEGL_nvidia.so" %libdir) + + pisitools.dolib("32/libGLESv1_CM_nvidia.so.%s" % version, libdir) + pisitools.dolib("32/libGLESv2_nvidia.so.%s" % version, libdir) + + pisitools.dolib("32/libnvidia-compiler.so.%s" % version, libdir) + pisitools.dosym("libnvidia-compiler.so.%s" % version, "%s/libnvidia-compiler.so.1" % libdir) + pisitools.dosym("libnvidia-compiler.so.%s" % version, "%s/libnvidia-compiler.so" % libdir) + + #pisitools.dolib("32/libOpenCL.so.1.0.0", libdir) + #pisitools.dosym("libOpenCL.so.1.0", "%s/libOpenCL.so.1" % libdir) + #pisitools.dosym("libOpenCL.so.1.0", "%s/libOpenCL.so" % libdir) + + pisitools.dolib("32/libnvidia-opencl.so.%s" % version, libdir) + pisitools.dosym("libnvidia-opencl.so.%s" % version, "%s/libnvidia-opencl.so.1" % libdir) + pisitools.dosym("libnvidia-opencl.so.1", "%s/libnvidia-opencl.so" % libdir) + + pisitools.dolib("32/libcuda.so.%s" % version, libdir) + pisitools.dosym("libcuda.so.%s" % version, "%s/libcuda.so.1" % libdir) + pisitools.dosym("libcuda.so.1", "%s/libcuda.so" % libdir) + + pisitools.dolib("32/libnvcuvid.so.%s" % version, libdir) + pisitools.dosym("libnvcuvid.so.%s" % version, "%s/libnvcuvid.so.1" % libdir) + pisitools.dosym("libnvcuvid.so.1", "%s/libnvcuvid.so" % libdir) + + pisitools.dolib("32/libnvidia-ml.so.%s" % version, libdir) + pisitools.dosym("libnvidia-ml.so.%s" % version, "%s/libnvidia-ml.so.1" % libdir) + + for lib in ("eglcore", "encode", "fatbinaryloader", "fbc", "glcore", "glsi", \ + "glvkspirv", "ifr", "opticalflow", "ptxjitcompiler", "tls", "allocator" ): + pisitools.dolib("32/libnvidia-%s.so.%s" % (lib, version), libdir) + pisitools.dosym("libnvidia-%s.so.%s" % (lib, version), "%s/libnvidia-%s.so.1" %(libdir, lib)) + pisitools.dosym("libnvidia-%s.so.%s" % (lib, version), "%s/libnvidia-%s.so" %(libdir, lib)) + + pisitools.dolib("32/libvdpau_nvidia.so.%s" % version, "%s/vdpau" % libdir) + pisitools.dosym("libvdpau_nvidia.so.%s" % version, "%s/libvdpau_nvidia.so" % libdir) + - pisitools.dolib("libOpenCL.so.1.0.0", libdir) - pisitools.dosym("libOpenCL.so.1.0.0", "%s/libOpenCL.so.1.0" % libdir) - pisitools.dosym("libOpenCL.so.1.0", "%s/libOpenCL.so.1" % libdir) - - pisitools.dolib("libnvidia-opencl.so.%s" % version, libdir) - pisitools.dosym("libnvidia-opencl.so.%s" % version, "%s/libnvidia-opencl.so.1" % libdir) - pisitools.dosym("libnvidia-opencl.so.1", "%s/libnvidia-opencl.so" % libdir) - + pisitools.dolib("32/libGLX_nvidia.so.%s" % version, libdir) + pisitools.dosym("libGLX_nvidia.so.%s" % version, "%s/libGLX_indirect.so.0" % libdir) + pisitools.dosym("libGLX_nvidia.so.%s" % version, "%s/libGLX_indirect.so" % libdir) + pisitools.dosym("libGLX_nvidia.so.%s" % version, "%s/libGLX_nvidia.so.0" % libdir) + pisitools.dosym("libGLX_nvidia.so.%s" % version, "%s/libGLX_nvidia.so" % libdir) + + pisitools.dolib("32/libGLdispatch.so.0", libdir) + pisitools.dosym("libGLdispatch.so.0", "%s/ibGLdispatch.so" % libdir) + + pisitools.dolib("32/libGLX.so.0", libdir) + pisitools.dosym("libGLX.so.0", "%s/libGLX.so" % libdir) + + pisitools.dolib("32/libOpenGL.so.0", libdir) + pisitools.dosym("libOpenGL.so.0", "%s/libOpenGL.so" % libdir) + + else: + # OpenGl library + pisitools.dolib("libGL.so.1.7.0", nvlibdir) + pisitools.dosym("libGL.so.1.7.0", "%s/libGL.so.1.2.0" % nvlibdir) + pisitools.dosym("libGL.so.1.7.0", "%s/libGL.so.1" % nvlibdir) + pisitools.dosym("libGL.so.1.7.0", "%s/libGL.so" % nvlibdir) + + pisitools.dolib("libEGL.so.1.1.0", nvlibdir) + #pisitools.dosym("%s/libEGL.so.1.1.0" % nvlibdir, "%s/libEGL.so.1.1.0" % libdir) + #pisitools.dosym("%s/libEGL.so.1.1.0" % nvlibdir, "%s/libEGL.so.1.0.0" % nvlibdir) + #pisitools.dosym("%s/libEGL.so.1.1.0" % nvlibdir, "%s/libEGL.so.1" % nvlibdir) + #pisitools.dosym("%s/libEGL.so.1.1.0" % nvlibdir, "%s/libEGL.so" % nvlibdir) + pisitools.dolib("libEGL_nvidia.so.%s" % version, libdir) + pisitools.dolib("libEGL.so.%s" % version, libdir) + + pisitools.dolib("libGLESv1_CM_nvidia.so.%s" % version, libdir) + pisitools.dolib("libGLESv2_nvidia.so.%s" % version, libdir) + + pisitools.dolib("libGLdispatch.so.0", libdir) + pisitools.dosym("libGLdispatch.so.0", "%s/libGLdispatch.so" % libdir) + + pisitools.dolib("libGLX.so.0", libdir) + pisitools.dosym("libGLX.so.0", "%s/libGLX.so" % libdir) + + pisitools.dolib("libOpenGL.so.0", libdir) + pisitools.dosym("libOpenGL.so.0", "%s/libOpenGL.so" % libdir) + + # OpenCL + pisitools.insinto("/etc/OpenCL/vendors", "nvidia.icd") + pisitools.dolib("libnvidia-compiler.so.%s" % version, libdir) + pisitools.dosym("libnvidia-compiler.so.%s" % version, "%s/libnvidia-compiler.so.1" % libdir) + pisitools.dosym("libnvidia-compiler.so.%s" % version, "%s/libnvidia-compiler.so" % libdir) + + #pisitools.dolib("libOpenCL.so.1.0.0", libdir) + #pisitools.dosym("libOpenCL.so.1.0.0", "%s/libOpenCL.so.1.0" % libdir) + #pisitools.dosym("libOpenCL.so.1.0", "%s/libOpenCL.so.1" % libdir) + #pisitools.dosym("libOpenCL.so.1.0", "%s/libOpenCL.so" % libdir) + + pisitools.dolib("libnvidia-opencl.so.%s" % version, libdir) + pisitools.dosym("libnvidia-opencl.so.%s" % version, "%s/libnvidia-opencl.so.1" % libdir) + pisitools.dosym("libnvidia-opencl.so.1", "%s/libnvidia-opencl.so" % libdir) + # CUDA - pisitools.dolib("libcuda.so.%s" % version, libdir) - pisitools.dosym("libcuda.so.%s" % version, "%s/libcuda.so.1" % libdir) - pisitools.dosym("libcuda.so.1", "%s/libcuda.so" % libdir) - - pisitools.dolib("libnvcuvid.so.%s" % version, libdir) - pisitools.dosym("libnvcuvid.so.%s" % version, "%s/libnvcuvid.so.1" % libdir) - pisitools.dosym("libnvcuvid.so.1", "%s/libnvcuvid.so" % libdir) - - # NVML - # Provides programmatic access to static information and monitoring - # data for NVIDIA GPUs, as well as limited managment capabilities - pisitools.dolib("libnvidia-ml.so.%s" % version, libdir) - pisitools.dosym("libnvidia-ml.so.%s" % version, "%s/libnvidia-ml.so.1" % libdir) - - pisitools.dolib("libnvidia-cfg.so.%s" % version, libdir) - pisitools.dosym("libnvidia-cfg.so.%s" % version, "%s/libnvidia-cfg.so.1" % libdir) - + pisitools.dolib("libcuda.so.%s" % version, libdir) + pisitools.dosym("libcuda.so.%s" % version, "%s/libcuda.so.1" % libdir) + pisitools.dosym("libcuda.so.1", "%s/libcuda.so" % libdir) + + pisitools.dolib("libnvcuvid.so.%s" % version, libdir) + pisitools.dosym("libnvcuvid.so.%s" % version, "%s/libnvcuvid.so.1" % libdir) + pisitools.dosym("libnvcuvid.so.1", "%s/libnvcuvid.so" % libdir) + + # NVML + # Provides programmatic access to static information and monitoring + # data for NVIDIA GPUs, as well as limited managment capabilities + pisitools.dolib("libnvidia-ml.so.%s" % version, libdir) + pisitools.dosym("libnvidia-ml.so.%s" % version, "%s/libnvidia-ml.so.1" % libdir) + + pisitools.dolib("libnvidia-cfg.so.%s" % version, libdir) + pisitools.dosym("libnvidia-cfg.so.%s" % version, "%s/libnvidia-cfg.so.1" % libdir) + + pisitools.dolib("libnvoptix.so.%s" % version, libdir) + pisitools.dosym("libnvoptix.so.%s" % version, "%s/libnvoptix.so.1" % libdir) + pisitools.dosym("libnvoptix.so.%s" % version, "%s/libnvoptix.so" % libdir) + pisitools.dolib("libnvidia-egl-wayland.so.1.1.4", libdir) + pisitools.dosym("libnvidia-egl-wayland.so.1.1.4", "%s/libnvidia-egl-wayland.so.1" % libdir) + pisitools.dosym("libnvidia-egl-wayland.so.1.1.4", "%s/libnvidia-egl-wayland.so" % libdir) + + # OpenGL core library and others + for lib in ("allocator", "cbl", "eglcore", "encode", "fatbinaryloader", "fbc", "glcore", "glsi", \ + "glvkspirv", "ifr", "opticalflow", "ptxjitcompiler", "rtcore", "tls" ): + pisitools.dolib("libnvidia-%s.so.%s" % (lib, version), libdir) + pisitools.dosym("libnvidia-%s.so.%s" % (lib, version), "%s/libnvidia-%s.so.1" %(libdir, lib)) + pisitools.dosym("libnvidia-%s.so.%s" % (lib, version), "%s/libnvidia-%s.so" %(libdir, lib)) - # OpenGL core library and others - for lib in ("glcore", "tls", "encode", "fbc", "glsi", "ifr", "eglcore"): - pisitools.dolib("libnvidia-%s.so.%s" % (lib, version), libdir) - pisitools.dosym("libnvidia-%s.so.%s" % (lib, version), "%s/libnvidia-%s.so.1" %(libdir, lib)) + # VDPAU driver + pisitools.dolib("libvdpau_nvidia.so.%s" % version, "%s/vdpau" % libdir) + pisitools.dosym("libvdpau_nvidia.so.%s" % version, "%s/libvdpau_nvidia.so" % libdir) - # VDPAU driver - pisitools.dolib("libvdpau_nvidia.so.%s" % version, "%s/vdpau" % libdir) - pisitools.dosym("libvdpau_nvidia.so.%s" % version, "%s/libvdpau_nvidia.so" % libdir) - - # nvidia-tls library - pisitools.dolib("libnvidia-tls.so.%s" % version, libdir) - pisitools.dolib("tls/libnvidia-tls.so.%s" % version, "%s/tls" % libdir) - - # X modules - pisitools.dolib("nvidia_drv.so", "%s/modules/drivers" % xorglibdir) - pisitools.dolib("libglx.so.%s" % version, "%s/modules/extensions" % xorglibdir) - pisitools.dosym("libglx.so.%s" % version, "%s/modules/extensions/libglx.so.1" % xorglibdir) - - pisitools.dolib("libGLX_nvidia.so.%s" % version, libdir) - pisitools.dosym("libGLX_nvidia.so.%s" % version, "%s/libGLX_indirect.so.0" % libdir) - - # PTX JIT Compiler (Parallel Thread Execution (PTX) is a pseudo-assembly language for CUDA) - pisitools.dolib("libnvidia-ptxjitcompiler.so.%s" % version, libdir) - - # Fat (multiarchitecture) binary loader - pisitools.dolib("libnvidia-fatbinaryloader.so.%s" % version, libdir) - - pisitools.insinto("/usr/share/X11/xorg.conf.d", "nvidia-drm-outputclass.conf") - # pisitools.insinto("/usr/share/nvidia", "nvidia-application-profiles-367.27-rc") + # X modules + pisitools.dolib("nvidia_drv.so", "%s/modules/drivers" % xorglibdir) + pisitools.dolib("libglxserver_nvidia.so.%s" % version, "%s/xorg/extensions" % nvlibdir) + pisitools.dosym("libglxserver_nvidia.so.%s" % version, "%s/xorg/extensions/libglx.so.1" % nvlibdir) + pisitools.dosym("libglxserver_nvidia.so.%s" % version, "%s/xorg/extensions/libglx.so" % nvlibdir) + pisitools.dolib("libglxserver_nvidia.so.%s" % version, "%s/modules/extensions" % xorglibdir) + pisitools.dosym("libglxserver_nvidia.so.%s" % version, "%s/modules/extensions/libglx.so.1" % xorglibdir) + + # Vulkan driver + pisitools.dolib("libGLX_nvidia.so.%s" % version, libdir) + pisitools.dosym("libGLX_nvidia.so.%s" % version, "%s/libGLX_indirect.so.0" % libdir) + pisitools.dosym("libGLX_nvidia.so.%s" % version, "%s/libGLX_indirect.so" % libdir) + pisitools.dosym("libGLX_nvidia.so.%s" % version, "%s/libGLX_nvidia.so.0" % libdir) + pisitools.dosym("libGLX_nvidia.so.%s" % version, "%s/libGLX_nvidia.so" % libdir) + pisitools.insinto("/etc/vulkan/icd.d", "nvidia_icd.json") + pisitools.insinto("/etc/vulkan/icd.d", "nvidia_layers.json") + + pisitools.insinto("/usr/share/glvnd/egl_vendor.d", "10_nvidia.json") + + #pisitools.insinto("/usr/share/X11/xorg.conf.d", "nvidia-drm-outputclass.conf") + # pisitools.insinto("/usr/share/nvidia", "nvidia-application-profiles-367.27-rc") # pisitools.insinto("/usr/share/nvidia", "nvidia-application-profiles-367.27-key-documentation") - pisitools.insinto("/usr/share/pixmaps", "nvidia-settings.png") + pisitools.insinto("/usr/share/pixmaps", "nvidia-settings.png") + + pisitools.dolib("libnvidia-gtk2.so.%s" % version, libdir) + pisitools.dolib("libnvidia-gtk3.so.%s" % version, libdir) + + - pisitools.dolib("libnvidia-gtk2.so.%s" % version, libdir) - pisitools.dolib("libnvidia-gtk3.so.%s" % version, libdir) # Exit time for emul32 build - if get.buildTYPE() == 'emul32': - pisitools.insinto(datadir, "ld.so.conf", "32bit-ld.so.conf") - return + #if get.buildTYPE() == 'emul32': + #pisitools.insinto(datadir, "ld.so.conf", "32bit-ld.so.conf") + #return pisitools.insinto(datadir, "ld.so.conf") pisitools.insinto(datadir, "XvMCConfig") diff --git a/kernel/drivers/module-nvidia-current/files/NVIDIA-Linux-x86_64-390.87-kernel-4.19.patch b/kernel/drivers/module-nvidia-current/files/NVIDIA-Linux-x86_64-390.87-kernel-4.19.patch old mode 100644 new mode 100755 diff --git a/kernel/drivers/module-nvidia-current/files/NVIDIA-Linux-x86_64-390.87-kernel-4.20.patch b/kernel/drivers/module-nvidia-current/files/NVIDIA-Linux-x86_64-390.87-kernel-4.20.patch old mode 100644 new mode 100755 diff --git a/kernel/drivers/module-nvidia-current/files/modprobe.conf b/kernel/drivers/module-nvidia-current/files/modprobe.conf old mode 100644 new mode 100755 diff --git a/kernel/drivers/module-nvidia-current/files/nvidia-settings.desktop b/kernel/drivers/module-nvidia-current/files/nvidia-settings.desktop old mode 100644 new mode 100755 diff --git a/kernel/drivers/module-nvidia-current/pspec.xml b/kernel/drivers/module-nvidia-current/pspec.xml index a22192d392..3b7dbc8ef2 100644 --- a/kernel/drivers/module-nvidia-current/pspec.xml +++ b/kernel/drivers/module-nvidia-current/pspec.xml @@ -11,14 +11,13 @@ NVIDIA NVIDIA drivers for GeForce 6xxx and newer GPUs NVIDIA graphics drivers provide optimized 2D/3D performance. - http://download.nvidia.com/XFree86/Linux-x86/390.116/NVIDIA-Linux-x86-390.116.run - http://download.nvidia.com/XFree86/Linux-x86_64/390.116/NVIDIA-Linux-x86_64-390.116.run - + http://http.download.nvidia.com/XFree86/Linux-x86_64/440.36/NVIDIA-Linux-x86_64-440.44.run + - kernel-module-headers + kernel-module-headers libX11-devel gtk2-devel gtk3-devel @@ -30,7 +29,7 @@ driver Kernel module for current NVIDIA graphics driver releases - kernel + kernel @@ -164,6 +163,13 @@ + + 2019-12-28 + 440.44 + Version bump + İdris Kalp + idriskalp@gmail.com + 2019-08-14 390.116 diff --git a/kernel/drivers/module-nvidia304/files/NVIDIA-Linux-x86_64-304.125-kernel-3.19.patch b/kernel/drivers/module-nvidia304/files/NVIDIA-Linux-x86_64-304.125-kernel-3.19.patch old mode 100644 new mode 100755 diff --git a/kernel/drivers/module-nvidia304/files/kernel-4.14.patch b/kernel/drivers/module-nvidia304/files/kernel-4.14.patch old mode 100644 new mode 100755 diff --git a/kernel/drivers/module-nvidia304/files/linux-4.6.patch b/kernel/drivers/module-nvidia304/files/linux-4.6.patch old mode 100644 new mode 100755 diff --git a/kernel/drivers/module-nvidia304/files/linux-5.3.patch b/kernel/drivers/module-nvidia304/files/linux-5.3.patch new file mode 100755 index 0000000000..8b636324b8 --- /dev/null +++ b/kernel/drivers/module-nvidia304/files/linux-5.3.patch @@ -0,0 +1,78 @@ +--- kernel/os-interface.c 2017-09-14 23:51:09.000000000 +0300 ++++ kernel/os-interface.c 2019-11-05 19:23:48.332089532 +0300 +@@ -24,6 +24,7 @@ + + #include "os-interface.h" + #include "nv-linux.h" ++#include + + void NV_API_CALL os_disable_preemption(void) + { + +--- kernel/os-interface.c 2019-11-05 19:34:40.868104129 +0300 ++++ kernel/os-interface.c 2019-11-05 19:38:43.529109557 +0300 +@@ -26,6 +26,14 @@ + #include "nv-linux.h" + #include + ++void do_gettimeofday(struct timeval *tv) ++{ ++struct timespec64 ts; ++ktime_get_real_ts64(&ts); ++tv->tv_sec = ts.tv_sec; ++tv->tv_usec = ts.tv_nsec; ++} ++ + void NV_API_CALL os_disable_preemption(void) + { + #if defined(preempt_disable) +diff --git kernel/nv-linux.h kernel/nv-linux.h +index 4043bf1..62f0874 100644 +--- kernel/nv-linux.h ++++ kernel/nv-linux.h +@@ -877,12 +877,21 @@ extern void *nv_stack_t_cache; + __ret; \ + }) + #elif (NV_SMP_CALL_FUNCTION_ARGUMENT_COUNT == 3) ++#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 3, 0) + #define NV_SMP_CALL_FUNCTION(func, info, wait) \ + ({ \ + int __ret = smp_call_function(func, info, wait); \ + __ret; \ + }) + #else ++#define NV_SMP_CALL_FUNCTION(func, info, wait) \ ++ ({ \ ++ int __ret = 0; \ ++ smp_call_function(func, info, wait); \ ++ __ret; \ ++ }) ++#endif ++#else + #error "NV_SMP_CALL_FUNCTION_ARGUMENT_COUNT value unrecognized!" + #endif + #elif defined(CONFIG_SMP) +@@ -897,12 +906,21 @@ extern void *nv_stack_t_cache; + __ret; \ + }) + #elif (NV_ON_EACH_CPU_ARGUMENT_COUNT == 3) ++#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 3, 0) + #define NV_ON_EACH_CPU(func, info, wait) \ + ({ \ + int __ret = on_each_cpu(func, info, wait); \ + __ret; \ + }) + #else ++#define NV_ON_EACH_CPU(func, info, wait) \ ++ ({ \ ++ int __ret = 0; \ ++ on_each_cpu(func, info, wait); \ ++ __ret; \ ++ }) ++#endif ++#else + #error "NV_ON_EACH_CPU_ARGUMENT_COUNT value unrecognized!" + #endif + #elif defined(CONFIG_SMP) + + diff --git a/kernel/drivers/module-nvidia304/files/nv-drm.patch b/kernel/drivers/module-nvidia304/files/nv-drm.patch old mode 100644 new mode 100755 diff --git a/kernel/drivers/module-nvidia304/files/nvidia-304.137-bionic-18.04.patch b/kernel/drivers/module-nvidia304/files/nvidia-304.137-bionic-18.04.patch old mode 100644 new mode 100755 diff --git a/kernel/drivers/module-nvidia304/pspec.xml b/kernel/drivers/module-nvidia304/pspec.xml index 91b21370d5..b769c80a72 100644 --- a/kernel/drivers/module-nvidia304/pspec.xml +++ b/kernel/drivers/module-nvidia304/pspec.xml @@ -17,9 +17,10 @@ kernel-4.14.patch nvidia-304.137-bionic-18.04.patch + linux-5.3.patch - kernel-module-headers + kernel-module-headers @@ -27,7 +28,7 @@ module-nvidia304 Kernel module for NVIDIA driver 304.xx releases 2 - kernel + kernel /lib/modules @@ -67,6 +68,13 @@ + + 2019-12-28 + 304.137 + Rebuild for new kernel. + Idris Kalp + idriskalp@gmail.com + 2019-08-14 304.137 diff --git a/kernel/drivers/module-nvidia340/files/Makefile-kernel b/kernel/drivers/module-nvidia340/files/Makefile-kernel new file mode 100755 index 0000000000..4c941c940d --- /dev/null +++ b/kernel/drivers/module-nvidia340/files/Makefile-kernel @@ -0,0 +1,207 @@ +# +# This Makefile was automatically generated; do not edit. +# Generated on 'swio-display-x64-rhel04-13' on Thu May 24 21:16:20 PDT 2018. +# + +# +# KBUILD Makefile for the NVIDIA Linux kernel module. +# +# The motivation for replacing the original Makefile is the hope that this +# version will simplify the build and installation process. In the past, +# many architectural and cosmetic changes to the Linux kernel have made it +# difficult to maintain compatibility or required duplication of logic. +# +# Linux 2.6 introduces numerous such changes, many of which impact modules. +# Relying on KBUILD, some aspects of the build system otherwise difficult +# to support (for example, module versioning) are abstracted away and dealt +# with elsewhere, making life significantly easier here. +# +# The new approach currently has its own share of problems, some of which +# are architectural difficulties with KBUILD, others minor annoyances. For +# this reason, an improved version of the NVIDIA Makefile is available to +# those experiencing difficulties. +# +# kbuild Makefile originally developed by: +# +# Alistair J Strachan (alistair@devzero.co.uk) (first pass, enhancements) +# Christian Zander (zander@mail.minion.de) (enhancements) +# + +# +# The NVIDIA kernel module base name. +# + +MODULE_BASENAME := nvidia + +# +# This suffix is used to construct the name of the NVIDIA kernel module +# in case of multiple kernel module builds. This suffix can either take the +# numeric value 0-7 or the string "frontend". For normal NVIDIA kernel module +# builds, this variable is empty and hence the module name is identical to +# the base names. +# + +NV_MODULE_SUFFIX ?= + +# +# The NVIDIA kernel module name and static file names. In case of multiple +# NVIDIA kernel module builds, $(NV_MODULE_SUFFIX) is appended to the +# module basename to construct the module name of the concerned module. +# KBUILD will go ahead and append ".o" or ".ko" to form the module file name. +# + +ifeq ($(NV_MODULE_SUFFIX),frontend) + MODULE_NAME := $(MODULE_BASENAME)-$(NV_MODULE_SUFFIX) +else + MODULE_NAME := $(MODULE_BASENAME)$(NV_MODULE_SUFFIX) +endif +VERSION_HEADER := nv_compiler.h + +# +# List of object files to link into NVIDIA kernel module; this list +# is assigned depending on the value of $(NV_MODULE_SUFFIX) being passed. +# Make sure KBUILD understands that we want a module. +# + +CORE_OBJS := nv-kernel.o + +ifdef NV_BUILD_MODULE_INSTANCES + ifeq ($(NV_MODULE_SUFFIX),frontend) + MODULE_GLUE_OBJS := $(patsubst %.c,%.o,nv-frontend.c) + $(MODULE_NAME)-objs := $(MODULE_GLUE_OBJS) + else + MODULE_GLUE_OBJS := $(patsubst %.c,%.o, nv.c nv-acpi.c nv-chrdev.c nv-cray.c nv-dma.c nv-drm.c nv-gvi.c nv-i2c.c nv-mempool.c nv-mmap.c nv-p2p.c nv-pat.c nv-procfs.c nv-usermap.c nv-vm.c nv-vtophys.c os-interface.c os-mlock.c os-pci.c os-registry.c os-smp.c os-usermap.c nv_uvm_interface.c) + $(MODULE_NAME)-objs := $(CORE_OBJS) $(MODULE_GLUE_OBJS) + endif +else + MODULE_GLUE_OBJS := $(patsubst %.c,%.o, nv.c nv-acpi.c nv-chrdev.c nv-cray.c nv-dma.c nv-drm.c nv-gvi.c nv-i2c.c nv-mempool.c nv-mmap.c nv-p2p.c nv-pat.c nv-procfs.c nv-usermap.c nv-vm.c nv-vtophys.c os-interface.c os-mlock.c os-pci.c os-registry.c os-smp.c os-usermap.c nv_uvm_interface.c) $(patsubst %.c,%.o,nv-frontend.c) + $(MODULE_NAME)-objs := $(CORE_OBJS) $(MODULE_GLUE_OBJS) +endif + +# +# List of targets to build in case of multiple NVIDIA kernel module builds. +# The actual target is constructed by prefixing nvidia/nvidia- to every +# item in the list $(BUILD_MODULES_LIST)/$(BUILD_MODULE_FRONTEND). +# + +ifdef NV_BUILD_MODULE_INSTANCES + BUILD_MODULES_LIST := $(shell seq 0 `expr $(NV_BUILD_MODULE_INSTANCES) - 1`) + BUILD_MODULE_FRONTEND := frontend +endif + +COMPILE_TESTS = \ + remap_pfn_range \ + vmap \ + set_pages_uc \ + set_memory_uc \ + set_memory_array_uc \ + change_page_attr \ + i2c_adapter \ + pci_get_class \ + pm_message_t \ + irq_handler_t \ + pci_choose_state \ + vm_insert_page \ + acpi_device_ops \ + acpi_op_remove \ + acpi_device_id \ + acquire_console_sem \ + console_lock \ + kmem_cache_create \ + outer_flush_all \ + on_each_cpu \ + smp_call_function \ + nvmap_support \ + acpi_evaluate_integer \ + ioremap_cache \ + ioremap_wc \ + proc_dir_entry \ + INIT_WORK \ + acpi_walk_namespace \ + scatterlist \ + pci_domain_nr \ + pci_dma_mapping_error \ + file_operations \ + sg_alloc_table \ + sg_init_table \ + pci_get_domain_bus_and_slot \ + get_num_physpages \ + efi_enabled \ + dom0_kernel_present \ + drm_available \ + proc_create_data \ + pde_data \ + proc_remove \ + sg_table \ + pm_vt_switch_required \ + pci_save_state \ + file_inode \ + drm_pci_set_busid \ + write_cr4 \ + for_each_online_node \ + node_end_pfn \ + get_user_pages \ + get_user_pages_remote \ + register_cpu_notifier \ + cpuhp_setup_state \ + vm_fault_present \ + vm_fault_has_address \ + drm_driver_unload_has_int_return_type \ + drm_gem_object_get \ + do_gettimeofday \ + drm_legacy_pci_init \ + timer_setup +# +# CFLAGS dependent on the type of builds (e.g. single/muliple module, debug) +# + +ifdef NV_BUILD_MODULE_INSTANCES + EXTRA_CFLAGS += -DNV_BUILD_MODULE_INSTANCES=1 + ifneq ($(NV_MODULE_SUFFIX),frontend) + EXTRA_CFLAGS += -DNV_MODULE_INSTANCE=$(NV_MODULE_SUFFIX) + endif +else + EXTRA_CFLAGS += -DNV_MODULE_INSTANCE=0 + EXTRA_CFLAGS += -DNV_BUILD_MODULE_INSTANCES=0 +endif + +EXTRA_CFLAGS += -UDEBUG -U_DEBUG -DNDEBUG + +# +# Include common definitions; we rely on the definition of the source path to +# find the file; set to a reasonable default if unset (e.g. for top-level +# passes). The source path is also used in the common file. +# + +src ?= . +include $(src)/nvidia-modules-common.mk + +# +# Generate multiple targets at runtime depending on the items present in +# the lists $(BUILD_MODULES_LIST) and $(BUILD_MODULE_FRONTEND) for multiple +# NVIDIA kernel module builds. +# +# For normal builds, generate the target $(MODULE_BASENAME).ko. +# +# Multiple-RM builds require GNU Make v3.81 or later, due to a bug in earlier +# versions of GNU Make that prevents the use of $(eval) within a $(foreach): +# +# http://savannah.gnu.org/bugs/?func=detailitem&item_id=1517 +# + +$(foreach obj_file, $(BUILD_MODULES_LIST), $(eval $(call BUILD_MODULE_RULE,$(MODULE_BASENAME)$(obj_file).ko,$(obj_file),$(MODULE_BASENAME)-$(BUILD_MODULE_FRONTEND).ko))) +$(eval $(call BUILD_MODULE_RULE,$(MODULE_BASENAME)-$(BUILD_MODULE_FRONTEND).ko,$(BUILD_MODULE_FRONTEND),)) +$(eval $(call BUILD_MODULE_RULE,$(MODULE_BASENAME).ko,,)) + +# +# Add dependencies for the generated targets, depending on whether we are +# building multiple RM instances or a single RM. +# + +ifdef NV_BUILD_MODULE_INSTANCES + NV_MODULE_TARGET_DEPS := $(addsuffix .ko,$(addprefix $(MODULE_BASENAME),$(BUILD_MODULES_LIST) -$(BUILD_MODULE_FRONTEND))) +else + NV_MODULE_TARGET_DEPS := $(MODULE_OBJECT) +endif + +module: $(NV_MODULE_TARGET_DEPS) diff --git a/kernel/drivers/module-nvidia340/files/Makefile-uvm b/kernel/drivers/module-nvidia340/files/Makefile-uvm new file mode 100755 index 0000000000..5c7b4667e5 --- /dev/null +++ b/kernel/drivers/module-nvidia340/files/Makefile-uvm @@ -0,0 +1,234 @@ +################################################################################ +# Copyright (c) 2013 NVidia Corporation +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +################################################################################ + +# +# UVM kernel module makefile +# + +# The following UVM_BUILD_TYPEs are supported: debug, release, and develop. +# The first two are nearly self-explanatory, but "develop" deserves a little +# more explanation (below). +# +# Description of the UVM build types (UVM_BUILD_TYPE): +# +# debug builds: these get debug symbols, no optimization (in order to allow +# easier stepping through of functions), and debug printing. +# +# develop builds: these are "printing" builds, normally without debug symbols. +# These builds must run at close to normal speeds, so they are optimized, and +# do not have any debug symbols. However, they do have debug printing output. +# This allows a convenient way for QA (or anyone) to get a slightly deeper look +# at what the driver is doing, without the hassle of setting up kernel +# debugging. +# +# release builds: these are just the usual speed-optimized, no-debug, +# no-printing builds that you would expect most users to run. +# +UVM_BUILD_TYPE ?= release + +ifeq ($(UVM_BUILD_TYPE),debug) + EXTRA_CFLAGS += -DDEBUG -O0 -g +else + ifeq ($(UVM_BUILD_TYPE),develop) + # -DDEBUG is required, in order to allow pr_devel() print statements to + # work: + EXTRA_CFLAGS += -DDEBUG -O2 + else + EXTRA_CFLAGS += -O2 + endif +endif + +NV_HOST_OS := $(shell uname) +NV_HOST_ARCH := $(shell uname -m) + +NV_TARGET_DEFINES ?= +NV_DEFINES= + +# In addition to the UVM_BUILD_TYPE (release, debug) choice, there is also a +# UVM_PROJECT choice. Choices include UVM_NEXT and UVM_LITE, and ALL. The +# default is UVM_LITE. +# +# Unless you are working (inside NVIDIA) on the "next" version of UVM, you want +# to use the default choice here. +UVM_PROJECT ?= UVM_LITE + +UVM_LITE ?= 0 +UVM_NEXT ?= 0 +RM_ENABLED ?= 1 + +ifeq ($(UVM_PROJECT),ALL) + UVM_LITE = 1 + UVM_NEXT = 1 +else + ifeq ($(UVM_PROJECT),UVM_LITE) + UVM_LITE = 1 + else + ifeq ($(UVM_PROJECT),UVM_NEXT) + UVM_NEXT = 1 + else + $(error "Invalid UVM_PROJECT: $(UVM_PROJECT)") + endif + endif +endif + +ifeq ($(UVM_LITE),0) + ifeq ($(UVM_NEXT),0) + $(error "Cannot build with both UVM_LITE and UVM_NEXT disabled") + endif +endif + +ifneq ($(UVM_LITE),0) + NV_DEFINES += -DNVIDIA_UVM_LITE_ENABLED +endif +ifneq ($(UVM_NEXT),0) + NV_DEFINES += -DNVIDIA_UVM_NEXT_ENABLED +endif + +NV_DEFINES += -D$(NV_HOST_OS) + +ifneq ($(findstring $(NV_HOST_OS),"Linux"),) + NV_HOST_OS_FAMILY = Unix + NV_HOST_OS_FAMILY_LOWER_CASE = unix + NV_DEFINES+= -D__linux__ +endif + +ifneq ($(findstring $(NV_HOST_OS),"macosx"),) + NV_HOST_OS_FAMILY = MacOSX + NV_HOST_OS_FAMILY_LOWER_CASE = macosx +endif + +ifeq ($(NV_HOST_OS_FAMILY),) + $(error "Unrecognized NV_HOST_OS: $(NV_HOST_OS)") +endif + +ifneq ($(findstring $(NV_HOST_OS_FAMILY),"Unix MacOSX"),) + # For Unix and MacOS, use the host platform as the default target platform. + NV_TARGET_OS ?= $(NV_HOST_OS) + NV_TARGET_ARCH ?= $(NV_HOST_ARCH) +endif + +# +# Determine NV_TARGET_OS_FAMILY +# +NV_TARGET_OS_FAMILY = + +ifneq ($(findstring $(NV_TARGET_OS),"Linux"),) + NV_TARGET_OS_FAMILY = Unix + NV_TARGET_OS_FAMILY_LOWER_CASE = unix +endif + +ifneq ($(findstring $(NV_TARGET_OS),"macosx"),) + NV_TARGET_OS_FAMILY = MacOSX + NV_TARGET_OS_FAMILY_LOWER_CASE = macosx +endif + +ifeq ($(NV_TARGET_OS_FAMILY),) + $(error "NV_TARGET_OS_FAMILY has not been set.") +endif + +src ?= . +obj ?= $(src) + +# In both internal builds, and installation (public) builds, the UVM open-source +# files (that's all of them, for UVM) are in a subdirectory below the RM +# open-source files. +RM_OUT_DIR ?= $(src)/.. + +VERSION_HEADER := $(RM_OUT_DIR)/nv_compiler.h + +COMPILE_TESTS = \ + remap_page_range \ + remap_pfn_range \ + irq_handler_t \ + vm_insert_page \ + kmem_cache_create \ + outer_flush_all \ + vm_operations_struct \ + file_operations \ + task_struct \ + address_space \ + address_space_init_once \ + kbasename \ + fatal_signal_pending \ + kuid_t \ + do_gettimeofday \ + vm_fault_has_address + +MODULE_NAME:= nvidia-uvm + +MODULE_GLUE_OBJS := nvidia_uvm_linux.o \ + nvidia_uvm_common.o \ + nvidia_uvm_utils.o + +ifneq ($(UVM_LITE),0) + MODULE_GLUE_OBJS += nvidia_uvm_lite.o \ + nvidia_uvm_page_cache.o \ + nvidia_uvm_lite_api.o \ + nvidia_uvm_lite_counters.o \ + nvidia_page_migration.o \ + nvidia_page_migration_kepler.o \ + nvidia_uvm_lite_events.o \ + uvm_gpu_ops_tests.o +endif + +NV_INCLUDES:= -I$(PWD) -I$(RM_OUT_DIR) + +ifneq ($(UVM_NEXT),0) + include $(src)/uvmnext.mk +endif + +ifneq ($(RM_ENABLED),0) + NV_DEFINES += -DNVIDIA_UVM_RM_ENABLED +endif + +EXTRA_CFLAGS += $(NV_DEFINES) $(NV_TARGET_DEFINES) $(NV_INCLUDES) + +ccflags-y += $(EXTRA_CFLAGS) + +RM_MODULE_SYMVERS:= $(RM_OUT_DIR)/Module.symvers +UVM_MODULE_SYMVERS:= $(obj)/Module.symvers + +module $(MODULE_NAME).ko: $(UVM_MODULE_SYMVERS) debug_diagnostics_printing + +$(MODULE_NAME)-y := $(MODULE_GLUE_OBJS) + +include $(RM_OUT_DIR)/nvidia-modules-common.mk + +$(eval $(call BUILD_MODULE_RULE, $(MODULE_OBJECT),"uvm",)) +module: $(MODULE_OBJECT) + +$(RM_MODULE_SYMVERS): + cd $(RM_OUT_DIR); make module SYSSRC=$(KERNEL_SOURCES) SYSOUT=$(KERNEL_OUTPUT) KBUILD_EXTMOD=$(RM_OUT_DIR) + +$(UVM_MODULE_SYMVERS): $(RM_MODULE_SYMVERS) + cp $< $@ + +debug_diagnostics_printing: +ifeq ($(NV_VERBOSE),1) + @echo "NVIDIA UVM: CC=$(CC), HOST_CC=$(HOST_CC) NV_TARGET_ARCH=$(NV_TARGET_ARCH)" + @echo "NVIDIA UVM: CONFTEST=$(CONFTEST)" + @echo "KERNEL_SOURCES: $(KERNEL_SOURCES)" + @echo "EXTRA_CFLAGS: $(EXTRA_CFLAGS)" +endif + +.PHONY: debug_diagnostics_printing diff --git a/kernel/drivers/module-nvidia340/files/fs52243.patch b/kernel/drivers/module-nvidia340/files/fs52243.patch old mode 100644 new mode 100755 diff --git a/kernel/drivers/module-nvidia340/files/kernel-4.11.patch b/kernel/drivers/module-nvidia340/files/kernel-4.11.patch old mode 100644 new mode 100755 diff --git a/kernel/drivers/module-nvidia340/files/kernel-5.1.patch b/kernel/drivers/module-nvidia340/files/kernel-5.1.patch new file mode 100755 index 0000000000..3cd3624b16 --- /dev/null +++ b/kernel/drivers/module-nvidia340/files/kernel-5.1.patch @@ -0,0 +1,43 @@ +diff --git kernel/uvm/nvidia_uvm_lite.c kernel/uvm/nvidia_uvm_lite.c +index 65b9a4d..f5ea5d7 100644 +--- a/kernel/uvm/nvidia_uvm_lite.c ++++ b/kernel/uvm/nvidia_uvm_lite.c +@@ -830,8 +830,10 @@ done: + #if defined(NV_VM_OPERATIONS_STRUCT_HAS_FAULT) + #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0) + int _fault(struct vm_area_struct *vma, struct vm_fault *vmf) +-#else +-int _fault(struct vm_fault *vmf) ++#elif LINUX_VERSION_CODE < KERNEL_VERSION(5, 1, 0) ++int _fault(struct vm_fault *vmf) ++#else ++vm_fault_t _fault(struct vm_fault *vmf) + #endif + { + #if defined(NV_VM_FAULT_HAS_ADDRESS) +@@ -886,8 +888,10 @@ static struct vm_operations_struct uvmlite_vma_ops = + #if defined(NV_VM_OPERATIONS_STRUCT_HAS_FAULT) + #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0) + int _sigbus_fault(struct vm_area_struct *vma, struct vm_fault *vmf) +-#else ++#elif LINUX_VERSION_CODE < KERNEL_VERSION(5, 1, 0) + int _sigbus_fault(struct vm_fault *vmf) ++#else ++vm_fault_t _sigbus_fault(struct vm_fault *vmf) + #endif + { + vmf->page = NULL; +diff --git kernel/nv-drm.c kernel/nv-drm.c +index 122ba7d..1be5733 100644 +--- a/kernel/nv-drm.c ++++ b/kernel/nv-drm.c +@@ -146,7 +146,7 @@ static const struct file_operations nv_drm_fops = { + }; + + static struct drm_driver nv_drm_driver = { +-#if defined(DRIVER_LEGACY) ++#if defined(DRIVER_LEGACY) || LINUX_VERSION_CODE >= KERNEL_VERSION(5, 1, 0) + .driver_features = DRIVER_GEM | DRIVER_PRIME | DRIVER_LEGACY, + #else + .driver_features = DRIVER_GEM | DRIVER_PRIME, + diff --git a/kernel/drivers/module-nvidia340/files/kernel-5.3.patch b/kernel/drivers/module-nvidia340/files/kernel-5.3.patch new file mode 100755 index 0000000000..c51a41d5d8 --- /dev/null +++ b/kernel/drivers/module-nvidia340/files/kernel-5.3.patch @@ -0,0 +1,49 @@ +diff --git kernel/nv-linux.h kernel/nv-linux.h +index 4043bf1..62f0874 100644 +--- kernel/nv-linux.h ++++ kernel/nv-linux.h +@@ -877,12 +877,21 @@ extern void *nv_stack_t_cache; + __ret; \ + }) + #elif (NV_SMP_CALL_FUNCTION_ARGUMENT_COUNT == 3) ++#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 3, 0) + #define NV_SMP_CALL_FUNCTION(func, info, wait) \ + ({ \ + int __ret = smp_call_function(func, info, wait); \ + __ret; \ + }) + #else ++#define NV_SMP_CALL_FUNCTION(func, info, wait) \ ++ ({ \ ++ int __ret = 0; \ ++ smp_call_function(func, info, wait); \ ++ __ret; \ ++ }) ++#endif ++#else + #error "NV_SMP_CALL_FUNCTION_ARGUMENT_COUNT value unrecognized!" + #endif + #elif defined(CONFIG_SMP) +@@ -897,12 +906,21 @@ extern void *nv_stack_t_cache; + __ret; \ + }) + #elif (NV_ON_EACH_CPU_ARGUMENT_COUNT == 3) ++#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 3, 0) + #define NV_ON_EACH_CPU(func, info, wait) \ + ({ \ + int __ret = on_each_cpu(func, info, wait); \ + __ret; \ + }) + #else ++#define NV_ON_EACH_CPU(func, info, wait) \ ++ ({ \ ++ int __ret = 0; \ ++ on_each_cpu(func, info, wait); \ ++ __ret; \ ++ }) ++#endif ++#else + #error "NV_ON_EACH_CPU_ARGUMENT_COUNT value unrecognized!" + #endif + #elif defined(CONFIG_SMP) + diff --git a/kernel/drivers/module-nvidia340/files/kernel-5.4.patch b/kernel/drivers/module-nvidia340/files/kernel-5.4.patch new file mode 100644 index 0000000000..cdbbe791fd --- /dev/null +++ b/kernel/drivers/module-nvidia340/files/kernel-5.4.patch @@ -0,0 +1,113 @@ +From f90c388c755a6bd9b72cb51c712a0ae686e0b377 Mon Sep 17 00:00:00 2001 +From: Alberto Milone +Date: Wed, 27 Nov 2019 13:01:18 +0100 +Subject: [PATCH 1/1] Add support for Linux 5.4 + +--- + conftest.sh | 46 ++++++++++++++++++++++++++++++++++++++++ + nv-drm.c | 9 +++++--- + nvidia-modules-common.mk | 2 +- + 3 files changed, 53 insertions(+), 4 deletions(-) + +diff --git a/conftest.sh b/conftest.sh +index fb0bf60..babbb50 100755 +--- a/kernel/conftest.sh ++++ b/kernel/conftest.sh +@@ -265,6 +265,23 @@ build_cflags() { + if [ -n "$BUILD_PARAMS" ]; then + CFLAGS="$CFLAGS -D$BUILD_PARAMS" + fi ++ ++ # Check if gcc supports asm goto and set CC_HAVE_ASM_GOTO if it does. ++ # Older kernels perform this check and set this flag in Kbuild, and since ++ # conftest.sh runs outside of Kbuild it ends up building without this flag. ++ # Starting with commit e9666d10a5677a494260d60d1fa0b73cc7646eb3 this test ++ # is done within Kconfig, and the preprocessor flag is no longer needed. ++ ++ GCC_GOTO_SH="$SOURCES/build/gcc-goto.sh" ++ ++ if [ -f "$GCC_GOTO_SH" ]; then ++ # Newer versions of gcc-goto.sh don't print anything on success, but ++ # this is okay, since it's no longer necessary to set CC_HAVE_ASM_GOTO ++ # based on the output of those versions of gcc-goto.sh. ++ if [ `/bin/sh "$GCC_GOTO_SH" "$CC"` = "y" ]; then ++ CFLAGS="$CFLAGS -DCC_HAVE_ASM_GOTO" ++ fi ++ fi + } + + CONFTEST_PREAMBLE="#include \"conftest.h\" +@@ -1521,6 +1538,35 @@ compile_test() { + compile_check_conftest "$CODE" "NV_DRM_AVAILABLE" "" "generic" + ;; + ++ drm_driver_prime_flag_present) ++ # ++ # Determine whether driver feature flag DRIVER_PRIME is present. ++ # ++ # The DRIVER_PRIME flag was added by commit 3248877ea179 (drm: ++ # base prime/dma-buf support (v5)) in v3.4 (2011-11-25) and is ++ # removed by commit 0424fdaf883a (drm/prime: Actually remove ++ # DRIVER_PRIME everywhere) on 2019-06-17. ++ # ++ # DRIVER_PRIME definition moved from drmP.h to drm_drv.h by ++ # commit 85e634bce01a (drm: Extract drm_drv.h) in v4.10 ++ # (2016-11-14). ++ # ++ # DRIVER_PRIME define is changed to enum value by commit ++ # 0e2a933b02c9 (drm: Switch DRIVER_ flags to an enum) in v5.1 ++ # (2019-01-29). ++ # ++ CODE=" ++ #include ++ #if defined(NV_DRM_DRM_DRV_H_PRESENT) ++ #include ++ #endif ++ unsigned int drm_driver_prime_flag_present_conftest(void) { ++ return DRIVER_PRIME; ++ }" ++ ++ compile_check_conftest "$CODE" "NV_DRM_DRIVER_PRIME_FLAG_PRESENT" "" "types" ++ ;; ++ + proc_create_data) + # + # Determine if the proc_create_data() function is present. +diff --git a/nv-drm.c b/nv-drm.c +index 76719bb..12f7029 100644 +--- a/kernel/nv-drm.c ++++ b/kernel/nv-drm.c +@@ -156,11 +156,14 @@ static const struct file_operations nv_drm_fops = { + }; + + static struct drm_driver nv_drm_driver = { ++ .driver_features = ++#if defined(NV_DRM_DRIVER_PRIME_FLAG_PRESENT) ++ DRIVER_PRIME | ++#endif + #if defined(DRIVER_LEGACY) || LINUX_VERSION_CODE >= KERNEL_VERSION(5, 1, 0) +- .driver_features = DRIVER_GEM | DRIVER_PRIME | DRIVER_LEGACY, +-#else +- .driver_features = DRIVER_GEM | DRIVER_PRIME, ++ DRIVER_LEGACY | + #endif ++ DRIVER_GEM, + .load = nv_drm_load, + .unload = nv_drm_unload, + .fops = &nv_drm_fops, +diff --git a/nvidia-modules-common.mk b/nvidia-modules-common.mk +index 8ac7058..7418005 100644 +--- a/kernel/nvidia-modules-common.mk ++++ b/kernel/nvidia-modules-common.mk +@@ -180,7 +180,7 @@ ifndef NV_VERBOSE + endif + + KBUILD_PARAMS += KBUILD_VERBOSE=$(NV_VERBOSE) +-KBUILD_PARAMS += -C $(KERNEL_SOURCES) SUBDIRS=$(PWD) ++KBUILD_PARAMS += -C $(KERNEL_SOURCES) M=$(PWD) + KBUILD_PARAMS += ARCH=$(ARCH) + + # +-- +2.20.1 + diff --git a/kernel/drivers/module-nvidia340/files/kmem_cache_create_usercopy.patch b/kernel/drivers/module-nvidia340/files/kmem_cache_create_usercopy.patch new file mode 100755 index 0000000000..6873cd2ab8 --- /dev/null +++ b/kernel/drivers/module-nvidia340/files/kmem_cache_create_usercopy.patch @@ -0,0 +1,29 @@ +Author: Andreas Beckmann +Description: use kmem_cache_create_usercopy on 4.16+ + fixes "Bad or missing usercopy whitelist? Kernel memory exposure attempt + detected from SLUB object 'nvidia_stack_cache'" on linux-image-4.16.0-2-* + or newer that have disabled CONFIG_HARDENED_USERCOPY_FALLBACK +Bug-Debian: #901919, #899998 +Bug: https://devtalk.nvidia.com/default/topic/1031067 + +--- a/kernel/nv-linux.h ++++ b/kernel/nv-linux.h +@@ -757,11 +757,18 @@ extern nv_spinlock_t km_lock; + 0, 0, NULL, NULL); \ + } + #elif (NV_KMEM_CACHE_CREATE_ARGUMENT_COUNT == 5) ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 16, 0) ++#define NV_KMEM_CACHE_CREATE(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(kmem_cache, name, type) \ + { \ + kmem_cache = kmem_cache_create(name, sizeof(type), \ + 0, 0, NULL); \ + } ++#endif + #else + #error "NV_KMEM_CACHE_CREATE_ARGUMENT_COUNT value unrecognized!" + #endif diff --git a/kernel/drivers/module-nvidia340/files/linux-4.6.patch b/kernel/drivers/module-nvidia340/files/linux-4.6.patch old mode 100644 new mode 100755 diff --git a/kernel/drivers/module-nvidia340/files/modprobe.conf b/kernel/drivers/module-nvidia340/files/modprobe.conf old mode 100644 new mode 100755 diff --git a/kernel/drivers/module-nvidia340/files/nv-drm.patch b/kernel/drivers/module-nvidia340/files/nv-drm.patch old mode 100644 new mode 100755 diff --git a/kernel/drivers/module-nvidia340/files/nv_patch_340.107_linux_kernel_5.0 b/kernel/drivers/module-nvidia340/files/nv_patch_340.107_linux_kernel_5.0 new file mode 100755 index 0000000000..1d26e5027f --- /dev/null +++ b/kernel/drivers/module-nvidia340/files/nv_patch_340.107_linux_kernel_5.0 @@ -0,0 +1,199 @@ +--- kernel/conftest.sh ++++ kernel/conftest.sh +@@ -168,6 +168,7 @@ test_headers() { + FILES="$FILES linux/sched/task.h" + FILES="$FILES xen/ioemu.h" + FILES="$FILES linux/fence.h" ++ FILES="$FILES linux/ktime.h" + + FILES_ARCH="$FILES_ARCH asm/set_memory.h" + +@@ -1971,6 +1972,38 @@ compile_test() { + compile_check_conftest "$CODE" "NV_DRM_DRIVER_UNLOAD_HAS_INT_RETURN_TYPE" "" "types" + ;; + ++ drm_gem_object_get) ++ # ++ # Determine if the function drm_gem_object_get() is present. ++ # ++ CODE=" ++ #include ++ #if defined(NV_DRM_DRM_GEM_H_PRESENT) ++ #include ++ #endif ++ void conftest_drm_gem_object_get(void) { ++ drm_gem_object_get(); ++ }" ++ ++ compile_check_conftest "$CODE" "NV_DRM_GEM_OBJECT_GET_PRESENT" "" "functions" ++ ;; ++ ++ do_gettimeofday) ++ # ++ # Determine if the function do_gettimeofday() is present. ++ # ++ CODE=" ++ #include ++ #if defined(NV_LINUX_KTIME_H_PRESENT) ++ #include ++ #endif ++ void conftest_do_gettimeofday(void) { ++ do_gettimeofday(); ++ }" ++ ++ compile_check_conftest "$CODE" "NV_DO_GETTIMEOFDAY_PRESENT" "" "functions" ++ ;; ++ + drm_legacy_pci_init) + # + # Determine if drm_legacy_pci_init() is present. drm_pci_init() was +--- kernel/nv-drm.c ++++ kernel/nv-drm.c +@@ -37,6 +37,16 @@ struct nv_gem_object { + struct page **pages; + }; + ++static inline void ++nv_drm_gem_object_unreference_unlocked(struct nv_gem_object *nv_gem) ++{ ++#if defined(NV_DRM_GEM_OBJECT_GET_PRESENT) ++ drm_gem_object_put_unlocked(&nv_gem->base); ++#else ++ drm_gem_object_unreference_unlocked(&nv_gem->base); ++#endif ++} ++ + static int nv_drm_load( + struct drm_device *dev, + unsigned long flags +@@ -252,7 +262,7 @@ RM_STATUS NV_API_CALL nv_alloc_os_descriptor_handle( + goto done; + } + +- drm_gem_object_unreference_unlocked(&nv_obj->base); ++ nv_drm_gem_object_unreference_unlocked(nv_obj); + + status = RM_OK; + +--- /dev/null ++++ kernel/nv-time.h +@@ -0,0 +1,24 @@ ++#ifndef __NV_TIME_H__ ++#define __NV_TIME_H__ ++ ++#include "conftest.h" ++#include ++ ++#if defined(NV_LINUX_KTIME_H_PRESENT) ++#include ++#endif ++ ++static inline void nv_gettimeofday(struct timeval *tv) ++{ ++#ifdef NV_DO_GETTIMEOFDAY_PRESENT ++ do_gettimeofday(tv); ++#else ++ struct timespec64 now; ++ ++ ktime_get_real_ts64(&now); ++ tv->tv_sec = now.tv_sec; ++ tv->tv_usec = now.tv_nsec/1000; ++#endif ++} ++ ++#endif +--- kernel/os-interface.c ++++ kernel/os-interface.c +@@ -13,6 +13,7 @@ + + #include "os-interface.h" + #include "nv-linux.h" ++#include "nv-time.h" + + RM_STATUS NV_API_CALL os_disable_console_access(void) + { +@@ -440,7 +441,7 @@ RM_STATUS NV_API_CALL os_get_current_time( + { + struct timeval tm; + +- do_gettimeofday(&tm); ++ nv_gettimeofday(&tm); + + *seconds = tm.tv_sec; + *useconds = tm.tv_usec; +@@ -475,7 +476,7 @@ RM_STATUS NV_API_CALL os_delay_us(NvU32 MicroSeconds) + #ifdef NV_CHECK_DELAY_ACCURACY + struct timeval tm1, tm2; + +- do_gettimeofday(&tm1); ++ nv_gettimeofday(&tm1); + #endif + + if (in_irq() && (MicroSeconds > NV_MAX_ISR_DELAY_US)) +@@ -490,7 +491,7 @@ RM_STATUS NV_API_CALL os_delay_us(NvU32 MicroSeconds) + udelay(usec); + + #ifdef NV_CHECK_DELAY_ACCURACY +- do_gettimeofday(&tm2); ++ nv_gettimeofday(&tm2); + nv_printf(NV_DBG_ERRORS, "NVRM: osDelayUs %d: 0x%x 0x%x\n", + MicroSeconds, tm2.tv_sec - tm1.tv_sec, tm2.tv_usec - tm1.tv_usec); + #endif +@@ -518,7 +519,7 @@ RM_STATUS NV_API_CALL os_delay(NvU32 MilliSeconds) + struct timeval tm_start; + #endif + +- do_gettimeofday(&tm_aux); ++ nv_gettimeofday(&tm_aux); + #ifdef NV_CHECK_DELAY_ACCURACY + tm_start = tm_aux; + #endif +@@ -552,7 +553,7 @@ RM_STATUS NV_API_CALL os_delay(NvU32 MilliSeconds) + do + { + schedule_timeout(jiffies); +- do_gettimeofday(&tm_aux); ++ nv_gettimeofday(&tm_aux); + if (NV_TIMERCMP(&tm_aux, &tm_end, <)) + { + NV_TIMERSUB(&tm_end, &tm_aux, &tm_aux); +@@ -574,7 +575,7 @@ RM_STATUS NV_API_CALL os_delay(NvU32 MilliSeconds) + udelay(MicroSeconds); + } + #ifdef NV_CHECK_DELAY_ACCURACY +- do_gettimeofday(&tm_aux); ++ nv_gettimeofday(&tm_aux); + timersub(&tm_aux, &tm_start, &tm_aux); + nv_printf(NV_DBG_ERRORS, "NVRM: osDelay %dmsec: %d.%06dsec\n", + MilliSeconds, tm_aux.tv_sec, tm_aux.tv_usec); +--- kernel/uvm/nvidia_uvm_linux.h ++++ kernel/uvm/nvidia_uvm_linux.h +@@ -146,6 +146,7 @@ + #include /* tasklets, interrupt helpers */ + #include + #include /* do_gettimeofday()*/ ++#include "nv-time.h" + + #include /* do_div() */ + #if defined(NV_ASM_SYSTEM_H_PRESENT) +--- kernel/uvm/nvidia_uvm_lite.c ++++ kernel/uvm/nvidia_uvm_lite.c +@@ -2019,7 +2019,7 @@ static RM_STATUS _check_ecc_errors(UvmGpuMigrationTracking *pMigTracker, + { + if (!!(rmInterruptSet) && !bEccIncomingError) + { +- do_gettimeofday(&eccErrorStartTime); ++ nv_gettimeofday(&eccErrorStartTime); + _set_timeout_in_usec(&eccErrorStartTime, &eccTimeout, + UVM_ECC_ERR_TIMEOUT_USEC); + +@@ -2051,7 +2051,7 @@ static RM_STATUS _check_ecc_errors(UvmGpuMigrationTracking *pMigTracker, + // + if (!!(rmInterruptSet) && (eccErrorStartTime.tv_usec != 0)) + { +- do_gettimeofday(&eccErrorCurrentTime); ++ nv_gettimeofday(&eccErrorCurrentTime); + if ((eccErrorCurrentTime.tv_sec > eccTimeout.tv_sec) || + ((eccErrorCurrentTime.tv_sec == eccTimeout.tv_sec) && + (eccErrorCurrentTime.tv_usec >= eccTimeout.tv_usec))) + diff --git a/kernel/drivers/module-nvidia340/files/unregister_procfs_on_failure.patch b/kernel/drivers/module-nvidia340/files/unregister_procfs_on_failure.patch new file mode 100755 index 0000000000..d220cb3efc --- /dev/null +++ b/kernel/drivers/module-nvidia340/files/unregister_procfs_on_failure.patch @@ -0,0 +1,28 @@ +Author: Andreas Beckmann +Description: unregister procfs upon module load failure + the nvidia module may leave stale proc entries if it refuses to be + loaded becase nouveau is already loaded and has claimed the device + . + the error unwinding in nvidia_init_module() is insane + (375.26 looks much better) + . + this patch is probably not correct in all cases, but the unwinding is + not reverse linear in creation and the gotos are all across everything + . + leaving stale proc entries prevents the nvidia module from loading again + . + accessing the stale proc entries results in + BUG: unable to handle kernel paging request at ... +Bug-Debian: #764639 + +--- a/kernel/nv.c ++++ b/kernel/nv.c +@@ -1038,6 +1038,8 @@ failed3: + + pci_unregister_driver(&nv_pci_driver); + ++ nv_unregister_procfs(); ++ + failed5: + rm_shutdown_rm(sp); + diff --git a/kernel/drivers/module-nvidia340/pspec.xml b/kernel/drivers/module-nvidia340/pspec.xml index b4161bbb30..879a93bf5c 100644 --- a/kernel/drivers/module-nvidia340/pspec.xml +++ b/kernel/drivers/module-nvidia340/pspec.xml @@ -15,9 +15,17 @@ http://http.download.nvidia.com/XFree86/Linux-x86_64/340.107/NVIDIA-Linux-x86_64-340.107.run kernel-4.11.patch + kernel-5.3.patch + kernel-5.1.patch + kernel-5.4.patch + kmem_cache_create_usercopy.patch + unregister_procfs_on_failure.patch + nv_patch_340.107_linux_kernel_5.0 + Makefile-kernel + Makefile-uvm - kernel-module-headers + kernel-module-headers @@ -26,7 +34,7 @@ driver Kernel module for NVIDIA driver 340.xx releases - kernel + kernel /lib/modules @@ -97,6 +105,13 @@ + + 2019-12-28 + 340.107 + Rebuild for new kernel. + Idris Kalp + idriskalp@gmail.com + 2019-08-14 340.107 diff --git a/kernel/drivers/module-nvidia390/actions.py b/kernel/drivers/module-nvidia390/actions.py new file mode 100755 index 0000000000..5c2c694ebd --- /dev/null +++ b/kernel/drivers/module-nvidia390/actions.py @@ -0,0 +1,184 @@ +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import get +from pisi.actionsapi import autotools +from pisi.actionsapi import pisitools +from pisi.actionsapi import shelltools +from pisi.actionsapi import kerneltools + +WorkDir = "." +KDIR = kerneltools.getKernelVersion() +NoStrip = ["/lib/modules"] + +version = get.srcVERSION() +driver_dir_name = "nvidia-current" +datadir = "/usr/share/%s" % driver_dir_name +libdir = "/usr/lib32" if get.buildTYPE() == 'emul32' else "/usr/lib" +arch = "x86" if get.buildTYPE() == 'emul32' else get.ARCH().replace("i6", "x") +nvlibdir = "%s/%s" % (libdir, driver_dir_name) +xorglibdir= "%s/xorg" % libdir + +def setup(): + shelltools.system("sh NVIDIA-Linux-%s-%s.run -x --target tmp" + % (arch, get.srcVERSION())) + shelltools.move("tmp/*", ".") + + + #if get.buildTYPE() != 'emul32': + #shelltools.system("patch -p1 < linux-5.1.patch") + + + # Our libc is TLS enabled so use TLS library + #shelltools.unlink("*-tls.so*") + #shelltools.move("tls/*", ".") + + # xorg-server provides libwfb.so + shelltools.unlink("libnvidia-wfb.so.*") + + shelltools.echo("ld.so.conf", nvlibdir) + shelltools.echo("XvMCConfig", "%s/libXvMCNVIDIA.so" % nvlibdir) + +def build(): + # We don't need kernel module for emul32 build + if get.buildTYPE() == 'emul32': + return + + shelltools.export("SYSSRC", "/lib/modules/%s/build" % KDIR) + shelltools.cd("kernel") + + autotools.make("module") + + #shelltools.cd("uvm") + #autotools.make("module") + +def install(): + + if not get.buildTYPE() == 'emul32': + # Kernel driver + pisitools.insinto("/lib/modules/%s/extra" % KDIR, + "kernel/nvidia.ko") + + pisitools.insinto("/lib/modules/%s/extra" % KDIR, + "kernel/nvidia-uvm.ko") + + pisitools.insinto("/lib/modules/%s/extra" % KDIR, + "kernel/nvidia-modeset.ko") + + # Command line tools and their man pages + pisitools.dobin("nvidia-smi") + pisitools.doman("nvidia-smi.1.gz") + pisitools.dobin("nvidia-debugdump") + pisitools.dobin("nvidia-xconfig") + pisitools.doman("nvidia-xconfig.1.gz") + pisitools.dobin("nvidia-bug-report.sh") + pisitools.dobin("nvidia-cuda-mps-server") + pisitools.dobin("nvidia-cuda-mps-control") + pisitools.doman("nvidia-cuda-mps-control.1.gz") + pisitools.dobin("nvidia-modprobe") + pisitools.doman("nvidia-modprobe.1.gz") + pisitools.dobin("nvidia-persistenced") + pisitools.doman("nvidia-persistenced.1.gz") + + ### Libraries + # OpenGl library + pisitools.dolib("libGL.so.%s" % version, nvlibdir) + pisitools.dosym("libGL.so.%s" % version, "%s/libGL.so.1.2.0" % nvlibdir) + pisitools.dosym("libGL.so.%s" % version, "%s/libGL.so.1" % nvlibdir) + pisitools.dolib("libGL.so.%s" % version, libdir) + + pisitools.dolib("libEGL.so.1.1.0", nvlibdir) + pisitools.dosym("libEGL.so.1.1.0", "%s/libEGL.so.1" % nvlibdir) + pisitools.dolib("libEGL_nvidia.so.%s" % version, libdir) + pisitools.dolib("libGLESv1_CM_nvidia.so.%s" % version, libdir) + pisitools.dolib("libGLESv2_nvidia.so.%s" % version, libdir) + + # OpenCL + pisitools.insinto("/etc/OpenCL/vendors", "nvidia.icd") + pisitools.dolib("libnvidia-compiler.so.%s" % version, libdir) + pisitools.dosym("libnvidia-compiler.so.%s" % version, "%s/libnvidia-compiler.so.1" % libdir) + + pisitools.dolib("libOpenCL.so.1.0.0", libdir) + pisitools.dosym("libOpenCL.so.1.0.0", "%s/libOpenCL.so.1.0" % libdir) + pisitools.dosym("libOpenCL.so.1.0", "%s/libOpenCL.so.1" % libdir) + + pisitools.dolib("libnvidia-opencl.so.%s" % version, libdir) + pisitools.dosym("libnvidia-opencl.so.%s" % version, "%s/libnvidia-opencl.so.1" % libdir) + pisitools.dosym("libnvidia-opencl.so.1", "%s/libnvidia-opencl.so" % libdir) + + # CUDA + pisitools.dolib("libcuda.so.%s" % version, libdir) + pisitools.dosym("libcuda.so.%s" % version, "%s/libcuda.so.1" % libdir) + pisitools.dosym("libcuda.so.1", "%s/libcuda.so" % libdir) + + pisitools.dolib("libnvcuvid.so.%s" % version, libdir) + pisitools.dosym("libnvcuvid.so.%s" % version, "%s/libnvcuvid.so.1" % libdir) + pisitools.dosym("libnvcuvid.so.1", "%s/libnvcuvid.so" % libdir) + + # NVML + # Provides programmatic access to static information and monitoring + # data for NVIDIA GPUs, as well as limited managment capabilities + pisitools.dolib("libnvidia-ml.so.%s" % version, libdir) + pisitools.dosym("libnvidia-ml.so.%s" % version, "%s/libnvidia-ml.so.1" % libdir) + + pisitools.dolib("libnvidia-cfg.so.%s" % version, libdir) + pisitools.dosym("libnvidia-cfg.so.%s" % version, "%s/libnvidia-cfg.so.1" % libdir) + + + + # OpenGL core library and others + for lib in ("glcore", "tls", "encode", "fbc", "glsi", "ifr", "eglcore"): + pisitools.dolib("libnvidia-%s.so.%s" % (lib, version), libdir) + pisitools.dosym("libnvidia-%s.so.%s" % (lib, version), "%s/libnvidia-%s.so.1" %(libdir, lib)) + + # VDPAU driver + pisitools.dolib("libvdpau_nvidia.so.%s" % version, "%s/vdpau" % libdir) + pisitools.dosym("libvdpau_nvidia.so.%s" % version, "%s/libvdpau_nvidia.so" % libdir) + + # nvidia-tls library + pisitools.dolib("libnvidia-tls.so.%s" % version, libdir) + pisitools.dolib("tls/libnvidia-tls.so.%s" % version, "%s/tls" % libdir) + + # X modules + pisitools.dolib("nvidia_drv.so", "%s/modules/drivers" % xorglibdir) + pisitools.dolib("libglx.so.%s" % version, "%s" % nvlibdir) + pisitools.dosym("libglx.so.%s" % version, "%s/libglx.so.1" % nvlibdir) + pisitools.dosym("libglx.so.%s" % version, "%s/libglx.so" % nvlibdir) + pisitools.dolib("libglx.so.%s" % version, "%s/modules/extensions" % xorglibdir) + pisitools.dosym("libglx.so.%s" % version, "%s/modules/extensions/libglx.so.1" % xorglibdir) + + pisitools.dolib("libGLX_nvidia.so.%s" % version, libdir) + pisitools.dosym("libGLX_nvidia.so.%s" % version, "%s/libGLX_indirect.so.0" % libdir) + + # PTX JIT Compiler (Parallel Thread Execution (PTX) is a pseudo-assembly language for CUDA) + pisitools.dolib("libnvidia-ptxjitcompiler.so.%s" % version, libdir) + + # Fat (multiarchitecture) binary loader + pisitools.dolib("libnvidia-fatbinaryloader.so.%s" % version, libdir) + + pisitools.insinto("/usr/share/X11/xorg.conf.d", "nvidia-drm-outputclass.conf") + # pisitools.insinto("/usr/share/nvidia", "nvidia-application-profiles-367.27-rc") + # pisitools.insinto("/usr/share/nvidia", "nvidia-application-profiles-367.27-key-documentation") + #pisitools.insinto("/usr/share/pixmaps", "nvidia-settings.png") + + + # Exit time for emul32 build + if get.buildTYPE() == 'emul32': + pisitools.insinto(datadir, "ld.so.conf", "32bit-ld.so.conf") + return + + pisitools.insinto(datadir, "ld.so.conf") + pisitools.insinto(datadir, "XvMCConfig") + + # Documentation + docdir = "xorg-video-%s" % driver_dir_name + pisitools.dodoc("LICENSE", "NVIDIA_Changelog", "README.txt", destDir=docdir) + pisitools.dohtml("html/*", destDir=docdir) + + ### Note + # This package includes nvidia-setting and nvidia-xconfig binaries. However + # we have seperate packages for each of them. Nvidia provides tarballs for + # these binaries. Don't forget to update these package with each NVIDIA + # driver update. diff --git a/kernel/drivers/module-nvidia390/comar/package-emul32.py b/kernel/drivers/module-nvidia390/comar/package-emul32.py new file mode 100755 index 0000000000..055939ea6b --- /dev/null +++ b/kernel/drivers/module-nvidia390/comar/package-emul32.py @@ -0,0 +1,25 @@ +#!/usr/bin/python + +import os + +driver_dir_name = "nvidia390" +libdir = "/usr/lib32/%s" % driver_dir_name +datadir = "/usr/share/%s" % driver_dir_name + +def postInstall(fromVersion, fromRelease, toVersion, toRelease): + os.system(" /usr/sbin/alternatives \ + --install /usr/lib32/libGL.so.1.2.0 libGL-32bit %(libdir)s/libGL.so.1.2.0 50 \ + --slave /usr/lib32/xorg/modules/volatile xorg-modules-volatile-32bit %(libdir)s/modules" + % {"libdir": libdir, "datadir": datadir}) +# --slave /etc/ld.so.conf.d/10-nvidia-32bit.conf nvidia-ldsoconf-32bit %(datadir)s/32bit-ld.so.conf" + + # If this driver is in use, refresh links after installation. + if os.readlink("/etc/alternatives/libGL-32bit") == "%s/libGL.so.1.2.0" % libdir: + os.system("/usr/sbin/alternatives --set libGL-32bit %s/libGL.so.1.2.0" % libdir) + os.system("/sbin/ldconfig -X") + +def preRemove(): + # FIXME This is not needed when upgrading package; but pisi does not + # provide a way to learn operation type. + #os.system("/usr/sbin/alternatives --remove libGL-32bit %s/libGL.so.1.2.0" % libdir) + pass diff --git a/kernel/drivers/module-nvidia390/comar/package.py b/kernel/drivers/module-nvidia390/comar/package.py new file mode 100755 index 0000000000..c3fc7720e4 --- /dev/null +++ b/kernel/drivers/module-nvidia390/comar/package.py @@ -0,0 +1,26 @@ +#!/usr/bin/python + +import os + +driver_dir_name = "nvidia390" +libdir = "/usr/lib/%s" % driver_dir_name +datadir = "/usr/share/%s" % driver_dir_name + +def postInstall(fromVersion, fromRelease, toVersion, toRelease): + os.system(" /usr/sbin/alternatives \ + --install /usr/lib/libGL.so.1.2.0 libGL %(libdir)s/libGL.so.1.2.0 50 \ + --slave /usr/lib/xorg/modules/volatile xorg-modules-volatile %(libdir)s/modules" + % {"libdir": libdir, "datadir": datadir}) +# --slave /etc/X11/XvMCConfig XvMCConfig %(datadir)s/XvMCConfig \ +# --slave /etc/ld.so.conf.d/10-nvidia.conf nvidia-ldsoconf %(datadir)s/ld.so.conf" + + # If this driver is in use, refresh links after installation. + if os.readlink("/etc/alternatives/libGL") == "%s/libGL.so.1.2.0" % libdir: + os.system("/usr/sbin/alternatives --set libGL %s/libGL.so.1.2.0" % libdir) + os.system("/sbin/ldconfig -X") + +def preRemove(): + # FIXME This is not needed when upgrading package; but pisi does not + # provide a way to learn operation type. + #os.system("/usr/sbin/alternatives --remove libGL %s/libGL.so.1.2.0" % libdir) + pass diff --git a/kernel/drivers/module-nvidia390/files/NVIDIA-Linux-x86_64-390.87-kernel-4.19.patch b/kernel/drivers/module-nvidia390/files/NVIDIA-Linux-x86_64-390.87-kernel-4.19.patch new file mode 100755 index 0000000000..08bf281614 --- /dev/null +++ b/kernel/drivers/module-nvidia390/files/NVIDIA-Linux-x86_64-390.87-kernel-4.19.patch @@ -0,0 +1,50 @@ +diff -Nurp NVIDIA-Linux-x86_64-390.87.orig/kernel/nvidia-drm/nvidia-drm-connector.c NVIDIA-Linux-x86_64-390.87/kernel/nvidia-drm/nvidia-drm-connector.c +--- NVIDIA-Linux-x86_64-390.87.orig/kernel/nvidia-drm/nvidia-drm-connector.c 2018-08-22 03:55:29.000000000 +0300 ++++ NVIDIA-Linux-x86_64-390.87/kernel/nvidia-drm/nvidia-drm-connector.c 2018-11-09 19:46:54.625801192 +0200 +@@ -30,6 +30,8 @@ + #include "nvidia-drm-utils.h" + #include "nvidia-drm-encoder.h" + ++#include ++ + #include + + #include +@@ -226,8 +228,13 @@ static int nv_drm_connector_get_modes(st + + + if (nv_connector->edid != NULL) { ++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 19, 0) + drm_mode_connector_update_edid_property( + connector, nv_connector->edid); ++#else ++ drm_connector_update_edid_property( ++ connector, nv_connector->edid); ++#endif + } + + while (1) { +diff -Nurp NVIDIA-Linux-x86_64-390.87.orig/kernel/nvidia-drm/nvidia-drm-encoder.c NVIDIA-Linux-x86_64-390.87/kernel/nvidia-drm/nvidia-drm-encoder.c +--- NVIDIA-Linux-x86_64-390.87.orig/kernel/nvidia-drm/nvidia-drm-encoder.c 2018-08-22 03:55:29.000000000 +0300 ++++ NVIDIA-Linux-x86_64-390.87/kernel/nvidia-drm/nvidia-drm-encoder.c 2018-11-09 19:49:34.863861811 +0200 +@@ -30,6 +30,8 @@ + #include "nvidia-drm-connector.h" + #include "nvidia-drm-crtc.h" + ++#include ++ + #include + + #include +@@ -216,7 +218,11 @@ nv_drm_add_encoder(struct drm_device *de + + /* Attach encoder and connector */ + ++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 19, 0) + ret = drm_mode_connector_attach_encoder(connector, encoder); ++#else ++ ret = drm_connector_attach_encoder(connector, encoder); ++#endif + + if (ret != 0) { + NV_DRM_DEV_LOG_ERR( diff --git a/kernel/drivers/module-nvidia390/files/NVIDIA-Linux-x86_64-390.87-kernel-4.20.patch b/kernel/drivers/module-nvidia390/files/NVIDIA-Linux-x86_64-390.87-kernel-4.20.patch new file mode 100755 index 0000000000..7548fec4fa --- /dev/null +++ b/kernel/drivers/module-nvidia390/files/NVIDIA-Linux-x86_64-390.87-kernel-4.20.patch @@ -0,0 +1,43 @@ +--- a/kernel/nvidia/os-interface.c ++++ b/kernel/nvidia/os-interface.c +@@ -1670,7 +1670,7 @@ + + struct nv_ipmi_softc + { +- ipmi_user_t p_user; // ptr to ipmi_msghandler user structure ++ struct ipmi_user *p_user; + spinlock_t msg_lock; + struct list_head msgs; + NvU32 seqNum; //request sequence number +@@ -1679,7 +1679,7 @@ + static inline int + nv_ipmi_set_my_address + ( +- ipmi_user_t user, ++ struct ipmi_user *user, + unsigned char address + ) + { +--- a/kernel/nvidia-drm/nvidia-drm-gem-nvkms-memory.c ++++ b/kernel/nvidia-drm/nvidia-drm-gem-nvkms-memory.c +@@ -20,6 +20,8 @@ + * DEALINGS IN THE SOFTWARE. + */ + ++#include ++ + #include "nvidia-drm-conftest.h" + + #if defined(NV_DRM_ATOMIC_MODESET_AVAILABLE) +@@ -345,7 +347,11 @@ static int __nv_drm_vma_fault(struct vm_area_struct *vma, + + page_offset = vmf->pgoff - drm_vma_node_start(&gem->vma_node); + ++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 19, 0) + ret = vm_insert_pfn(vma, address, pfn + page_offset); ++#else ++ ret = vmf_insert_pfn(vma, address, pfn + page_offset); ++#endif + + switch (ret) { + case 0: diff --git a/kernel/drivers/module-nvidia390/files/linux-5.1.patch b/kernel/drivers/module-nvidia390/files/linux-5.1.patch new file mode 100755 index 0000000000..172ff48e9b --- /dev/null +++ b/kernel/drivers/module-nvidia390/files/linux-5.1.patch @@ -0,0 +1,130 @@ +diff --git a/kernel/common/inc/nv-list-helpers.h b/kernel/common/inc/nv-list-helpers.h +index 0aed851..d6304c9 100644 +--- a/kernel/common/inc/nv-list-helpers.h ++++ b/kernel/common/inc/nv-list-helpers.h +@@ -26,6 +26,8 @@ + #include + #include "conftest.h" + ++#include ++ + #if !defined (list_for_each) + #define list_for_each(pos, head) \ + for (pos = (head)->next; pos != (head); pos = (pos)->next) +@@ -91,10 +93,12 @@ + list_entry((pos)->member.next, typeof(*(pos)), member) + #endif + ++#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 1, 0) + static inline int list_is_first(const struct list_head *list, + const struct list_head *head) + { + return list->prev == head; + } ++#endif + + #endif // __NV_LIST_HELPERS_H__ +diff --git a/kernel/nvidia-drm/nvidia-drm-connector.c b/kernel/nvidia-drm/nvidia-drm-connector.c +index 24631c0..ba1497c 100644 +--- a/kernel/nvidia-drm/nvidia-drm-connector.c ++++ b/kernel/nvidia-drm/nvidia-drm-connector.c +@@ -30,7 +30,12 @@ + #include "nvidia-drm-utils.h" + #include "nvidia-drm-encoder.h" + ++#include ++#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 1, 0) + #include ++#else ++#include ++#endif + + #include + #include +diff --git a/kernel/nvidia-drm/nvidia-drm-drv.c b/kernel/nvidia-drm/nvidia-drm-drv.c +index 1c2db68..d524d51 100644 +--- a/kernel/nvidia-drm/nvidia-drm-drv.c ++++ b/kernel/nvidia-drm/nvidia-drm-drv.c +@@ -41,7 +41,12 @@ + + #include + ++#include ++#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 1, 0) + #include ++#else ++#include ++#endif + + #if defined(NV_DRM_DRM_GEM_H_PRESENT) + #include +diff --git a/kernel/nvidia-drm/nvidia-drm-encoder.c b/kernel/nvidia-drm/nvidia-drm-encoder.c +index f66bbd7..df38042 100644 +--- a/kernel/nvidia-drm/nvidia-drm-encoder.c ++++ b/kernel/nvidia-drm/nvidia-drm-encoder.c +@@ -31,7 +31,12 @@ + #include "nvidia-drm-crtc.h" + #include "nvidia-drm-helper.h" + ++#include ++#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 1, 0) + #include ++#else ++#include ++#endif + + #include + #include +diff --git a/kernel/nvidia-drm/nvidia-drm-gem-nvkms-memory.c b/kernel/nvidia-drm/nvidia-drm-gem-nvkms-memory.c +index 8636eff..fd0c8da 100644 +--- a/kernel/nvidia-drm/nvidia-drm-gem-nvkms-memory.c ++++ b/kernel/nvidia-drm/nvidia-drm-gem-nvkms-memory.c +@@ -29,6 +29,8 @@ + + #include "nv-mm.h" + ++#include ++ + static void __nv_drm_gem_nvkms_memory_free(struct nv_drm_gem_object *nv_gem) + { + struct nv_drm_device *nv_dev = nv_gem->nv_dev; +@@ -268,7 +270,11 @@ static int __nv_drm_vma_fault(struct vm_area_struct *vma, + */ + + #if defined(NV_VM_OPS_FAULT_REMOVED_VMA_ARG) ++#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 1, 0) + static int nv_drm_vma_fault(struct vm_fault *vmf) ++#else ++static vm_fault_t nv_drm_vma_fault(struct vm_fault *vmf) ++#endif + { + return __nv_drm_vma_fault(vmf->vma, vmf); + } +diff --git a/kernel/nvidia-uvm/uvm8.c b/kernel/nvidia-uvm/uvm8.c +index e00923d..2e01e3c 100644 +--- a/kernel/nvidia-uvm/uvm8.c ++++ b/kernel/nvidia-uvm/uvm8.c +@@ -172,7 +172,11 @@ static int uvm_vm_fault_sigbus(struct vm_area_struct *vma, struct vm_fault *vmf) + return VM_FAULT_SIGBUS; + } + ++#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 1, 0) + static int uvm_vm_fault_sigbus_wrapper(struct vm_fault *vmf) ++#else ++static vm_fault_t uvm_vm_fault_sigbus_wrapper(struct vm_fault *vmf) ++#endif + { + #if defined(NV_VM_OPS_FAULT_REMOVED_VMA_ARG) + return uvm_vm_fault_sigbus(vmf->vma, vmf); +@@ -507,7 +511,11 @@ convert_error: + } + } + ++#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 1, 0) + static int uvm_vm_fault_wrapper(struct vm_fault *vmf) ++#else ++static vm_fault_t uvm_vm_fault_wrapper(struct vm_fault *vmf) ++#endif + { + #if defined(NV_VM_OPS_FAULT_REMOVED_VMA_ARG) + return uvm_vm_fault(vmf->vma, vmf); diff --git a/kernel/drivers/module-nvidia390/files/modprobe.conf b/kernel/drivers/module-nvidia390/files/modprobe.conf new file mode 100755 index 0000000000..c9b9bfcf71 --- /dev/null +++ b/kernel/drivers/module-nvidia390/files/modprobe.conf @@ -0,0 +1,2 @@ +blacklist nouveau +options nouveau modeset=0 diff --git a/kernel/drivers/module-nvidia390/files/nvidia-settings.desktop b/kernel/drivers/module-nvidia390/files/nvidia-settings.desktop new file mode 100755 index 0000000000..f3dee42865 --- /dev/null +++ b/kernel/drivers/module-nvidia390/files/nvidia-settings.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Type=Application +Encoding=UTF-8 +Name=NVIDIA X Server Settings +Comment=Configure NVIDIA X Server Settings +Exec=/usr/bin/nvidia-settings +Icon=/usr/share/pixmaps/nvidia-settings.png +Categories=Application;Settings; + diff --git a/kernel/drivers/module-nvidia390/files/package-emul32.py b/kernel/drivers/module-nvidia390/files/package-emul32.py new file mode 100755 index 0000000000..bddedd08c4 --- /dev/null +++ b/kernel/drivers/module-nvidia390/files/package-emul32.py @@ -0,0 +1,25 @@ +#!/usr/bin/python + +import os + +driver_dir_name = "nvidia-current" +libdir = "/usr/lib32/%s" % driver_dir_name +datadir = "/usr/share/%s" % driver_dir_name + +def postInstall(fromVersion, fromRelease, toVersion, toRelease): + os.system(" /usr/sbin/alternatives \ + --install /usr/lib32/libGL.so.1.2.0 libGL-32bit %(libdir)s/libGL.so.1.2.0 50 \ + --slave /usr/lib32/xorg/modules/volatile xorg-modules-volatile-32bit %(libdir)s/modules" + % {"libdir": libdir, "datadir": datadir}) +# --slave /etc/ld.so.conf.d/10-nvidia-32bit.conf nvidia-ldsoconf-32bit %(datadir)s/32bit-ld.so.conf" + + # If this driver is in use, refresh links after installation. + if os.readlink("/etc/alternatives/libGL-32bit") == "%s/libGL.so.1.2.0" % libdir: + os.system("/usr/sbin/alternatives --set libGL-32bit %s/libGL.so.1.2.0" % libdir) + os.system("/sbin/ldconfig -X") + +def preRemove(): + # FIXME This is not needed when upgrading package; but pisi does not + # provide a way to learn operation type. + #os.system("/usr/sbin/alternatives --remove libGL-32bit %s/libGL.so.1.2.0" % libdir) + pass diff --git a/kernel/drivers/module-nvidia390/files/package.py b/kernel/drivers/module-nvidia390/files/package.py new file mode 100755 index 0000000000..71d446b906 --- /dev/null +++ b/kernel/drivers/module-nvidia390/files/package.py @@ -0,0 +1,26 @@ +#!/usr/bin/python + +import os + +driver_dir_name = "nvidia-current" +libdir = "/usr/lib/%s" % driver_dir_name +datadir = "/usr/share/%s" % driver_dir_name + +def postInstall(fromVersion, fromRelease, toVersion, toRelease): + os.system(" /usr/sbin/alternatives \ + --install /usr/lib/libGL.so.1.2.0 libGL %(libdir)s/libGL.so.1.2.0 50 \ + --slave /usr/lib/xorg/modules/volatile xorg-modules-volatile %(libdir)s/modules" + % {"libdir": libdir, "datadir": datadir}) +# --slave /etc/X11/XvMCConfig XvMCConfig %(datadir)s/XvMCConfig \ +# --slave /etc/ld.so.conf.d/10-nvidia.conf nvidia-ldsoconf %(datadir)s/ld.so.conf" + + # If this driver is in use, refresh links after installation. + if os.readlink("/etc/alternatives/libGL") == "%s/libGL.so.1.2.0" % libdir: + os.system("/usr/sbin/alternatives --set libGL %s/libGL.so.1.2.0" % libdir) + os.system("/sbin/ldconfig -X") + +def preRemove(): + # FIXME This is not needed when upgrading package; but pisi does not + # provide a way to learn operation type. + #os.system("/usr/sbin/alternatives --remove libGL %s/libGL.so.1.2.0" % libdir) + pass diff --git a/kernel/drivers/module-nvidia390/pspec.xml b/kernel/drivers/module-nvidia390/pspec.xml new file mode 100755 index 0000000000..9954037b64 --- /dev/null +++ b/kernel/drivers/module-nvidia390/pspec.xml @@ -0,0 +1,141 @@ + + + + + module-nvidia390t + http://www.nvidia.com + + Marcin Bojara + marcin@pisilinux.org + + NVIDIA + NVIDIA drivers for GeForce 6xxx and newer GPUs + NVIDIA graphics drivers provide optimized 2D/3D performance. + http://us.download.nvidia.com/XFree86/Linux-x86/390.132/NVIDIA-Linux-x86-390.132.run + http://us.download.nvidia.com/XFree86/Linux-x86_64/390.132/NVIDIA-Linux-x86_64-390.132.run + + kernel-module-headers + libX11-devel + gtk2-devel + gtk3-devel + + + + + module-nvidia390 + driver + Kernel module for current NVIDIA graphics driver releases + + kernel + + + + /lib/modules + /etc/modprobe.d + + + modprobe.conf + + + noDelta + + + + + + + nvidia-xconfig390 + app:console + hardware.graphics + Xconfig file for nvidia390 kernel driver + + module-nvidia-current + + + /usr/bin/nvidia-xconfig + /usr/share/man/man1/nvidia-xconfig.1 + + + + + xorg-video-nvidia390 + driver + x11.driver + + libXext + libX11 + mesa + xorg-server + module-nvidia390 + + + xorg-video-nvidia-current + xorg-video-nvidia304 + xorg-video-nvidia340 + + + /etc/OpenCL + /usr/bin + /usr/lib + /usr/share/X11 + /usr/share/nvidia-current + /usr/share/doc + /usr/share/man + + + System.Package + + + noDelta + + + + + xorg-video-nvidia390-32bit + emul32 + 32-bit shared libraries for xorg-video-nvidia390 + emul32 + + libvdpau-32bit + + + zlib-32bit + mesa-32bit + libX11-32bit + libXext-32bit + xorg-video-nvidia390 + atk + gtk2 + gtk3 + cairo + glib2 + pango + gdk-pixbuf + + + xorg-video-nvidia-current-32bit + xorg-video-nvidia304-32bit + xorg-video-nvidia340-32bit + + + /usr/lib32 + /usr/share/nvidia-current/32bit-ld.so.conf + + + System.Package + + + noDelta + + + + + + 2019-12-12 + 390.132 + First release + İdris Kalp + idriskalp@gmail.com + + + diff --git a/kernel/drivers/module-nvidia390/translations.xml b/kernel/drivers/module-nvidia390/translations.xml new file mode 100755 index 0000000000..28509a6e6d --- /dev/null +++ b/kernel/drivers/module-nvidia390/translations.xml @@ -0,0 +1,25 @@ + + + + module-nvidia-current + GeForce 6xxx ve daha yeni NVIDIA ekran kartları için sürücüler + NVIDIA grafik sürücüleri daha iyi 2B/3B başarımı sağlar. + Controladores de kernel nVIDIA y glx para rendimiento optimizado 2d/3d en Linux (Para NV3X o mejor). + Controladores nVIDIA de kernel y glx para tarjetas NV3 o mejor (Geforce FX o mejor) + + + + module-nvidia-current + Güncel NVIDIA grafik sürücüleri için çekirdek modülü + + + + xorg-video-nvidia-current + Güncel NVIDIA userspace sürücüleri ve ikili dosyaları + + + + xorg-video-nvidia-current-32bit + xorg-video-nvidia-current için 32-bit paylaşımlı kitaplıklar + + diff --git a/kernel/drivers/module-nvidia430/actions.py b/kernel/drivers/module-nvidia430/actions.py new file mode 100755 index 0000000000..b5a9cc2c5c --- /dev/null +++ b/kernel/drivers/module-nvidia430/actions.py @@ -0,0 +1,251 @@ +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import get +from pisi.actionsapi import autotools +from pisi.actionsapi import pisitools +from pisi.actionsapi import shelltools +from pisi.actionsapi import kerneltools + +WorkDir = "." +KDIR = kerneltools.getKernelVersion() +NoStrip = ["/lib/modules"] + +version = get.srcVERSION() +driver_dir_name = "nvidia430" +datadir = "/usr/share/%s" % driver_dir_name +libdir = "/usr/lib32" if get.buildTYPE() == 'emul32' else "/usr/lib" +arch = "x86" if get.buildTYPE() == 'emul32' else get.ARCH().replace("i6", "x") +nvlibdir = "%s/%s" % (libdir, driver_dir_name) +xorglibdir= "%s/xorg" % libdir + +def setup(): + shelltools.system("sh NVIDIA-Linux-x86_64-%s.run -x --target tmp" + % get.srcVERSION()) + shelltools.move("tmp/*", ".") + + #shelltools.system("patch -p1 < NVIDIA-Linux-x86_64-390.87-kernel-4.19.patch") + #shelltools.system("patch -p1 < NVIDIA-Linux-x86_64-390.87-kernel-4.20.patch") + + #shelltools.system("patch -p1 < header-fix.patch") + + # Our libc is TLS enabled so use TLS library + #shelltools.unlink("*-tls.so*") + #shelltools.move("tls/*", ".") + + # xorg-server provides libwfb.so + #shelltools.unlink("libnvidia-wfb.so.*") + + shelltools.echo("ld.so.conf", nvlibdir) + shelltools.echo("XvMCConfig", "%s/libXvMCNVIDIA.so" % nvlibdir) + +def build(): + # We don't need kernel module for emul32 build + if get.buildTYPE() == 'emul32': + return + + shelltools.export("SYSSRC", "/lib/modules/%s/build" % KDIR) + shelltools.cd("kernel") + autotools.make("module") + + +def install(): + + if not get.buildTYPE() == 'emul32': + # Kernel driver + pisitools.insinto("/lib/modules/%s/extra" % KDIR, + "kernel/nvidia.ko") + + pisitools.insinto("/lib/modules/%s/extra" % KDIR, + "kernel/nvidia-drm.ko") + + pisitools.insinto("/lib/modules/%s/extra" % KDIR, + "kernel/nvidia-uvm.ko") + + pisitools.insinto("/lib/modules/%s/extra" % KDIR, + "kernel/nvidia-modeset.ko") + + # Command line tools and their man pages + pisitools.dobin("nvidia-smi") + pisitools.doman("nvidia-smi.1.gz") + pisitools.dobin("nvidia-debugdump") + #pisitools.dobin("nvidia-xconfig") + #pisitools.doman("nvidia-xconfig.1.gz") + pisitools.dobin("nvidia-bug-report.sh") + pisitools.dobin("nvidia-cuda-mps-server") + pisitools.dobin("nvidia-cuda-mps-control") + pisitools.doman("nvidia-cuda-mps-control.1.gz") + pisitools.dobin("nvidia-modprobe") + pisitools.doman("nvidia-modprobe.1.gz") + pisitools.dobin("nvidia-persistenced") + pisitools.doman("nvidia-persistenced.1.gz") + #pisitools.dobin("nvidia-settings") + #pisitools.doman("nvidia-settings.1.gz") + + + ### Libraries + + # 32-bit libraries + if get.buildTYPE() == 'emul32': + pisitools.dolib("32/libGL.so.%s" % version, nvlibdir) + pisitools.dosym("libGL.so.%s" % version, "%s/libGL.so.1.2.0" % nvlibdir) + pisitools.dosym("libGL.so.%s" % version, "%s/libGL.so.1" % nvlibdir) + pisitools.dosym("libGL.so.%s" % version, "%s/libGL.so" % nvlibdir) + + pisitools.dolib("32/libEGL.so.1.1.0", nvlibdir) + pisitools.dosym("libEGL.so.1.1.0", "%s/libEGL.so.1" % nvlibdir) + pisitools.dosym("32/libEGL.so.1.1.0", "%s/libEGL.so" % nvlibdir) + pisitools.dolib("32/libEGL_nvidia.so.%s" % version, libdir) + pisitools.dolib("32/libGLESv1_CM_nvidia.so.%s" % version, libdir) + pisitools.dolib("32/libGLESv2_nvidia.so.%s" % version, libdir) + + pisitools.insinto("/etc/OpenCL/vendors", "nvidia.icd") + pisitools.dolib("32/libnvidia-compiler.so.%s" % version, libdir) + pisitools.dosym("libnvidia-compiler.so.%s" % version, "%s/libnvidia-compiler.so.1" % libdir) + pisitools.dosym("libnvidia-compiler.so.%s" % version, "%s/libnvidia-compiler.so" % libdir) + + #pisitools.dolib("32/libOpenCL.so.1.0.0", libdir) + #pisitools.dosym("libOpenCL.so.1.0.0", "%s/libOpenCL.so.1.0" % libdir) + #pisitools.dosym("libOpenCL.so.1.0", "%s/libOpenCL.so.1" % libdir) + #pisitools.dosym("libOpenCL.so.1.0", "%s/libOpenCL.so" % libdir) + + pisitools.dolib("32/libnvidia-opencl.so.%s" % version, libdir) + pisitools.dosym("libnvidia-opencl.so.%s" % version, "%s/libnvidia-opencl.so.1" % libdir) + pisitools.dosym("libnvidia-opencl.so.1", "%s/libnvidia-opencl.so" % libdir) + + pisitools.dolib("32/libcuda.so.%s" % version, libdir) + pisitools.dosym("libcuda.so.%s" % version, "%s/libcuda.so.1" % libdir) + pisitools.dosym("libcuda.so.1", "%s/libcuda.so" % libdir) + + pisitools.dolib("32/libnvcuvid.so.%s" % version, libdir) + pisitools.dosym("libnvcuvid.so.%s" % version, "%s/libnvcuvid.so.1" % libdir) + pisitools.dosym("libnvcuvid.so.1", "%s/libnvcuvid.so" % libdir) + + pisitools.dolib("32/libnvidia-ml.so.%s" % version, libdir) + pisitools.dosym("libnvidia-ml.so.%s" % version, "%s/libnvidia-ml.so.1" % libdir) + + for lib in ("eglcore", "encode", "fatbinaryloader", "fbc", "glcore", "glsi", \ + "glvkspirv", "ifr", "opticalflow", "ptxjitcompiler", "tls" ): + pisitools.dolib("32/libnvidia-%s.so.%s" % (lib, version), libdir) + pisitools.dosym("libnvidia-%s.so.%s" % (lib, version), "%s/libnvidia-%s.so.1" %(libdir, lib)) + pisitools.dosym("libnvidia-%s.so.%s" % (lib, version), "%s/libnvidia-%s.so" %(libdir, lib)) + + pisitools.dolib("32/libvdpau_nvidia.so.%s" % version, "%s/vdpau" % libdir) + pisitools.dosym("libvdpau_nvidia.so.%s" % version, "%s/libvdpau_nvidia.so" % libdir) + + + pisitools.dolib("32/libGLX_nvidia.so.%s" % version, libdir) + pisitools.dosym("libGLX_nvidia.so.%s" % version, "%s/libGLX_indirect.so.0" % libdir) + pisitools.dosym("libGLX_nvidia.so.%s" % version, "%s/libGLX_indirect.so" % libdir) + + else: + # OpenGl library + pisitools.dolib("libGL.so.%s" % version, nvlibdir) + pisitools.dosym("libGL.so.%s" % version, "%s/libGL.so.1.2.0" % nvlibdir) + pisitools.dosym("libGL.so.%s" % version, "%s/libGL.so.1" % nvlibdir) + pisitools.dosym("libGL.so.%s" % version, "%s/libGL.so" % nvlibdir) + + pisitools.dolib("libEGL.so.1.1.0", nvlibdir) + pisitools.dosym("libEGL.so.1.1.0", "%s/libEGL.so.1" % nvlibdir) + pisitools.dosym("libEGL.so.1.1.0", "%s/libEGL.so" % nvlibdir) + pisitools.dolib("libEGL_nvidia.so.%s" % version, libdir) + pisitools.dolib("libGLESv1_CM_nvidia.so.%s" % version, libdir) + pisitools.dolib("libGLESv2_nvidia.so.%s" % version, libdir) + + pisitools.dolib("libGLdispatch.so.0", libdir) + pisitools.dosym("libGLdispatch.so.0", "%s/libGLdispatch.so" % libdir) + + # OpenCL + pisitools.insinto("/etc/OpenCL/vendors", "nvidia.icd") + pisitools.dolib("libnvidia-compiler.so.%s" % version, libdir) + pisitools.dosym("libnvidia-compiler.so.%s" % version, "%s/libnvidia-compiler.so.1" % libdir) + pisitools.dosym("libnvidia-compiler.so.%s" % version, "%s/libnvidia-compiler.so" % libdir) + + #pisitools.dolib("libOpenCL.so.1.0.0", libdir) + #pisitools.dosym("libOpenCL.so.1.0.0", "%s/libOpenCL.so.1.0" % libdir) + #pisitools.dosym("libOpenCL.so.1.0", "%s/libOpenCL.so.1" % libdir) + #pisitools.dosym("libOpenCL.so.1.0", "%s/libOpenCL.so" % libdir) + + pisitools.dolib("libnvidia-opencl.so.%s" % version, libdir) + pisitools.dosym("libnvidia-opencl.so.%s" % version, "%s/libnvidia-opencl.so.1" % libdir) + pisitools.dosym("libnvidia-opencl.so.1", "%s/libnvidia-opencl.so" % libdir) + + # CUDA + pisitools.dolib("libcuda.so.%s" % version, libdir) + pisitools.dosym("libcuda.so.%s" % version, "%s/libcuda.so.1" % libdir) + pisitools.dosym("libcuda.so.1", "%s/libcuda.so" % libdir) + + pisitools.dolib("libnvcuvid.so.%s" % version, libdir) + pisitools.dosym("libnvcuvid.so.%s" % version, "%s/libnvcuvid.so.1" % libdir) + pisitools.dosym("libnvcuvid.so.1", "%s/libnvcuvid.so" % libdir) + + # NVML + # Provides programmatic access to static information and monitoring + # data for NVIDIA GPUs, as well as limited managment capabilities + pisitools.dolib("libnvidia-ml.so.%s" % version, libdir) + pisitools.dosym("libnvidia-ml.so.%s" % version, "%s/libnvidia-ml.so.1" % libdir) + + pisitools.dolib("libnvidia-cfg.so.%s" % version, libdir) + pisitools.dosym("libnvidia-cfg.so.%s" % version, "%s/libnvidia-cfg.so.1" % libdir) + + pisitools.dolib("libnvoptix.so.%s" % version, libdir) + pisitools.dosym("libnvoptix.so.%s" % version, "%s/libnvoptix.so.1" % libdir) + pisitools.dosym("libnvoptix.so.%s" % version, "%s/libnvoptix.so" % libdir) + + pisitools.dolib("libnvidia-egl-wayland.so.1.1.2", libdir) + pisitools.dosym("libnvidia-egl-wayland.so.1.1.2", "%s/libnvidia-egl-wayland.so.1" % libdir) + pisitools.dosym("libnvidia-egl-wayland.so.1.1.2", "%s/libnvidia-egl-wayland.so" % libdir) + + # OpenGL core library and others + for lib in ("cbl", "eglcore", "encode", "fatbinaryloader", "fbc", "glcore", "glsi", \ + "glvkspirv", "ifr", "opticalflow", "ptxjitcompiler", "rtcore", "tls" ): + pisitools.dolib("libnvidia-%s.so.%s" % (lib, version), libdir) + pisitools.dosym("libnvidia-%s.so.%s" % (lib, version), "%s/libnvidia-%s.so.1" %(libdir, lib)) + pisitools.dosym("libnvidia-%s.so.%s" % (lib, version), "%s/libnvidia-%s.so" %(libdir, lib)) + + # VDPAU driver + pisitools.dolib("libvdpau_nvidia.so.%s" % version, "%s/vdpau" % libdir) + pisitools.dosym("libvdpau_nvidia.so.%s" % version, "%s/libvdpau_nvidia.so" % libdir) + + # X modules + pisitools.dolib("nvidia_drv.so", "%s/modules/drivers" % xorglibdir) + pisitools.dolib("libglxserver_nvidia.so.%s" % version, "%s" % nvlibdir) + pisitools.dosym("libglxserver_nvidia.so.%s" % version, "%s/libglx.so.1" % nvlibdir) + pisitools.dosym("libglxserver_nvidia.so.%s" % version, "%s/libglx.so" % nvlibdir) + pisitools.dolib("libglxserver_nvidia.so.%s" % version, "%s/modules/extensions" % xorglibdir) + pisitools.dosym("libglxserver_nvidia.so.%s" % version, "%s/modules/extensions/libglx.so.1" % xorglibdir) + pisitools.dolib("libGLX_nvidia.so.%s" % version, libdir) + pisitools.dosym("libGLX_nvidia.so.%s" % version, "%s/libGLX_indirect.so.0" % libdir) + pisitools.dosym("libGLX_nvidia.so.%s" % version, "%s/libGLX_indirect.so" % libdir) + + pisitools.insinto("/usr/share/X11/xorg.conf.d", "nvidia-drm-outputclass.conf") + # pisitools.insinto("/usr/share/nvidia", "nvidia-application-profiles-367.27-rc") + # pisitools.insinto("/usr/share/nvidia", "nvidia-application-profiles-367.27-key-documentation") + #pisitools.insinto("/usr/share/pixmaps", "nvidia-settings.png") + + #pisitools.dolib("libnvidia-gtk2.so.%s" % version, libdir) + #pisitools.dolib("libnvidia-gtk3.so.%s" % version, libdir) + + + + + # Exit time for emul32 build + #if get.buildTYPE() == 'emul32': + #pisitools.insinto(datadir, "ld.so.conf", "32bit-ld.so.conf") + #return + + pisitools.insinto(datadir, "ld.so.conf") + pisitools.insinto(datadir, "XvMCConfig") + + # Documentation + docdir = "xorg-video-%s" % driver_dir_name + pisitools.dodoc("LICENSE", "NVIDIA_Changelog", "README.txt", destDir=docdir) + pisitools.dohtml("html/*", destDir=docdir) + + ### Note + # This package includes nvidia-setting and nvidia-xconfig binaries. However + # we have seperate packages for each of them. Nvidia provides tarballs for + # these binaries. Don't forget to update these package with each NVIDIA + # driver update. diff --git a/kernel/drivers/module-nvidia430/comar/package-emul32.py b/kernel/drivers/module-nvidia430/comar/package-emul32.py new file mode 100755 index 0000000000..bddedd08c4 --- /dev/null +++ b/kernel/drivers/module-nvidia430/comar/package-emul32.py @@ -0,0 +1,25 @@ +#!/usr/bin/python + +import os + +driver_dir_name = "nvidia-current" +libdir = "/usr/lib32/%s" % driver_dir_name +datadir = "/usr/share/%s" % driver_dir_name + +def postInstall(fromVersion, fromRelease, toVersion, toRelease): + os.system(" /usr/sbin/alternatives \ + --install /usr/lib32/libGL.so.1.2.0 libGL-32bit %(libdir)s/libGL.so.1.2.0 50 \ + --slave /usr/lib32/xorg/modules/volatile xorg-modules-volatile-32bit %(libdir)s/modules" + % {"libdir": libdir, "datadir": datadir}) +# --slave /etc/ld.so.conf.d/10-nvidia-32bit.conf nvidia-ldsoconf-32bit %(datadir)s/32bit-ld.so.conf" + + # If this driver is in use, refresh links after installation. + if os.readlink("/etc/alternatives/libGL-32bit") == "%s/libGL.so.1.2.0" % libdir: + os.system("/usr/sbin/alternatives --set libGL-32bit %s/libGL.so.1.2.0" % libdir) + os.system("/sbin/ldconfig -X") + +def preRemove(): + # FIXME This is not needed when upgrading package; but pisi does not + # provide a way to learn operation type. + #os.system("/usr/sbin/alternatives --remove libGL-32bit %s/libGL.so.1.2.0" % libdir) + pass diff --git a/kernel/drivers/module-nvidia430/comar/package.py b/kernel/drivers/module-nvidia430/comar/package.py new file mode 100755 index 0000000000..71d446b906 --- /dev/null +++ b/kernel/drivers/module-nvidia430/comar/package.py @@ -0,0 +1,26 @@ +#!/usr/bin/python + +import os + +driver_dir_name = "nvidia-current" +libdir = "/usr/lib/%s" % driver_dir_name +datadir = "/usr/share/%s" % driver_dir_name + +def postInstall(fromVersion, fromRelease, toVersion, toRelease): + os.system(" /usr/sbin/alternatives \ + --install /usr/lib/libGL.so.1.2.0 libGL %(libdir)s/libGL.so.1.2.0 50 \ + --slave /usr/lib/xorg/modules/volatile xorg-modules-volatile %(libdir)s/modules" + % {"libdir": libdir, "datadir": datadir}) +# --slave /etc/X11/XvMCConfig XvMCConfig %(datadir)s/XvMCConfig \ +# --slave /etc/ld.so.conf.d/10-nvidia.conf nvidia-ldsoconf %(datadir)s/ld.so.conf" + + # If this driver is in use, refresh links after installation. + if os.readlink("/etc/alternatives/libGL") == "%s/libGL.so.1.2.0" % libdir: + os.system("/usr/sbin/alternatives --set libGL %s/libGL.so.1.2.0" % libdir) + os.system("/sbin/ldconfig -X") + +def preRemove(): + # FIXME This is not needed when upgrading package; but pisi does not + # provide a way to learn operation type. + #os.system("/usr/sbin/alternatives --remove libGL %s/libGL.so.1.2.0" % libdir) + pass diff --git a/kernel/drivers/module-nvidia430/files/modprobe.conf b/kernel/drivers/module-nvidia430/files/modprobe.conf new file mode 100755 index 0000000000..c9b9bfcf71 --- /dev/null +++ b/kernel/drivers/module-nvidia430/files/modprobe.conf @@ -0,0 +1,2 @@ +blacklist nouveau +options nouveau modeset=0 diff --git a/kernel/drivers/module-nvidia430/pspec.xml b/kernel/drivers/module-nvidia430/pspec.xml new file mode 100755 index 0000000000..27b499fb2b --- /dev/null +++ b/kernel/drivers/module-nvidia430/pspec.xml @@ -0,0 +1,177 @@ + + + + + module-nvidia430 + http://www.nvidia.com + + Marcin Bojara + marcin@pisilinux.org + + NVIDIA + NVIDIA drivers for GeForce 6xxx and newer GPUs + NVIDIA graphics drivers provide optimized 2D/3D performance. + http://http.download.nvidia.com/XFree86/Linux-x86_64/430.64/NVIDIA-Linux-x86_64-430.64.run + + kernel-module-headers + libX11-devel + gtk2-devel + gtk3-devel + + + + + + + + module-nvidia430 + driver + Kernel module for current NVIDIA graphics driver releases + + kernel + + + + /lib/modules + /etc/modprobe.d + + + modprobe.conf + + + noDelta + + + + + + + + + xorg-video-nvidia430 + driver + x11.driver + + libXext + libX11 + mesa + xorg-server + opencl-icd + vulkan + module-nvidia430 + + + /etc/OpenCL + /usr/bin + /usr/lib + /usr/share/X11 + /usr/share/nvidia430 + /usr/share/doc + /usr/share/man + + + System.Package + + + noDelta + + + + + xorg-video-nvidia430-32bit + emul32 + 32-bit shared libraries for xorg-video-nvidia430 + emul32 + + libvdpau-32bit + + + zlib-32bit + mesa-32bit + libX11-32bit + libXext-32bit + opencl-icd-32bit + vulkan-32bit + xorg-video-nvidia430 + atk + gtk2 + gtk3 + cairo + glib2 + pango + gdk-pixbuf + + + /usr/lib32 + /usr/share/nvidia430/32bit-ld.so.conf + + + System.Package + + + noDelta + + + + + + 2019-11-03 + 430.64 + First release + İdris Kalp + idriskalp@gmail.com + + + diff --git a/kernel/drivers/module-nvidia430/translations.xml b/kernel/drivers/module-nvidia430/translations.xml new file mode 100755 index 0000000000..dec069b65a --- /dev/null +++ b/kernel/drivers/module-nvidia430/translations.xml @@ -0,0 +1,25 @@ + + + + module-nvidia430 + GeForce 6xxx ve daha yeni NVIDIA ekran kartları için sürücüler + NVIDIA grafik sürücüleri daha iyi 2B/3B başarımı sağlar. + Controladores de kernel nVIDIA y glx para rendimiento optimizado 2d/3d en Linux (Para NV3X o mejor). + Controladores nVIDIA de kernel y glx para tarjetas NV3 o mejor (Geforce FX o mejor) + + + + module-nvidia430 + Güncel NVIDIA grafik sürücüleri için çekirdek modülü + + + + xorg-video-nvidia430 + Güncel NVIDIA userspace sürücüleri ve ikili dosyaları + + + + xorg-video-nvidia430-32bit + xorg-video-nvidia-current için 32-bit paylaşımlı kitaplıklar + +