Package: virtualbox-dkms Version: 5.2.2-dfsg-2 'r0drv/linux/timer-r0drv-linux.c' fails to build for kernel versions >=~4.14.0 (git commit 185981d5), due to 'include/linux/timer.h' recently dropping init_timer_pinned() in favor of newer timer_setup()
Patch: --- tstdir/usr/src/virtualbox-5.2.2/r0drv/linux/timer-r0drv-linux.c 2017-11-23 04:22:25.000000000 -0500 +++ /home/deb/timer-r0drv-linux.c 2017-12-03 16:47:35.627778217 -0500 @@ -720,9 +720,15 @@ * * @param ulUser Address of the sub-timer structure. */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0) +static void rtTimerLinuxStdCallback(struct timer_list *t) +{ + PRTTIMERLNXSUBTIMER pSubTimer = from_timer(pSubTimer, t, u.Std.LnxTimer); +#else static void rtTimerLinuxStdCallback(unsigned long ulUser) { PRTTIMERLNXSUBTIMER pSubTimer = (PRTTIMERLNXSUBTIMER)ulUser; +#endif /* => KERNEL_VERSION(4, 14, 0) */ PRTTIMER pTimer = pSubTimer->pParent; RTTIMERLNX_LOG(("stdcallback %p\n", pTimer)); @@ -1584,15 +1590,19 @@ else #endif { -#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) - init_timer_pinned(&pTimer->aSubTimers[iCpu].u.Std.LnxTimer); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0) + timer_setup(&pTimer->aSubTimers[iCpu].u.Std.LnxTimer, rtTimerLinuxStdCallback, TIMER_PINNED); #else + #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) + init_timer_pinned(&pTimer->aSubTimers[iCpu].u.Std.LnxTimer); + #else init_timer(&pTimer->aSubTimers[iCpu].u.Std.LnxTimer); -#endif + #endif /* >= KERNEL_VERSION(4, 8, 0) */ pTimer->aSubTimers[iCpu].u.Std.LnxTimer.data = (unsigned long)&pTimer->aSubTimers[iCpu]; pTimer->aSubTimers[iCpu].u.Std.LnxTimer.function = rtTimerLinuxStdCallback; pTimer->aSubTimers[iCpu].u.Std.LnxTimer.expires = jiffies; pTimer->aSubTimers[iCpu].u.Std.u64NextTS = 0; +#endif /* => KERNEL_VERSION(4, 14, 0) */ } pTimer->aSubTimers[iCpu].iTick = 0; pTimer->aSubTimers[iCpu].pParent = pTimer;