I just downloaded and gave a try to driver v410.73, but alas it fails to build usable modules on all my systems: apparently, it expects to have power-management functions built in the kernel (or modules), and so fails on driver module insertion with the following errors:
[30110.639161] nvidia: Unknown symbol nv_pmops_freeze (err -2)
[30110.639173] nvidia: Unknown symbol nv_pmops_restore (err -2)
[30110.639178] nvidia: Unknown symbol nv_pmops_poweroff (err -2)
[30110.639211] nvidia: Unknown symbol nv_pmops_thaw (err -2)
[30110.639213] nvidia: Unknown symbol nv_pmops_resume (err -2)
[30110.639217] nvidia: Unknown symbol nv_pmops_suspend (err -2)
Please, NVIDIA, STOP assuming that everyone uses kernels with every feature compiled in, especially features that are unnecessary to most desktop systems (here, suspend/resume). With pre-v410.66 drivers you already assumed NUMA and cgroups (which are only useful for servers and supercomputers), and now you assume stuff that is only useful for portable computers !
I do hope you will not need months to fix that bug, like you did with the NUMA/cgroups one… :-(
Attaching the full nvidia-installer.log file below.
nvidia-installer.log (25.2 KB)
Still no reaction from NVIDIA officials ?..
Well, I had a look, today, at the new driver code (at least the Open Source part of it) and did not find any call to those “missing” symbols in it. So, obviously, one of the many pre-compiled binaries/libraries is invoking these PM functions while the Open Source part of the driver (rightfully) doesn’t have them compiled in when CONFIG_PM=no (or unconfigured) in the Linux kernel.
I came up with a patch that force-adds no-op functions for the missing symbols, and here it is:
diff -durN nvidia-410.73-orig/common/inc/nv-proto.h nvidia-410.73/common/inc/nv-proto.h
--- nvidia-410.73-orig/common/inc/nv-proto.h 2018-10-27 12:51:02.856920976 +0200
+++ nvidia-410.73/common/inc/nv-proto.h 2018-10-27 12:48:06.736928406 +0200
@@ -96,7 +96,7 @@
int nvidia_suspend (struct pci_dev *, pm_message_t);
int nvidia_resume (struct pci_dev *);
-#if defined(NV_DEV_PM_OPS_PRESENT)
+#if defined(NV_DEV_PM_OPS_PRESENT) || 1
int nv_pmops_suspend (struct device *dev);
int nv_pmops_resume (struct device *dev);
int nv_pmops_freeze (struct device *dev);
diff -durN nvidia-410.73-orig/nvidia/nv.c nvidia-410.73/nvidia/nv.c
--- nvidia-410.73-orig/nvidia/nv.c 2018-10-27 12:51:02.900254308 +0200
+++ nvidia-410.73/nvidia/nv.c 2018-10-27 12:48:06.730261739 +0200
@@ -4603,6 +4603,46 @@
return 0;
}
#endif /*defined(NV_DEV_PM_OPS_PRESENT) */
+#else /* defined(NV_PM_SUPPORT_DEVICE_DRIVER_MODEL) */
+int nvidia_suspend(struct pci_dev* dev, pm_message_t state)
+{
+ return 0;
+}
+
+int nvidia_resume(struct pci_dev* dev)
+{
+ return 0;
+}
+
+int nv_pmops_suspend(struct device* dev)
+{
+ return 0;
+}
+
+int nv_pmops_resume(struct device* dev)
+{
+ return 0;
+}
+
+int nv_pmops_freeze(struct device* dev)
+{
+ return 0;
+}
+
+int nv_pmops_thaw(struct device* dev)
+{
+ return 0;
+}
+
+int nv_pmops_restore(struct device* dev)
+{
+ return 0;
+}
+
+int nv_pmops_poweroff(struct device* dev)
+{
+ return 0;
+}
#endif /* defined(NV_PM_SUPPORT_DEVICE_DRIVER_MODEL) */
#if defined(NV_PCI_ERROR_RECOVERY)
I’m currently running the patched v410.73 driver/module and it seems to work just fine.
Thank you, dinosaur_ for sharing this.
Hi dinosaur_. I filed internal bug 2435687 to track this.
Same bug with v415.13. Here is the corresponding patch to apply for users with kernel compiled without CONFIG_PM enabled:
diff -durN kernel-orig/nvidia/nv.c kernel/nvidia/nv.c
--- kernel-orig/nvidia/nv.c 2018-11-01 01:39:12.000000000 +0100
+++ kernel/nvidia/nv.c 2018-11-10 22:27:49.299472085 +0100
@@ -4680,6 +4680,46 @@
{
return 0;
}
+#else /* defined(NV_PM_SUPPORT_DEVICE_DRIVER_MODEL) */
+int nvidia_suspend(struct pci_dev* dev, pm_message_t state)
+{
+ return 0;
+}
+
+int nvidia_resume(struct pci_dev* dev)
+{
+ return 0;
+}
+
+int nv_pmops_suspend(struct device* dev)
+{
+ return 0;
+}
+
+int nv_pmops_resume(struct device* dev)
+{
+ return 0;
+}
+
+int nv_pmops_freeze(struct device* dev)
+{
+ return 0;
+}
+
+int nv_pmops_thaw(struct device* dev)
+{
+ return 0;
+}
+
+int nv_pmops_restore(struct device* dev)
+{
+ return 0;
+}
+
+int nv_pmops_poweroff(struct device* dev)
+{
+ return 0;
+}
#endif /* defined(NV_PM_SUPPORT_DEVICE_DRIVER_MODEL) */
#if defined(NV_PCI_ERROR_RECOVERY)
v410.78 is still affected by this bug, but v415.18 seems to have it fixed despite the absence of any mention of it in the change log.