Failure of Nvidia driver to build across ver. and kernels

Hi

New to forum. Previous installs of the driver have been faultless. Not this time. Installing from the command prompt.

Linux-x86_64-384.69 and previous versions(going back four)fail at 100% of the module build with the following error on kernel 4.6 and then 4.10.12.

OKAY UNTIL:

CC [M] /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/nv-kthread-q.o
CC [M] /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/nv-kthread-q-selftest.o
CC [M] /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/nv-memdbg.o
CC [M] /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/nv_uvm_interface.o
/tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/nv_uvm_interface.c: In function ‘nvUvmInterfaceDeRegisterUvmOps’:
/tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/nv_uvm_interface.c:991:5: error: implicit declaration of function ‘NV_ON_EACH_CPU’ [-Werror=implicit-function-declaration]
NV_ON_EACH_CPU(flush_top_half, NULL, 1);
^~~~~~~~~~~~~~
cc1: some warnings being treated as errors
make[3]: *** [/usr/src/linux-4.12.10/scripts/Makefile.build:303: /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/nv_uvm_interface.o] Error 1
CC [M] /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/nvlink_linux.o
SYMLINK /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/nv-kernel.o
CC [M] /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_volta_host.o
CC [M] /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_volta.o
CC [M] /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_volta_fault_buffer.o
CC [M] /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_volta_access_counter_buffer.o
CC [M] /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_ats_numa.o
CC [M] /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_gpu_non_replayable_faults.o
CC [M] /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_gpu_access_counters.o
CC [M] /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm_utils.o
CC [M] /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm_common.o
CC [M] /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm_linux.o
CC [M] /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/nvstatus.o
CC [M] /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/nv-kthread-q.o
CC [M] /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/nv-kthread-q-selftest.o
CC [M] /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8.o
CC [M] /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_tools.o
CC [M] /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_global.o
CC [M] /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_gpu.o
CC [M] /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_gpu_isr.o
CC [M] /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_procfs.o
CC [M] /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_va_space.o
CC [M] /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_gpu_semaphore.o
CC [M] /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_mem.o
CC [M] /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_rm_mem.o
CC [M] /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_channel.o
CC [M] /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_lock.o
CC [M] /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_hal.o
CC [M] /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_range_tree.o
CC [M] /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_range_allocator.o
CC [M] /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_va_range.o
CC [M] /tmp/selfgz2970/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_va_block.o

 STOPS HERE

Any advice appreciated

Cliff

Find out where “-Werror=implicit-function-declaration” comes from. This compilation flags kills your install.

Thanks

Yes it says that a function isn’t being declared. In this case ‘NV_ON_EACH_CPU’. But that function is only present in the Nvidia driver itself. I expected it elsewhere and it not being found?

Much earlier drivers had similar errors, but I imagined it was fixed

Cliff

Does your kernel have CONFIG_SMP enabled? If not, does enabling it make the problem go away?

Thanks

No, it’s not, will enable and get back

Cliff

Actually, one of the engineers here managed to reproduce the problem and confirmed that enabling CONFIG_SMP fixes it. He has a change ready that should appear in a future release.

Thanks again

But the CONFIG_SMP option applies to single or multiple CPU, which I didn’t realize. I have a single CPU so I shouldn’t be enabling it, should I?

Cliff

Or maybe I should just to compile Nvidia?

Cliff

You should still be able to use a CONFIG_SMP kernel on a single-processor system, but you’re right that you shouldn’t have to enable it.

The driver bug that causes the build to fail when CONFIG_SMP is not set will be fixed in a future release.

Thanks Aaron

That change has indeed got rid of the errors, but the build is now halting and not finishing. This is exasperating. An exerpt

CONFTEST: drm_available
CONFTEST: drm_atomic_available
CONFTEST: drm_atomic_modeset_nonblocking_commit_available
CONFTEST: is_export_symbol_gpl_refcount_inc
CONFTEST: is_export_symbol_gpl_refcount_dec_and_test
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/nv-frontend.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/nv-instance.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/nv.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/nv-acpi.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/nv-chrdev.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/nv-cray.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/nv-dma.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/nv-gvi.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/nv-i2c.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/nv-mempool.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/nv-mmap.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/nv-p2p.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/nv-pat.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/nv-procfs.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/nv-usermap.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/nv-vm.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/nv-vtophys.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/os-interface.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/os-mlock.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/os-pci.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/os-registry.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/os-usermap.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/nv-modeset-interface.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/nv-pci-table.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/nv-kthread-q.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/nv-kthread-q-selftest.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/nv-memdbg.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/nv_uvm_interface.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia/nvlink_linux.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_volta_host.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_volta.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_volta_fault_buffer.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_volta_access_counter_buffer.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_ats_numa.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_gpu_non_replayable_faults.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_gpu_access_counters.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm_utils.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm_common.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm_linux.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/nvstatus.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/nv-kthread-q.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/nv-kthread-q-selftest.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_tools.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_global.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_gpu.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_gpu_isr.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_procfs.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_va_space.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_gpu_semaphore.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_mem.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_rm_mem.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_channel.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_lock.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_hal.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_range_tree.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_range_allocator.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_va_range.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_va_block.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_range_group.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_gpu_replayable_faults.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_perf_events.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_perf_module.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_mmu.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_pte_batch.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_tlb_batch.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_push.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_pushbuffer.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_thread_context.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_tracker.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_kepler.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_kepler_ce.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_kepler_host.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_kepler_mmu.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_maxwell.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_maxwell_host.o
CC [M] /tmp/selfgz3070/NVIDIA-Linux-x86_64-384.69/kernel/nvidia-uvm/uvm8_pascal.o

 STOPS HERE

Cliff

Right. I was hasty. The build did complete albeit slowly and is working.

Thanks again

Cliff

Bug tracker : 1990232