Package Details: opencl-nvidia-390xx 390.157-13

Git Clone URL: https://aur.archlinux.org/nvidia-390xx-utils.git (read-only, click to copy)
Package Base: nvidia-390xx-utils
Description: OpenCL implemention for NVIDIA
Upstream URL: https://www.nvidia.com/
Licenses: custom
Conflicts: opencl-nvidia
Provides: opencl-driver, opencl-nvidia
Submitter: svenstaro
Maintainer: jonathon (vnctdj)
Last Packager: vnctdj
Votes: 61
Popularity: 3.45
First Submitted: 2020-03-11 17:29 (UTC)
Last Updated: 2024-11-25 23:34 (UTC)

Dependencies (2)

Required by (67)

Sources (16)

Pinned Comments

jonathon commented on 2022-05-26 09:46 (UTC)

Please don't flag this package out-of-date unless a new version has been released by NVIDIA.

jonathon commented on 2021-12-26 22:44 (UTC) (edited on 2021-12-26 22:44 (UTC) by jonathon)

The DKMS package guidelines are explicit that linux-headers should not be a dependency of any DKMS package.

As a concrete example of why including that as a hard dependency is a bad idea, what happens when linux is not an installed kernel?

jonathon commented on 2020-10-19 12:41 (UTC) (edited on 2021-05-11 14:18 (UTC) by jonathon)

PACKAGE NEEDS LONG TERM MAINTAINER

I have adopted the 390xx packages to keep them secure. I do not run any 390xx hardware so will not notice any breakages and cannot test any changes.

Until such time as someone else steps up to maintain these packages - ideally someone who actually has 390xx hardware - I have to rely on you to tell me what changes are needed.

Don't expect a response if you post only "this doesn't work", and do not email me to complain about the package not working!

Use this forum thread for discussion: https://bbs.archlinux.org/viewtopic.php?pid=1946926

A binary package is also available in my kernel-lts unofficial user repository.

Latest Comments

« First ‹ Previous 1 2 3 4 5 6 7 .. 27 Next › Last »

drankinatty commented on 2024-11-24 01:39 (UTC) (edited on 2024-11-24 20:41 (UTC) by drankinatty)

Well, crap, 6.12 is here and I'm about to roll the dice. We will see if a patch is needed.

Uugh -- driver broke, it will need a patch. We will consult /var/lib/dkms/nvidia/390.157/build/make.log and go from there....

Success -- Patch 2 based on 470 driver

390xx driver patch needed a bit more than first attempt:

diff -ruNb a/kernel/nvidia-drm/nvidia-drm-drv.c b/kernel/nvidia-drm/nvidia-drm-drv.c
--- a/kernel/nvidia-drm/nvidia-drm-drv.c    2024-07-19 05:21:27.848184261 -0500
+++ b/kernel/nvidia-drm/nvidia-drm-drv.c    2024-11-24 03:10:09.342147481 -0600
@@ -84,6 +84,11 @@
 #include <drm/drm_atomic_helper.h>
 #endif

+#include <linux/version.h>
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 12, 0)
+#include <drm/drm_client.h>
+#endif
+
 static struct nv_drm_device *dev_list = NULL;

 #if defined(NV_DRM_ATOMIC_MODESET_AVAILABLE)
@@ -168,7 +173,12 @@
     .atomic_check  = nv_drm_atomic_check,
     .atomic_commit = nv_drm_atomic_commit,

+#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 12, 0)
+    // Rel. commit. "drm: Remove struct drm_mode_config_funcs.output_poll_changed" (Thomas Zimmermann, 12 Aug 2024)
+    // Replace this callback with a DRM client's hotplug callback.
+    // This is required for e.g. /sys/class/drm/card*/modes to work.
     .output_poll_changed = nv_drm_output_poll_changed,
+#endif
 };

 static void nv_drm_event_callback(const struct NvKmsKapiEvent *event)
@@ -652,6 +662,10 @@
     .read           = drm_read,

     .llseek         = noop_llseek,
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 12, 0)
+    // Rel. commit. "fs: move FMODE_UNSIGNED_OFFSET to fop_flags" (Christian Brauner, 9 Aug 2024)
+    .fop_flags      = FOP_UNSIGNED_OFFSET,
+#endif
 };

 #if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 8, 0)
@@ -790,7 +804,18 @@
 #endif /* NV_DRM_ATOMIC_MODESET_AVAILABLE */
 }

+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 12, 0)
+static int hotplug_helper_client_hotplug(struct drm_client_dev *client)
+{
+    nv_drm_output_poll_changed(client->dev);
+    return 0;
+}

