# nvidia-drivers, ältere Grafikkarten und kernel-4.x

## michael_w

Hallo,

das obige passt scheinbar nicht zusammen. Ich wollte gerade einen kernel-4.0.5 booten. nvidia-drivers (340.76) lässt sich aber nicht kompilieren. 

In einem anderen Thread hier patcht man so vor sich hin mit mäßigem Erfolg: https://forums.gentoo.org/viewtopic-t-1014974.html

Ist das Problem bei den Devs bekannt und arbeitet man an einer Lösung oder brauche ich eine neue Grafikkarte?

----------

## py-ro

Beschwer dich bei Nvidia, die Gentoo Devs können da herzlich wenig tun.

Alternativ nutze einen der FLOSS Treiber wie noveau.

Bye

Py

----------

## Josef.95

Ja, es wäre prima wenn nVidia ihre älteren legacy-Treiber langsam auch mal zu linux-4.0 kompatibel anbieten würden. (Vermutlich werden sie das in absehbarer Zeit auch machen).

 *michael_w wrote:*   

> Linux gauss 3.17.7-gentoo #1 SMP Mon Dec 22 13:50:02 CET 2014 x86_64 Intel(R) Core(TM)2 Quad CPU Q9550 @ 2.83GHz GenuineIntel GNU/Linu

  Du könntest ein Upgrade auf linux-3.18 machen, dies ist eine longterm Version die auch weiterhin gepflegt wird, und auch weiterhin im portage-Tree verfügbar sein wird.

Oder muss es wirklich zwingend linux-4.0 sein?

----------

## michael_w

Hallo Josef, 

 *Josef.95 wrote:*   

> Du könntest ein Upgrade auf linux-3.18 machen, dies ist eine longterm Version die auch weiterhin gepflegt wird, und auch weiterhin im portage-Tree verfügbar sein wird.

 

Keine schlechte Idee.

 *Quote:*   

> 
> 
> Oder muss es wirklich zwingend linux-4.0 sein?

 

Nein, ich glaube nicht. Wie bekomme ich das mit, wenn nvidia seine Treiber ändert? Ich habe die Treiber (>=341.0) in meiner portage.mask stehen.

----------

## musv

 *michael_w wrote:*   

> Hallo,
> 
> das obige passt scheinbar nicht zusammen. Ich wollte gerade einen kernel-4.0.5 booten. nvidia-drivers (340.76) lässt sich aber nicht kompilieren. 
> 
> In einem anderen Thread hier patcht man so vor sich hin mit mäßigem Erfolg: https://forums.gentoo.org/viewtopic-t-1014974.html

 

Der Patch im 2. Beitrag des verlinkten Threads funktioniert bei mir. Ich hab 'ne QuadroFX 3800 mit nvidia-drivers-340.76. 

Ich hab mal kurz den Rest des Threads überflogen. Die anderen Patches beziehen sich wohl auf noch ältere Karten, die nur bis nvidia-drivers 304.xx unterstützt werden.

Da schon seit längerer Zeit keine neuere Version der 340.xx-Treiber rausgekommen ist, hab ich mir das modifizierte Ebuild ins lokale Overlay gelegt. 

Hier noch mal der Patch:

```
--- kernel/nv-pat.c.orig   2015-06-19 17:26:44.399554640 +0200

+++ kernel/nv-pat.c   2015-06-19 17:28:14.504456825 +0200

@@ -35,8 +35,13 @@

     unsigned long cr0 = read_cr0();

     write_cr0(((cr0 & (0xdfffffff)) | 0x40000000));

     wbinvd();

+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 20, 0) 

     *cr4 = read_cr4();

     if (*cr4 & 0x80) write_cr4(*cr4 & ~0x80);

+#else 

+    *cr4 = __read_cr4(); 

+    if (*cr4 & 0x80) __write_cr4(*cr4 & ~0x80); 

+#endif 

     __flush_tlb();

 }

 

@@ -46,7 +51,11 @@

     wbinvd();

     __flush_tlb();

     write_cr0((cr0 & 0x9fffffff));

+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 20, 0) 

     if (cr4 & 0x80) write_cr4(cr4);

+#else 

+    if (cr4 & 0x80) __write_cr4(cr4); 

+#endif 

 }

 

 static int nv_determine_pat_mode(void)
```

Und der Auszug aus dem Ebuild:

```

src_prepare() {

        # Please add a brief description for every added patch

        if use kernel_linux; then

                if kernel_is lt 2 6 9 ; then

                        eerror "You must build this against 2.6.9 or higher kern

els."

                fi

                # If greater than 2.6.5 use M= instead of SUBDIR=

#               convert_to_m "${NV_SRC}"/Makefile.kbuild

        fi

        epatch "${FILESDIR}"/${PN}-340.76-nv-pat.patch

        if use pax_kernel; then

                ewarn "Using PAX patches is not supported. You will be asked to"

                ewarn "use a standard kernel should you have issues. Should you"

                ewarn "need support with these patches, contact the PaX team."

                epatch "${FILESDIR}"/${PN}-331.13-pax-usercopy.patch

                epatch "${FILESDIR}"/${PN}-337.12-pax-constify.patch

        fi

        # Allow user patches so they can support RC kernels and whatever else

        epatch_user

}
```

----------

## ChrisJumper

Hmm, ich habe einen anderen Patch? Dachte bis eben das sollte der selbe sein.

Ich habe eine nvidia 9400GT und der Treiber nvidia-drivers-340.76 mit dem Patch kompiliert und funktioniert auch bei dem 4.0.5 Kernel.

Habe folgenden Patch auch in /etc/portage/patches/x11-drivers/nvidia-drivers-340.76/linux-3.19-nvidia.patch abgelegt und jetzt wird er auch automatisch verwendet wenn ich die nvidia-drivers neu kompiliere.

```
--- a/kernel/nv-linux.h 2015-01-11 05:30:46.000000000 +0100

+++ b/kernel/nv-linux.h 2015-01-25 20:30:32.000000000 +0100

@@ -2000,7 +2000,11 @@

 #if defined(NV_FILE_HAS_INODE)

 #define NV_FILE_INODE(file) (file)->f_inode

 #else

+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19 , 0)

 #define NV_FILE_INODE(file) (file)->f_dentry->d_inode

+#else

+#define NV_FILE_INODE(file) (file)->f_path.dentry->d_inode

+#endif

 #endif

 /* Stub out UVM in multi-RM builds */
```

Funktioniert bei mir ohne Probleme auch mit dem neuen Kernel.

Edit: Musv meinst du ich sollte deinen Patch auch unbedingt hinzufügen? Ich werde nachher mal den Links folgen. Im Grunde funktioniert es ja. Aber nicht das ich später auf irgendein Problem stoße. Na ich behalte es erst mal im Hinterkopf und schau mir später den Thread bei Nvidia genauer an.

----------

## musv

Dein Patch kommt mir bekannt vor. Den hatte ich beim Wechsel von 3.18 auf 3.19, wenn ich mich recht erinnere.  Steht ja auch so in Deinem Patch drin. 

Wenn Dein Patch noch funktioniert, dann lass es erst mal. Never change a running system. Eine bessere Perfomance oder mehr Stabilität bringt der andere Patch auch nicht.

----------

