(Erledigt) Nvidia Legacy 340.96 und Kernel 4.6

    (Erledigt) Nvidia Legacy 340.96 und Kernel 4.6

    Moinsen,

    Seit kurzem findet man im Repository "Kernel:stable" Pakete mit Kernel 4.6.0.

    Wer wie ich den proprietären Nvidia Treiber in der "Legacy" Version 340.96 verwendet, wird zum Bau der entsprechenden Kernelmodule (nvidia.ko und nvidia-uvm.ko) einen kleinen Patch anwenden müssen.

    Unterschiede-Datei

    1. --- kernel/os-mlock.c.orig 2015-11-09 06:44:53.000000000 +0100
    2. +++ kernel/os-mlock.c 2016-05-18 19:16:33.263103070 +0200
    3. @@ -45,7 +45,11 @@
    4. }
    5. down_read(&mm->mmap_sem);
    6. +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0)
    7. ret = get_user_pages(current, mm, (unsigned long)address,
    8. +#else
    9. + ret = get_user_pages((unsigned long)address,
    10. +#endif
    11. page_count, write, force, user_pages, NULL);
    12. up_read(&mm->mmap_sem);
    13. pinned = ret;
    14. @@ -58,7 +62,11 @@
    15. else if (pinned < page_count)
    16. {
    17. for (i = 0; i < pinned; i++)
    18. +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0)
    19. page_cache_release(user_pages[i]);
    20. +#else
    21. + put_page(user_pages[i]);
    22. +#endif
    23. os_free_mem(user_pages);
    24. return RM_ERR_INVALID_ADDRESS;
    25. }
    26. @@ -85,7 +93,11 @@
    27. {
    28. if (write)
    29. set_page_dirty_lock(user_pages[i]);
    30. +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0)
    31. page_cache_release(user_pages[i]);
    32. +#else
    33. + put_page(user_pages[i]);
    34. +#endif
    35. }
    36. os_free_mem(user_pages);
    37. --- kernel/uvm/nvidia_uvm_lite.c.orig 2015-11-09 06:44:53.000000000 +0100
    38. +++ kernel/uvm/nvidia_uvm_lite.c 2016-05-18 19:16:33.263103070 +0200
    39. @@ -785,7 +785,11 @@
    40. // a reference so that the fault handling logic is correct:
    41. //
    42. get_page(pTracking->uvmPage);
    43. +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0)
    44. retValue = VM_FAULT_MINOR;
    45. +#else
    46. + retValue = 0;
    47. +#endif
    48. }
    49. pRecord->isMapped = NV_TRUE;


    (Siehe auch Anhang, das unnötige ".txt" am Ende ist der Forensoftware geschuldet, die bestimmte Dateiendungen erwartet)

    1) Den Patch als einfache Textdatei (z.B. unter dem Namen "nvidia-340.96-4.6.patch") abspeichern.

    2) Danach kann er wie folgt angewendet werden:

    Quellcode

    1. ./NVIDIA-Linux-<ARCH>-<VERSION>.run --apply-patch <NAME_DER_PATCHDATEI>


    oder an einem konkreten Beispiel für den Installer "NVIDIA-Linux-x86_64-340.96-no-compat32.run"

    Brainfuck-Quellcode

    1. ./NVIDIA-Linux-x86_64-340.96-no-compat32.run --apply-patch nvidia-340.96-4.6.patch
    2. Verifying archive integrity... OK
    3. Uncompressing NVIDIA Accelerated Graphics Driver for Linux-x86_64 340.96.........................................................................................................................................................................................................
    4. patching file kernel/os-mlock.c
    5. patching file kernel/uvm/nvidia_uvm_lite.c
    6. Adding files to archive named "NVIDIA-Linux-x86_64-340.96-no-compat32-custom.run"...
    7. ./.manifest
    8. ./html/
    9. ./html/xrandrextension.html
    10. ./html/xineramaglx.html
    11. ----------- snip -----------------
    12. ./pkg-history.txt
    13. ./LICENSE
    14. ./NVIDIA_Changelog
    15. CRC: 3922802423
    16. MD5: 198be0176f3e08cb0b1c0358a082186b
    17. Self-extractible archive "NVIDIA-Linux-x86_64-340.96-no-compat32-custom.run" successfully created.


    3) Nun kann man den neu gebauten Installer (hier "NVIDIA-Linux-x86_64-340.96-no-compat32-custom.run") wie gewohnt aufrufen, dann klappts auch mit dem Nachbarn 4.6er Kernel.

    Greetz,

    RM

    Nachtrag:

    Last but not least und (nicht nur) für unsere Nostalgiker, hier der Patch als base64-codierte Datei ("man uudecode" hilft weiter).

    Quellcode

    1. begin-base64 644 nvidia-340.96-4.6.patch
    2. LS0tIGtlcm5lbC9vcy1tbG9jay5jLm9yaWcJMjAxNS0xMS0wOSAwNjo0NDo1
    3. My4wMDAwMDAwMDAgKzAxMDAKKysrIGtlcm5lbC9vcy1tbG9jay5jCTIwMTYt
    4. MDUtMTggMTk6MTY6MzMuMjYzMTAzMDcwICswMjAwCkBAIC00NSw3ICs0NSwx
    5. MSBAQAogICAgIH0KIAogICAgIGRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsK
    6. KyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTig0LDYs
    7. MCkKICAgICByZXQgPSBnZXRfdXNlcl9wYWdlcyhjdXJyZW50LCBtbSwgKHVu
    8. c2lnbmVkIGxvbmcpYWRkcmVzcywKKyNlbHNlCisgICAgcmV0ID0gZ2V0X3Vz
    9. ZXJfcGFnZXMoKHVuc2lnbmVkIGxvbmcpYWRkcmVzcywKKyNlbmRpZgogICAg
    10. ICAgICAgICAgcGFnZV9jb3VudCwgd3JpdGUsIGZvcmNlLCB1c2VyX3BhZ2Vz
    11. LCBOVUxMKTsKICAgICB1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwogICAgIHBp
    12. bm5lZCA9IHJldDsKQEAgLTU4LDcgKzYyLDExIEBACiAgICAgZWxzZSBpZiAo
    13. cGlubmVkIDwgcGFnZV9jb3VudCkKICAgICB7CiAgICAgICAgIGZvciAoaSA9
    14. IDA7IGkgPCBwaW5uZWQ7IGkrKykKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUg
    15. PCBLRVJORUxfVkVSU0lPTig0LDYsMCkKICAgICAgICAgICAgIHBhZ2VfY2Fj
    16. aGVfcmVsZWFzZSh1c2VyX3BhZ2VzW2ldKTsKKyNlbHNlCisgICAgICAgICAg
    17. ICBwdXRfcGFnZSh1c2VyX3BhZ2VzW2ldKTsKKyNlbmRpZgogICAgICAgICBv
    18. c19mcmVlX21lbSh1c2VyX3BhZ2VzKTsKICAgICAgICAgcmV0dXJuIFJNX0VS
    19. Ul9JTlZBTElEX0FERFJFU1M7CiAgICAgfQpAQCAtODUsNyArOTMsMTEgQEAK
    20. ICAgICB7CiAgICAgICAgIGlmICh3cml0ZSkKICAgICAgICAgICAgIHNldF9w
    21. YWdlX2RpcnR5X2xvY2sodXNlcl9wYWdlc1tpXSk7CisjaWYgTElOVVhfVkVS
    22. U0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oNCw2LDApCiAgICAgICAgIHBh
    23. Z2VfY2FjaGVfcmVsZWFzZSh1c2VyX3BhZ2VzW2ldKTsKKyNlbHNlCisgICAg
    24. ICAgIHB1dF9wYWdlKHVzZXJfcGFnZXNbaV0pOworI2VuZGlmCiAgICAgfQog
    25. CiAgICAgb3NfZnJlZV9tZW0odXNlcl9wYWdlcyk7Ci0tLSBrZXJuZWwvdXZt
    26. L252aWRpYV91dm1fbGl0ZS5jLm9yaWcJMjAxNS0xMS0wOSAwNjo0NDo1My4w
    27. MDAwMDAwMDAgKzAxMDAKKysrIGtlcm5lbC91dm0vbnZpZGlhX3V2bV9saXRl
    28. LmMJMjAxNi0wNS0xOCAxOToxNjozMy4yNjMxMDMwNzAgKzAyMDAKQEAgLTc4
    29. NSw3ICs3ODUsMTEgQEAKICAgICAgICAgLy8gYSByZWZlcmVuY2Ugc28gdGhh
    30. dCB0aGUgZmF1bHQgaGFuZGxpbmcgbG9naWMgaXMgY29ycmVjdDoKICAgICAg
    31. ICAgLy8KICAgICAgICAgZ2V0X3BhZ2UocFRyYWNraW5nLT51dm1QYWdlKTsK
    32. KyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTig0LDYs
    33. MCkKICAgICAgICAgcmV0VmFsdWUgPSBWTV9GQVVMVF9NSU5PUjsKKyNlbHNl
    34. CisgICAgICAgIHJldFZhbHVlID0gMDsKKyNlbmRpZgogICAgIH0KIAogICAg
    35. IHBSZWNvcmQtPmlzTWFwcGVkID0gTlZfVFJVRTsK
    36. ====
    "Programming today is a race between software engineers striving to build better & bigger idiot-proof programs and the Universe trying to produce bigger & better idiots. So far, the Universe is winning." (Rick Cook)

    Dies ist ein _öffentliches_ Supportforum, keinerlei Support per PN, EMail oder Instant Messenger.

    openSUSE Leap 42.2 - Kernel 4.12.x - fluxbox 1.3.7

    Bitmessage: BM-2D8h8QZmvHfgbixWeiG1NDZHG1iXAhBz8K
    Jepp, ist im Prinzip die selbe Vorgehensweise, nur eben ohne "Neuverpacken" der .run-Datei.

    Einen wichtigen Unterschied muss ich hier aber heraus stellen, die von Sauerland verlinkte Anleitung bezieht sich auf die 364.X-Serie, also auf die gerade aktuellen Nvidia-Treiber, woraus sich ein paar Konsequenzen ergeben.

    1) Der dort verlinkte Patch ist nicht für die Legacytreiber der 340er-Serie geeignet (und vice versa).

    2) Wer statt des "brandaktuellen" 364er den aktuellen "long term" 361er verwendet, kann möglicherweise (nicht getestet) mit dem dortigen Patch auch nichts anfangen.

    3) Die beiden aktuellen Versionen 364.X und 361.X erhalten im Gegensatz zu den "Legacy"-Treibern öfters Updates, es ist also sehr wahrscheinlich, daß es dort bald neue Versionen geben wird, welche ohne Patches gegen 4.6 bauen, bei den "Legacy"-Versionen kann das durchaus länger dauern.

    Und zum Schluss ein allgemeiner Tipp, wo man häufig passende Patches finden kann.

    devtalk.nvidia.com/default/board/98/linux/

    Meist finden sich dort Patches lange bevor der neue Kernel veröffentlicht wird, dort finden sich reichlich Nutzer, die die rc-Kernel testen und diesen fallen dann solche Probleme eben schon sehr früh auf.

    Wer in die Suchmaschine seines geringsten Misstrauens also so etwas wie

    "Nvidia devtalk Linux $NEUE_KERNEL_VERSION"

    eintippt, wird in der Regel sehr schnell fündig.

    Beispiel:

    duckduckgo.com/lite/?q=NVidia+devtalk+Linux+4.6

    oder

    ixquick.com/do/metasearch.pl?query=NVidia+devtalk+Linux+4.6

    und man landet recht schnell auf:

    devtalk.nvidia.com/default/top…-for-4-6-0-rc3-included-/

    Aber auch hier, für die aktuellen Versionen wird man schnell fündig, bei Legacytreibern kann die Suche etwas länger dauern bzw. man muss selbst ein wenig rumklöppeln und die Patches für die aktuellen Versionen können vielleicht als Hilfe dienen, wenn es beim Legacytreiber an den selben Stellen knallt.


    Greetz,

    RM
    "Programming today is a race between software engineers striving to build better & bigger idiot-proof programs and the Universe trying to produce bigger & better idiots. So far, the Universe is winning." (Rick Cook)

    Dies ist ein _öffentliches_ Supportforum, keinerlei Support per PN, EMail oder Instant Messenger.

    openSUSE Leap 42.2 - Kernel 4.12.x - fluxbox 1.3.7

    Bitmessage: BM-2D8h8QZmvHfgbixWeiG1NDZHG1iXAhBz8K
    Wobei ich auch noch anmerken möchte:
    Die Installation eines aktuellen Kernels aus kernel:stable ist einfach und auch schnell erledigt, allerdings funktionieren dann meist keine vorkompilierten Kernel-Pakete aus dem OSS- bzw. OSS-Update-Repo. Darüber sollte sich jeder vor der Installation im Klaren sein und z.B. hinterher nicht heulen:
    Mein Broadcom-Wlan geht nicht mehr.

    Zum Thema Nvidia Treiber:
    Wie von Rain_Maker schon angemerkt, benutze ich den aktuellsten Treiber, der ca. alle 4 Wochen neu herauskommt und auch schon einmal von Nvidia als Beta gekennzeichnet ist und auch Probleme bereiten kann.
    Dann ist es immer gut, wenn man noch ältere Treiber auf der Festplatte liegen hat und schnell wechseln kann.

    Sauerland schrieb:

    Darüber sollte sich jeder vor der Installation im Klaren sein und z.B. hinterher nicht heulen:
    Mein Broadcom-Wlan geht nicht mehr.


    *Gnihihihihihihihihi*

    Danke, das war der Spruch des Tages, ich weiß genau, was (oder genauer WEN) Du damit meinst.

    Und solltest Du dafür Ärger bekommen, dann sag' einfach "Ich war jung und brauchte das Geld EUEREHREN..."

    Greetz,

    R_Insiderscherz_M
    "Programming today is a race between software engineers striving to build better & bigger idiot-proof programs and the Universe trying to produce bigger & better idiots. So far, the Universe is winning." (Rick Cook)

    Dies ist ein _öffentliches_ Supportforum, keinerlei Support per PN, EMail oder Instant Messenger.

    openSUSE Leap 42.2 - Kernel 4.12.x - fluxbox 1.3.7

    Bitmessage: BM-2D8h8QZmvHfgbixWeiG1NDZHG1iXAhBz8K
    Heute wurde Version 340.98 des Treibers veröffentlicht, welcher zumindest bis Kernel 4.7.5 ohne Patch baut.

    Quellcode

    1. uname -r
    2. 4.7.5-1.gc7aed11-default
    3. /sbin/modinfo nvidia
    4. filename: /lib/modules/4.7.5-1.gc7aed11-default/updates/nvidia.ko
    5. alias: char-major-195-*
    6. version: 340.98
    7. supported: external
    8. license: NVIDIA
    9. alias: pci:v000010DEd00000E00sv*sd*bc04sc80i00*
    10. alias: pci:v000010DEd00000AA3sv*sd*bc0Bsc40i00*
    11. alias: pci:v000010DEd*sv*sd*bc03sc02i00*
    12. alias: pci:v000010DEd*sv*sd*bc03sc00i00*
    13. depends: drm
    14. vermagic: 4.7.5-1.gc7aed11-default SMP preempt mod_unload modversions
    15. parm: NVreg_Mobile:int
    16. parm: NVreg_ResmanDebugLevel:int
    17. parm: NVreg_RmLogonRC:int
    18. parm: NVreg_ModifyDeviceFiles:int
    19. parm: NVreg_DeviceFileUID:int
    20. parm: NVreg_DeviceFileGID:int
    21. parm: NVreg_DeviceFileMode:int
    22. parm: NVreg_RemapLimit:int
    23. parm: NVreg_UpdateMemoryTypes:int
    24. parm: NVreg_InitializeSystemMemoryAllocations:int
    25. parm: NVreg_UsePageAttributeTable:int
    26. parm: NVreg_MapRegistersEarly:int
    27. parm: NVreg_RegisterForACPIEvents:int
    28. parm: NVreg_CheckPCIConfigSpace:int
    29. parm: NVreg_EnablePCIeGen3:int
    30. parm: NVreg_EnableMSI:int
    31. parm: NVreg_MemoryPoolSize:int
    32. parm: NVreg_RegistryDwords:charp
    33. parm: NVreg_RmMsg:charp
    34. parm: NVreg_AssignGpus:charp


    Damit sollte sich das Ganze (zumindest bis zum nächsten Update auf 4.8) erledigt haben.

    Der Link zum direkten Download des Patches wurde entfernt, da obsolet.


    /Nachtrag:
    Treiber baut auch gegen 4.8.rc7, sieht also zumindest so aus, als ob man sogar bis 4.9 seine Ruhe hätte,

    Da der Patch einige Male in diversen Foren verlinkt wurde, hier noch in Kürze das Ganze in Englisch:

    Nvidia released version 340.98 of their prorpietary driver today. This version builds against kernels up to 4.7.5 without any extra patches,

    The dowload link to this patch was removed, I recommend upgrading your driver to 340.98.

    Greetz,

    RM
    "Programming today is a race between software engineers striving to build better & bigger idiot-proof programs and the Universe trying to produce bigger & better idiots. So far, the Universe is winning." (Rick Cook)

    Dies ist ein _öffentliches_ Supportforum, keinerlei Support per PN, EMail oder Instant Messenger.

    openSUSE Leap 42.2 - Kernel 4.12.x - fluxbox 1.3.7

    Bitmessage: BM-2D8h8QZmvHfgbixWeiG1NDZHG1iXAhBz8K