Xorg slowness, freezing and crashing with external monitor, Thinkpad w/ Optimus (GM107GLM [Quadro M2000M])

So I tried using the downgrade tool that Arch Linux users have available in the AUR after seeing this post.

All versions of the driver back to 525.78 freeze up and crash X after a few tens of minutes.

I can’t get nvidia-dkms and nvidia-utils 525.60.11 installed because that nvidia-dkms fails with;

...
(5/7) Install DKMS modules
==> dkms install --no-depmod nvidia/525.60.11 -k 6.2.8-arch1-1
Error! Bad return status for module build on kernel: 6.2.8-arch1-1 (x86_64)
Consult /var/lib/dkms/nvidia/525.60.11/build/make.log for more information.
==> WARNING: `dkms install --no-depmod nvidia/525.60.11 -k 6.2.8-arch1-1' exited 10
==> dkms install --no-depmod nvidia/525.60.11 -k 6.2.8-zen1-1-zen
Error! Bad return status for module build on kernel: 6.2.8-zen1-1-zen (x86_64)
Consult /var/lib/dkms/nvidia/525.60.11/build/make.log for more information.
==> WARNING: `dkms install --no-depmod nvidia/525.60.11 -k 6.2.8-zen1-1-zen' exited 10
==> dkms install --no-depmod nvidia/525.60.11 -k 6.1.21-1-lts
==> depmod 6.1.21-1-lts
==> ERROR: Missing 5.15.18-1-lts kernel headers for module nvidia/525.60.11.
(6/7) Reloading system bus configuration...
(7/7) Checking which packages need to be rebuilt
sudo downgrade 'nvidia-dkms<=530.41.03-1' nvidia-utils  1158.52s user 136.93s system 474% cpu 4:33.21 total
...
  CC [M]  /var/lib/dkms/nvidia/525.60.11/build/nvidia-drm/nvidia-drm-encoder.o
  CC [M]  /var/lib/dkms/nvidia/525.60.11/build/nvidia-drm/nvidia-drm-connector.o
/var/lib/dkms/nvidia/525.60.11/build/nvidia-drm/nvidia-drm-drv.c: In function ‘nv_drm_init_mode_config’:
/var/lib/dkms/nvidia/525.60.11/build/nvidia-drm/nvidia-drm-drv.c:262:21: error: ‘struct drm_mode_config’ has no member named ‘fb_base’
  262 |     dev->mode_config.fb_base = 0;
      |                     ^
  CC [M]  /var/lib/dkms/nvidia/525.60.11/build/nvidia-drm/nvidia-drm-gem.o
make[2]: *** [scripts/Makefile.build:252: /var/lib/dkms/nvidia/525.60.11/build/nvidia-drm/nvidia-drm-drv.o] Error 1
make[2]: *** Waiting for unfinished jobs....
/var/lib/dkms/nvidia/525.60.11/build/nvidia-drm/nvidia-drm-connector.c: In function ‘__nv_drm_detect_encoder’:
/var/lib/dkms/nvidia/525.60.11/build/nvidia-drm/nvidia-drm-connector.c:101:18: error: ‘struct drm_connector’ has no member named ‘override_edid’
  101 |     if (connector->override_edid) {
      |                  ^~
/var/lib/dkms/nvidia/525.60.11/build/nvidia-drm/nvidia-drm-crtc.c: In function ‘__nv_drm_plane_atomic_destroy_state’:
/var/lib/dkms/nvidia/525.60.11/build/nvidia-drm/nvidia-drm-crtc.c:678:5: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
  678 |     struct nv_drm_plane_state *nv_drm_plane_state =
      |     ^~~~~~
make[2]: *** [scripts/Makefile.build:252: /var/lib/dkms/nvidia/525.60.11/build/nvidia-drm/nvidia-drm-connector.o] Error 1
make[1]: *** [Makefile:2021: /var/lib/dkms/nvidia/525.60.11/build] Error 2
make: *** [Makefile:82: modules] Error 2

I did though get the ability to rotate an external screen without it being broken again - after disabling and then reenabling it. Can’t remember which driver versions this worked with.

Going back to 530.x and the primary external monitor freezes very easily (e.g. sometimes when fullscreening or unfullscreening mpv). Attached are the new generated reports.

nvidia-bug-report.log.gz (1.8 MB)