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)
//Nachtrag:
Auch wenn damit die Kernelmodule bauen, braucht es für VirtualBox <= 4.3.30 noch diesen Patch hier
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)
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
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();
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);
}
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);
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