Problem: The current release of the Linux kernel as of this writing,
4.14.0, is incompatible with VirtualBox kernel modules
5.1.30 as per this error:
/var/tmp/portage/app-emulation/virtualbox-modules-5.1.30/work/vboxdrv/r0drv/linux/timer-r0drv-linux.c: In function 'VBoxHost_RTTimerCreateEx': /var/tmp/portage/app-emulation/virtualbox-modules-5.1.30/work/vboxdrv/r0drv/linux/timer-r0drv-linux.c:1588:13: error: implicit declaration of function 'init_timer_pinned'; did you mean 'init_timer_key'? [-Werror=implicit-function-declaration] init_timer_pinned(&pTimer->aSubTimers[iCpu].u.Std.LnxTimer); ^~~~~~~~~~~~~~~~~
Cause: The issue is created by this commit which removes
init_timer_pinned and replaces it with a new mechanism.
Resolution: This is a newer bug and was a little bit tougher as I couldn't find any distro patches to base my patch off of. I had to spin up KDevelop and go it alone.
KDevelop makes this surprisingly easy. You just import the Makefile. Add a few include paths and you've got some good guideposts to go by.
It took some digging to restructure this thing, but in the end the patch turned out pretty simple as per the gist below. Use this at your own risk. I don't have a solid understanding of how these timers work. I've confirmed VirtualBox does launch with this build, but I haven't put it though any heavy stress testing.