+static const struct drm_client_funcs nv_hotplug_helper_client_funcs = {
+    .owner      = THIS_MODULE,
+    .hotplug    = hotplug_helper_client_hotplug,
+};
+#endif

 /*
  * Helper function for allocate/register DRM device for given NVIDIA GPU ID.
@@ -844,6 +869,20 @@
         goto failed_drm_register;
     }

+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 12, 0)
+    /* Register a DRM client for receiving hotplug events */
+    struct drm_client_dev *client = kzalloc(sizeof(*client), GFP_KERNEL);
+    if (client == NULL || drm_client_init(dev, client,
+        "nv-hotplug-helper", &nv_hotplug_helper_client_funcs)) {
+        printk(KERN_WARNING "Failed to initialize the nv-hotplug-helper DRM client"
+            " (ensure DRM kernel mode setting is enabled via nvidia-drm.modeset=1).\n");
+        goto failed_drm_client_init;
+    }
+
+    drm_client_register(client);
+    pr_info("Registered the nv-hotplug-helper DRM client.\n");
+#endif
+
     /* Add NVIDIA-DRM device into list */

     nv_dev->next = dev_list;
@@ -851,6 +890,14 @@

     return; /* Success */

+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 12, 0)
+failed_drm_client_init:
+
+    kfree(client);
+    drm_dev_unregister(dev);
+
+#endif
+
 failed_drm_register:

     nv_drm_dev_free(dev);

Apply in PKGBUILD as:

    # Adapted from https://gist.github.com/joanbm/a6d3f7f873a60dec0aa4a734c0f1d64e
    printf "\n** kernel-6.12 patch**\n\n"
    patch -Np1 -i ../kernel-6.12.patch

below the kernel-6.10.patch block.

This patch is a rewrite based on Joan Bruguera's 470 Driver patch Tested and working fine.

Good until 6.13 :)

drankinatty commented on 2024-09-27 00:52 (UTC) (edited on 2024-10-01 23:57 (UTC) by drankinatty)

Thank goodness for small favors! I've been following the Arch 6.11 open-driver issues and was hoping that would not impact the closed source drivers as well. The only worrying part was the change to the fbdev header. But I look forward to the release and test -- and success :)

Update - openSUSE Tumbleweed just went to the 6.11 kernel and the 390xx driver built and functions without change from the 6.10 kernel. Thankfully!

Update 2 - Arch just released the 6.11 kernel, and the 390xx driver works fine without any patching needed. Next challenge will be the 6.12 kernel.

canolucas commented on 2024-09-21 01:03 (UTC) (edited on 2024-09-21 01:06 (UTC) by canolucas)

ok so it looks like linux 3.11 hit the testing repo.. i'll give it a try a.. hopefully everything works fine after reboot.. fingers crossed

UPDATE: everything worked fine, looks like linux 3.11 is compatible with the current version of this driver, so apparently no patching is needed this time..

drankinatty commented on 2024-09-16 18:09 (UTC) (edited on 2024-09-19 20:49 (UTC) by drankinatty)

6.11 kernel was released, time to start the patch scramble. I'll start looking, but if anybody has one already, please post a link here :) Nothing in the herecura repo yet. Indications are a patch will be needed Fedora Nvidia 470 driver issue with 6.11

Well after a few days of scouring for information, I'm cautiously optimistic that the driver may build without modification on the 6.11 kernel. The Fedora problem is a runtime problem, not a build issue, The AUR package for the 470xx driver is building on 6.11rc7 without changes. However it is impossible to draw a conclusion from the "absence of information" surrounding whether a patch is needed or not. At this point, I'll just have to wait for the 6.11 package to appear in the main repo to find out.

If anybody has different information, please post here -- loudly :)

ventureo commented on 2024-09-07 12:15 (UTC)

Hi. In CachyOS we have patches to fix the 390.xx driver module build for kernels built with Clang, and it would be nice if you could include them in the AUR package as well, as this may be relevant for other kernels too.

https://github.com/CachyOS/CachyOS-PKGBUILDS/blob/master/nvidia/nvidia-390xx-utils/clang.patch

duht commented on 2024-07-24 08:23 (UTC)

I can confirm: package works like a charm with 6.10-zen. Thanks drankinatty and vnctdj.

vnctdj commented on 2024-07-20 22:28 (UTC) (edited on 2024-07-20 22:28 (UTC) by vnctdj)

I've added kernel 6.10 patch given that canolucas confirmed it works, thanks drankinatty!

