linux 4.3 - VirtualBox, NVidia proprietär & co.

Rain_Maker

Administrator
Teammitglied
Moinsen,

Gestern auf linux 4.3 (Repo Kernel:stable/standard) upgedated und -wie nicht selten- wollten einige externe Kernelmodule nicht mehr bauen.

Da man meist nicht der Erste mit diesem Problem ist, hier die von mir gefundenen Patches:

Virtualbox (4.3.X, gilt aber wohl auch für 5.0.X)

Code:
diff -uraN vboxhost.orig/vboxdrv/linux/SUPDrv-linux.c vboxhost/vboxdrv/linux/SUPDrv-linux.c
--- vboxhost.orig/vboxdrv/linux/SUPDrv-linux.c  2015-11-03 20:59:54.561674838 +0100
+++ vboxhost/vboxdrv/linux/SUPDrv-linux.c       2015-11-03 21:03:38.245878400 +0100
@@ -452,16 +452,24 @@
      * opened, at least we'll blindly assume that here.
      */
 #ifdef CONFIG_VBOXDRV_AS_MISC
+# if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0)
+    misc_deregister(&gMiscDeviceUsr);
+#else
     rc = misc_deregister(&gMiscDeviceUsr);
     if (rc < 0)
     {
         Log(("misc_deregister failed with rc=%#x on vboxdrvu\n", rc));
     }
+#endif
+# if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0)
+    misc_deregister(&gMiscDeviceSys);
+#else
     rc = misc_deregister(&gMiscDeviceSys);
     if (rc < 0)
     {
         Log(("misc_deregister failed with rc=%#x on vboxdrv\n", rc));
     }
+#endif
 #else  /* !CONFIG_VBOXDRV_AS_MISC */
 # ifdef CONFIG_DEVFS_FS
     /*

diff -uraN vboxhost.orig/vboxnetadp/linux/VBoxNetAdp-linux.c vboxhost/vboxnetadp/linux/VBoxNetAdp-linux.c
--- vboxhost.orig/vboxnetadp/linux/VBoxNetAdp-linux.c   2015-11-03 20:59:54.572674700 +0100
+++ vboxhost/vboxnetadp/linux/VBoxNetAdp-linux.c        2015-11-03 21:04:51.621961073 +0100
@@ -432,11 +432,15 @@
 
     vboxNetAdpShutdown();
     /* Remove control device */
+# if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0)
+    misc_deregister(&g_CtlDev);
+#else
     rc = misc_deregister(&g_CtlDev);
     if (rc < 0)
     {
         printk(KERN_ERR "misc_deregister failed with rc=%x\n", rc);
     }
+#endif
 
     RTR0Term();
//Nachtrag:

Auch wenn damit die Kernelmodule bauen, braucht es für VirtualBox <= 4.3.30 noch diesen Patch hier

Code:
diff -uraN vboxhost.orig/vboxdrv/r0drv/linux/threadctxhooks-r0drv-linux.c vboxhost/vboxdrv/r0drv/linux/threadctxhooks-r0drv-linux.c
--- vboxhost.orig/vboxdrv/r0drv/linux/threadctxhooks-r0drv-linux.c      (revision 101819)
+++ vboxhost/vboxdrv/r0drv/linux/threadctxhooks-r0drv-linux.c   (revision 101820)
@@ -174,6 +174,10 @@
     preempt_notifier_init(&pThis->hPreemptNotifier, &pThis->hPreemptOps);
     pThis->cRefs       = 1;
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0)
+    preempt_notifier_inc();
+#endif
+
     *phThreadCtx = pThis;
     return VINF_SUCCESS;
 }
@@ -230,6 +234,10 @@
         Assert(!pThis->hPreemptOps.sched_out);
         Assert(!pThis->hPreemptOps.sched_in);
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0)
+        preempt_notifier_dec();
+#endif
+
         ASMAtomicWriteU32(&pThis->u32Magic, ~RTTHREADCTXINT_MAGIC);
         RTMemFree(pThis);
     }
da es sonst bis zum Systemfreeze des Hostsystems kommen kann (aber auf jeden Fall wird der Syslog mit OOPS-Meldungen des Kernel zugeballert und das Gastsystem startet meist auch nicht).

Dieser Patch wird (wie man anhand der Zeile #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0) sehen kann) nicht erst ab Kernel 4.3 sondern schon ab Kernel 4.2 benötigt!

NVidia-Treiber (340.93, ob bei neueren Treibern nötig, keine Ahnung)

Code:
--- nv-procfs.c.orig    2015-11-03 21:13:20.450406685 +0100
+++ nv-procfs.c 2015-11-03 21:16:01.025399221 +0100
@@ -356,7 +356,12 @@
     registry_keys = ((nvl != NULL) ?
             nvl->registry_keys : nv_registry_keys);
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,3,0)
     return seq_printf(s, "Binary: \"%s\"\n", registry_keys);
+#else
+    seq_printf(s, "Binary: \"%s\"\n", registry_keys);
+    return 0;
+#endif
 }
 
 static ssize_t
@@ -552,7 +557,12 @@
     void *v
 )
 {
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,3,0)
     return seq_puts(s, s->private);
+#else
+    seq_puts(s, s->private);
+    return 0;
+#endif
 }
 
 NV_DEFINE_PROCFS_SINGLE_FILE(text_file);
Hier muss man noch ggf. auf seine Installation angepasst den richtigen Pfad zur Datei "nv-procfs.c" finden/eintragen, aber für jemanden, der "bleeding edge"-Kernel testet, sollte das ja kein Problem sein.

Nachtrag2:

Ab den Versionen VirtualBox 5.0.6 (bzw. 4.3.32) und NVIDIA 340.96 (gilt für die 340er-Serie, wie es bei neueren Treiberserien 35X.XX aussieht, keine Ahnung) werden diese Patches NICHT mehr benötigt.

Greetz,

RM
 
Oben