Yes, this is because of the āGPL condomā that prevents loading the UVM moduleā¦
BOTH Linux kernel developers and NVIDIA are to blame here.
The first because they behave like OpenSource nazies (and are in the process violating laws such as UE law which does NOT allow API copyrighting): imagine what would happen to OpenSource if Micro$oft or Apple would suddenly behave in the exact same way and forbid to use their OSā APIs unless the software using them would be using the same licenseā¦ OpenSource software would simply not run any more on Windows PCs and Macs and would be doomed !
The second, because their OpenSource support and production is extremely poor (to say the least) without even a valid reason (why would the competition have better contributions if there was any valid reason to hide their software behind closed sources doors), and because instead of discussing the issue like civilized persons with Linux kernel devels, they just try and bypass the existing restrictions rather than to consider taking the Open Source route (at least for part of their code: no one would blame them for keeping some code closed as a binary blob: almost every other hardware manufacturer, including AMD, are doing it).
As an end user, it really pisses me off big time.
So here is my advice, until those āfine peopleā pertaining to the Linux kernel and NVIDIA devel teams finally find a common, sane ground (i.e. behave as adults instead of like children in a kindergarten), just do like what I did to circumvent this issue:
1.- turn the license in the NVIDIA kernel sources from āNVIDIAā TO āGPLā
2.- disable (just couple #if 0 ā¦ #endif to insert in kernel/module.c) the GPL condom code (compare v5.8 and v5.9 kernel sources to find out where to insert those directives).
Any of the above two solutions will allow you to recover the full functionality of the NVIDIA drivers on your system, and as long as you do not distribute the resulting binaries, no one can blame (or sue you) you for it !
Based on what @dinosaur said, I created my own kernel patch to make nvidia drivers work again. The patch reverts the commit which introduced the TAINT stuff:
Patch works, but with latest linux git pull (commit 071a0578b0ce0b0e543d1e38ee6926b9cc21c198), compile fails ā¦
/v6/src/nvidia-455.28/nvidia/nv-dma.c:631:37: error: implicit declaration of function āget_dma_opsā; did you mean āget_mm_rssā? [-Werror=implicit-function-declaration]
const struct dma_map_ops *ops = get_dma_ops(dma_dev->dev);
^~~~~~~~~~~
get_mm_rss
/v6/src/nvidia-455.28/nvidia/nv-dma.c:631:37: warning: initialization of āconst struct dma_map_ops *ā from āintā makes pointer from integer without a cast [-Wint-conversion]
/v6/src/nvidia-455.28/nvidia/nv-dma.c:646:16: error: dereferencing pointer to incomplete type āconst struct dma_map_opsā
return (ops->map_resource != NULL);
^~
/v6/src/nvidia-455.28/nvidia/nv-dma.c:650:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
/* DMA-map a peer PCI deviceās BAR for peer access. */
But the following ādevā ā¦ I donāt know to fix that ā¦
/v6/src/nvidia-455.28/nvidia-drm/nvidia-drm-gem-user-memory.c:63:12: error: too few arguments to function ādrm_prime_pages_to_sgā
return drm_prime_pages_to_sg(nv_user_memory->pages,
^~~~~~~~~~~~~~~~~~~~~
In file included from /v6/src/nvidia-455.28/nvidia-drm/nvidia-drm-gem-user-memory.c:28:
./include/drm/drm_prime.h:91:18: note: declared here
struct sg_table *drm_prime_pages_to_sg(struct drm_device *dev,
^~~~~~~~~~~~~~~~~~~~~
Looks like need to pass addition ādevā to the function drm_prime_pages_to_sg() ā¦