But please don't flag the package as out-of-date, it's useless since Nvidia stopped releasing new versions... And I'm subscribed to the mailing list, I always read all of your messages :)

duht commented on 2024-07-20 12:07 (UTC)

@vnctdj thank you for adding fix- now everything works fine.
@drankinatty great job with this 6.10 patch!!

canolucas commented on 2024-07-20 01:45 (UTC) (edited on 2024-07-20 01:48 (UTC) by canolucas)

The patch from @drankinatty is working fine here as well. Linux 6.10 boots just fine. Also run some games to stress test the GPU for a while. Everything looks fine so far. Thanks @drankinatty for the patch !

drankinatty commented on 2024-07-19 10:34 (UTC) (edited on 2024-07-19 20:15 (UTC) by drankinatty)

Updated - original was the 535 patch -- the edit below is the 390xx rewrite

Okay, I have the patch, rewritten from the Herecura 535 patch for 390xx, nvidia-390xx-utils built, 6.10 kernel installed -- and it works like a champ.

The patch

diff -ruNb a/kernel/conftest.sh b/kernel/conftest.sh
--- a/kernel/conftest.sh        2024-07-19 04:36:26.183701185 -0500
+++ b/kernel/conftest.sh        2024-07-19 04:36:26.230366381 -0500
@@ -4464,20 +4464,22 @@
             compile_check_conftest "$CODE" "NV_DRM_GEM_OBJECT_VMAP_HAS_MAP_ARG" "" "types"
         ;;

-        unsafe_follow_pfn)
+        follow_pfn)
             #
-            # Determine if unsafe_follow_pfn() is present.
+            # Determine if follow_pfn() is present.
             #
-            # unsafe_follow_pfn() was added by commit 69bacee7f9ad
-            # ("mm: Add unsafe_follow_pfn") in v5.13-rc1.
+            # follow_pfn() was added by commit 3b6748e2dd69
+            # ("mm: introduce follow_pfn()") in v2.6.31-rc1, and removed
+            # by commit 233eb0bf3b94 ("mm: remove follow_pfn")
+            # from linux-next 233eb0bf3b94.
             #
             CODE="
             #include <linux/mm.h>
-            void conftest_unsafe_follow_pfn(void) {
-                unsafe_follow_pfn();
+            void conftest_follow_pfn(void) {
+                follow_pfn();
             }"

-            compile_check_conftest "$CODE" "NV_UNSAFE_FOLLOW_PFN_PRESENT" "" "functions"
+            compile_check_conftest "$CODE" "NV_FOLLOW_PFN_PRESENT" "" "functions"
         ;;

         drm_plane_atomic_check_has_atomic_state_arg)
diff -ruNb a/kernel/nvidia/nvidia.Kbuild b/kernel/nvidia/nvidia.Kbuild
--- a/kernel/nvidia/nvidia.Kbuild       2022-10-12 04:29:57.000000000 -0500
+++ b/kernel/nvidia/nvidia.Kbuild       2024-07-19 05:17:39.148448922 -0500
@@ -165,7 +165,7 @@
 NV_CONFTEST_FUNCTION_COMPILE_TESTS += ktime_get_real_ts64
 NV_CONFTEST_FUNCTION_COMPILE_TESTS += ioremap_nocache
 NV_CONFTEST_FUNCTION_COMPILE_TESTS += vga_tryget
-NV_CONFTEST_FUNCTION_COMPILE_TESTS += unsafe_follow_pfn
+NV_CONFTEST_FUNCTION_COMPILE_TESTS += follow_pfn
 NV_CONFTEST_FUNCTION_COMPILE_TESTS += acpi_bus_get_device
 NV_CONFTEST_FUNCTION_COMPILE_TESTS += acpi_video_backlight_use_native

diff -ruNb a/kernel/nvidia/os-mlock.c b/kernel/nvidia/os-mlock.c
--- a/kernel/nvidia/os-mlock.c  2022-10-12 04:30:26.000000000 -0500
+++ b/kernel/nvidia/os-mlock.c  2024-07-19 04:36:26.230366381 -0500
@@ -18,10 +18,10 @@
                                 unsigned long address,
                                 unsigned long *pfn)
 {
-#if defined(NV_UNSAFE_FOLLOW_PFN_PRESENT)
-    return unsafe_follow_pfn(vma, address, pfn);
-#else
+#if defined(NV_FOLLOW_PFN_PRESENT)
     return follow_pfn(vma, address, pfn);
+#else
+    return -1;
 #endif
 }

Give it a shot.