So, my son's laptop is a little long in the tooth, and running on an nVidia Quadro FX 2800M (it's my old laptop). This was a powerful video chip back in the day, but 'the day' was around 2010 or so (it's based on the G92 core, roughly equivalent to a GeForce 9600 GT or Radeon HD 5670). The laptop is a Dell Precision M6500, essentially the business-clothed version of the Alienware M17x laptop.
Up to now things have rocked along fairly well. Although the lappy is getting older, it still works. However, nVidia dropped support for the Quadro FX 2800M after the 340-series drivers; nothing newer will work with the card.
As has been noted elsewhere, the linux driver ABI is unstable, and so drivers have to be updated periodically to reflect the changes in the ABI. MOST of the time all that's needed is to just recompile the drivers, but with kernel 4.6.6, there was a change that pretty much BROKE the nVidia drivers (even compiling them failed). Since nVidia is no longer maintaining the 340 drivers, there was no fix from nVidia.
The specific error was:
Fortunately, after some googling, my son and I found a fix, but it wasn't entirely clear how to apply it. Apparently, some enterprising folks over at Arch Linux had figured out the exact issue and even created a patch for it (the patch can be downloaded here).
There are a couple of different ways this patch can be applied, though this was not entirely obvious to either of us, and questions from others about 'how do I apply this?' had been met with the equivalent of "If you can't figure out how to apply it, you're too stupid to apply it".
After some futzing about, Tony remembered that the nVidia installer had an option to --apply-patch. Ok, so we tried that:
(Yeah, I don't remember the exact names of the files, just work with me here, ok?)
That came back with an error:
Umm.......ok.
So, after MORE futzing about, Tony figured out that if you actually extract the nVidia drivers using the -x option, you can then apply the patch, and finally run the installer, like this:
(Hey! I got the filenames this time!)
Once that was done, rebooted and things came up. Hooray!
So, I'm posting this here for posterity, just in case someone else has trouble figuring out how to get the bloody thing to work. This should work for the nVidia 304 drivers also. You will obviously have to have the compilers and kernel headers and all that crap installed before you can do this. A really good guide for installing nVidia binary drivers on Fedora can be found over at if-not-true-then-false: https://www.if-not-true-then-false.com/2015/fedora-nvidia-guide/
Up to now things have rocked along fairly well. Although the lappy is getting older, it still works. However, nVidia dropped support for the Quadro FX 2800M after the 340-series drivers; nothing newer will work with the card.
As has been noted elsewhere, the linux driver ABI is unstable, and so drivers have to be updated periodically to reflect the changes in the ABI. MOST of the time all that's needed is to just recompile the drivers, but with kernel 4.6.6, there was a change that pretty much BROKE the nVidia drivers (even compiling them failed). Since nVidia is no longer maintaining the 340 drivers, there was no fix from nVidia.
The specific error was:
Code:
error: too many arguments to function ‘get_user_pages’
Fortunately, after some googling, my son and I found a fix, but it wasn't entirely clear how to apply it. Apparently, some enterprising folks over at Arch Linux had figured out the exact issue and even created a patch for it (the patch can be downloaded here).
There are a couple of different ways this patch can be applied, though this was not entirely obvious to either of us, and questions from others about 'how do I apply this?' had been met with the equivalent of "If you can't figure out how to apply it, you're too stupid to apply it".
After some futzing about, Tony remembered that the nVidia installer had an option to --apply-patch. Ok, so we tried that:
Code:
./nVidia-driver-package-installer.run --apply-patch patchname.patch
That came back with an error:
Code:
can't find file to patch at input line 3
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|--- a/kernel/nvidia-drm/nvidia-drm-fb.c
|+++ b/kernel/nvidia-drm/nvidia-drm-fb.c
--------------------------
File to patch:
So, after MORE futzing about, Tony figured out that if you actually extract the nVidia drivers using the -x option, you can then apply the patch, and finally run the installer, like this:
Code:
#get the patch file
wget 'https://git.archlinux.org/svntogit/packages.git/plain/trunk/linux-4.6.patch?h=packages/nvidia-340xx&id=bb665d69eca74f01003cb41112448260a1597dc4' -O linux-4.6.patch
#extract the nvidia driver code
./NVIDIA-Linux-x86_64-340.96.run -x
#cd to the directory created by extracting the code
cd NVIDIA-Linux-x86_64-340.96
#apply the patch
patch -p1 -i ../linux-4.6.patch
#run the installer - this compiles the code using the provided patch
#and then installs the code.
./nvidia-installer
(Hey! I got the filenames this time!)
Once that was done, rebooted and things came up. Hooray!
So, I'm posting this here for posterity, just in case someone else has trouble figuring out how to get the bloody thing to work. This should work for the nVidia 304 drivers also. You will obviously have to have the compilers and kernel headers and all that crap installed before you can do this. A really good guide for installing nVidia binary drivers on Fedora can be found over at if-not-true-then-false: https://www.if-not-true-then-false.com/2015/fedora-nvidia-guide/
Last edited: