Video-nvidia-470xx fails on kernel 6.0

I have a Lenovo laptop with Intel iGPU + NVIDIA 730M dGPU. I use Optimus Manager to switch between the two. The latest compatible driver for my dGPU is 470xx. Switching to the NVIDIA GPU fails on kernel 6.0 with error:

[   33.460373] nvidia: module license 'NVIDIA' taints kernel.
[   33.460377] Disabling lock debugging due to kernel taint
[   33.767109] nvidia-nvlink: Nvlink Core is being initialized, major device number 511
[   33.767495] nvidia 0000:02:00.0: enabling device (0000 -> 0003)
[   33.767550] nvidia 0000:02:00.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=none:owns=none
[   33.884242] NVRM: loading NVIDIA UNIX x86_64 Kernel Module  470.141.03  Thu Jun 30 18:45:31 UTC 2022
[   33.959628] nvidia-modeset: Loading NVIDIA Kernel Mode Setting Driver for UNIX platforms  470.141.03  Thu Jun 30 18:34:41 UTC 2022
[   34.020634] [drm] [nvidia-drm] [GPU ID 0x00000200] Loading driver
[   34.036003] NVRM: GPU 0000:02:00.0: Failed to copy vbios to system memory.
[   34.036131] NVRM: GPU 0000:02:00.0: RmInitAdapter failed! (0x30:0xffff:874)
[   34.036162] NVRM: GPU 0000:02:00.0: rm_init_adapter failed, device minor number 0
[   34.036233] [drm:nv_drm_load [nvidia_drm]] *ERROR* [nvidia-drm] [GPU ID 0x00000200] Failed to allocate NvKmsKapiDevice
[   34.036349] [drm:nv_drm_probe_devices [nvidia_drm]] *ERROR* [nvidia-drm] [GPU ID 0x00000200] Failed to register device
[   34.143445] NVRM: GPU 0000:02:00.0: Failed to copy vbios to system memory.
[   34.143556] NVRM: GPU 0000:02:00.0: RmInitAdapter failed! (0x30:0xffff:874)
[   34.143604] NVRM: GPU 0000:02:00.0: rm_init_adapter failed, device minor number 0
[   34.262159] NVRM: GPU 0000:02:00.0: Failed to copy vbios to system memory.
[   34.262265] NVRM: GPU 0000:02:00.0: RmInitAdapter failed! (0x30:0xffff:874)
[   34.262303] NVRM: GPU 0000:02:00.0: rm_init_adapter failed, device minor number 0
...

Rebooting to kernel 5.19 and switching to the NVIDIA GPU works as expected.
I think the relevant error is Failed to copy vbios to system memory. I found a few occurrences of the same error on various forums, they suggested adding a couple of kernel parameters, but in my case it didn’t help.

# mhwd -li -d
   NAME:	video-nvidia-470xx
   ATTACHED:	PCI
   VERSION:	2021.11.04
   INFO:	Closed source NVIDIA drivers for linux.
   PRIORITY:	4
   FREEDRIVER:	false
   DEPENDS:	-
   CONFLICTS:	video*nvidia* 
   CLASSIDS:	0300 0302 
   VENDORIDS:	10de 

These are the packages that are installed by the mhwd -f -i pci video-nvidia-470xx command:

egl-wayland-2:1.1.11-2
eglexternalplatform-1.1-2
libxnvctrl-470xx-470.141.03-1
lib32-nvidia-470xx-utils-470.141.03-1
linux515-nvidia-470xx-470.141.03-15
linux519-nvidia-470xx-470.141.03-20
linux60-nvidia-470xx-470.141.03-1
nvidia-470xx-utils-470.141.03-1

It should be fixed with nvidia-utils 470.141.03-2 coming along shortly.

3 Likes

can you go in Testing branch ?

I switched to the testing branch, ran pacman -Syyu and mhwd -f -i pci video-nvidia-470xx, rebooted and tried switching to dGPU, but I still have the same error.

To make it explicit: the currently installed version is nvidia-470xx-utils-470.141.03-2.

same message logs error ?

maybe coming from optimus manager then
@philm

Same error. I doubt it’s Optimus Manager though, that’s the dmesg output for the nvidia module loading. Kernel 5.19 works fine.

470.141.03-2 uses the patch referenced here kernel-6.0.patch but failed to apply the last changeset

--- a/nvidia/nv.c
+++ b/nvidia/nv.c
@@ -5423,7 +5423,8 @@ NvBool NV_API_CALL nv_s2idle_pm_configured(void)
 {
     NvU8 buf[8];
 
-#if defined(NV_SEQ_READ_ITER_PRESENT)
+// FIXME: Avoid this code path because on Linux 6.0-rc1, init_sync_kiocb references a GPL symbol
+#if defined(NV_SEQ_READ_ITER_PRESENT) && (LINUX_VERSION_CODE < KERNEL_VERSION(6, 0, 0))
     struct file *file;
     ssize_t num_read;
     struct kiocb kiocb;
-- 

thus preventing the module to be compiled.
You can either make the change by hand or wait for the next release.
On my laptop, the backlight is broken with kernel 6.0 - I tried all available switches.

Please create an issue with your proposed change. See Sending a PR to manjaro gitlab from github

See 470xx drivers and linux 6.0 kernel - #7 by SoftExpert - Linux - NVIDIA Developer Forums

:smile: Well, it seems I became famous quickly - 470xx drivers and linux 6.0 kernel - post #7 is mine…
It did pay up to read carefully Backlight - ArchWiki page.
I am not sure how to create the pull request, because the nvidia-470xx-dkms AUR page has a git link towards nvidia-470xx-utils, but I created an issue on the GitLab (issue #2)

I don’t know if 470.141.03-3 already incorporates the proposed fix, but I upgraded to that version and I still have the same issue.

EDIT: Apparently 470.141.03-3 should be already patched.

470.141.03-3 has the complete patch applied; it has been released following the opening of the issue #2.
If it not builds maybe you need to re-install the targeted kernel package, to force a complete DKMS rebuild for it, with fresh headers.
Just do this while running on another kernel (you know, don’t cut the branch you sit on …).

I’ve already run sudo mhwd -f -i pci video-nvidia-470xx, which reinstalled the following packages:

egl-wayland-2:1.1.11-2
eglexternalplatform-1.1-2
libxnvctrl-470xx-470.141.03-1
lib32-nvidia-470xx-utils-470.141.03-1
linux515-nvidia-470xx-470.141.03-15
linux519-nvidia-470xx-470.141.03-20
linux60-nvidia-470xx-470.141.03-1
nvidia-470xx-utils-470.141.03-3

and rebooted.

Am I supposed to do anything else?

I don’t see anything related to DKMS in your list.
Have you installed nvidia-470xx-dkms ?
It’s this package that is responsible for rebuilding nvidia modules when your kernel is upgraded.

He has the pre-compiled module installed instead:

The only difference is the pre-compiled module is still using the 5.19 patch which isn’t necessary anymore. I’ve just rebuilt linux60-nvidia-470xxwithout it and pushed 470.141.03-3 to unstable and 470.141.03-2.1 to testing and stable.

1 Like

I installed linux60-headers and nvidia-470xx-dkms. I rebooted to kernel 6, but I have the same error. Also, now the mhwd -f -i pci video-nvidia-470xx command gives:

Warning: no matching device for config 'video-nvidia-470xx' found!
> Removing video-nvidia-470xx...
Sourcing /etc/mhwd-x86_64.conf
Has lib32 support: true
Sourcing /var/lib/mhwd/local/pci/video-nvidia-470xx/MHWDCONFIG
Processing classid: 0300
Sourcing /var/lib/mhwd/scripts/include/0300
Processing classid: 0302
checking dependencies...
error: failed to prepare transaction (could not satisfy dependencies)
:: removing nvidia-470xx-utils breaks dependency 'nvidia-470xx-utils=470.141.03' required by nvidia-470xx-dkms
Error: pacman failed!
Error: script failed!

I’ve never had to build the nvidia module for previous kernels anyway. Why should I do that now?

You still don’t. Wait for the 470.141.03-2.1 update to linux60-nvidia-470xx.

The NVIDIA DKMS packages are not included in the MHWD script. If you’ve used MHWD before to install drivers, just install the NVIDIA DKMS package like any other package. If you want to use MHWD again, install the pre-compiled module again.

1 Like

I uninstalled nvidia-470xx-dkms and updated linux60-nvidia-470xx to 470.141.03-2.1. Same error.
I switched to the unstable branch and updated the system (470.141.03-3 is installed). Same error.
linux519-nvidia-470xx 470.141.03-21 on kernel 5.19 works fine.

Well, stick with 5.19 for now, then. Sometimes there are issues with new kernels that are resolved within the first few point releases.

I’m a little confused with this thread. The error explains the issue why the driver is not working on 6.0. Simply based on License issues with kernel modules. If you look at the patch what gets disabled it is clear: kernel-6.0.patch · master · Packages / Extra / linux60-extramodules / nvidia-470xx · GitLab So we have to wait for Nvidia to adjust their driver to match the changes due to GPL exports.

2 Likes

I also use Optimus Manger. I found out that basically there is no need for me to go into Nvidia mode when I can use Hybrid Mode. It works just fine on kernel 6.0.