diff --git a/fixes_for_4.15.patch b/fixes_for_4.15.patch index aecbc56..3c3c7cd 100644 --- a/fixes_for_4.15.patch +++ b/fixes_for_4.15.patch @@ -1,15 +1,180 @@ +This patch file makes the necessary changes to the VirtualBox 5.1.30 sources +to allow the kernel modules to build with kernel 4.15. + +The API changes are of several types: + +1. The timer initialization routine init_timer_pinned() no longer exists, and + is replaced by timer_setup(). +2. The timer callback routine calling sequence is changed as is the technique + for getting the timer information from the callback parameters. +3. The calling sequence for drm_encoder_find() is changed. +4. The calling sequence for the .get and .set members of the module_param_call() + calls have changed. + +This patch is released under the MIT license when appropriate, GPLv2 otherwise. + +Signed-off-by: Larry Finger + Index: VirtualBox-5.1.30/src/VBox/Runtime/r0drv/linux/timer-r0drv-linux.c =================================================================== --- VirtualBox-5.1.30.orig/src/VBox/Runtime/r0drv/linux/timer-r0drv-linux.c +++ VirtualBox-5.1.30/src/VBox/Runtime/r0drv/linux/timer-r0drv-linux.c -@@ -1584,7 +1584,9 @@ RTDECL(int) RTTimerCreateEx(PRTTIMER *pp +@@ -715,6 +715,14 @@ static enum hrtimer_restart rtTimerLinux + #endif /* RTTIMER_LINUX_WITH_HRTIMER */ + + ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) ++/** ++ * Timer callback for kernels 4.15 and later ++ */ ++static void rtTimerLinuxStdCallback(struct timer_list *t) ++{ ++ PRTTIMERLNXSUBTIMER pSubTimer = from_timer(pSubTimer, t, u.Std.LnxTimer); ++#else + /** + * Timer callback function for standard timers. + * +@@ -723,6 +731,7 @@ static enum hrtimer_restart rtTimerLinux + static void rtTimerLinuxStdCallback(unsigned long ulUser) + { + PRTTIMERLNXSUBTIMER pSubTimer = (PRTTIMERLNXSUBTIMER)ulUser; ++#endif + PRTTIMER pTimer = pSubTimer->pParent; + + RTTIMERLNX_LOG(("stdcallback %p\n", pTimer)); +@@ -1584,13 +1593,17 @@ RTDECL(int) RTTimerCreateEx(PRTTIMER *pp else #endif { -#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) -+ __init_timer(&pTimer->aSubTimers[iCpu].u.Std.LnxTimer, TIMER_PINNED); ++ timer_setup(&pTimer->aSubTimers[iCpu].u.Std.LnxTimer,rtTimerLinuxStdCallback, TIMER_PINNED); +#elif 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 ++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0) + pTimer->aSubTimers[iCpu].u.Std.LnxTimer.data = (unsigned long)&pTimer->aSubTimers[iCpu]; + pTimer->aSubTimers[iCpu].u.Std.LnxTimer.function = rtTimerLinuxStdCallback; ++#endif + pTimer->aSubTimers[iCpu].u.Std.LnxTimer.expires = jiffies; + pTimer->aSubTimers[iCpu].u.Std.u64NextTS = 0; + } +Index: VirtualBox-5.1.30/src/VBox/Additions/common/VBoxGuest/VBoxGuest-linux.c +=================================================================== +--- VirtualBox-5.1.30.orig/src/VBox/Additions/common/VBoxGuest/VBoxGuest-linux.c ++++ VirtualBox-5.1.30/src/VBox/Additions/common/VBoxGuest/VBoxGuest-linux.c +@@ -958,7 +958,11 @@ EXPORT_SYMBOL(VBoxGuestIDCCall); + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) + + /** log and dbg_log parameter setter. */ ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) ++static int vgdrvLinuxParamLogGrpSet(const char *pszValue, const struct kernel_param *pParam) ++#else + static int vgdrvLinuxParamLogGrpSet(const char *pszValue, struct kernel_param *pParam) ++#endif + { + if (g_fLoggerCreated) + { +@@ -973,7 +973,11 @@ static int vgdrvLinuxParamLogGrpSet(cons + } + + /** log and dbg_log parameter getter. */ ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) ++static int vgdrvLinuxParamLogGrpGet(char *pszBuf, const struct kernel_param *pParam) ++#else + static int vgdrvLinuxParamLogGrpGet(char *pszBuf, struct kernel_param *pParam) ++#endif + { + PRTLOGGER pLogger = pParam->name[0] == 'd' ? RTLogDefaultInstance() : RTLogRelGetDefaultInstance(); + *pszBuf = '\0'; +@@ -984,7 +984,11 @@ static int vgdrvLinuxParamLogGrpGet(char + + + /** log and dbg_log_flags parameter setter. */ ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) ++static int vgdrvLinuxParamLogFlagsSet(const char *pszValue, const struct kernel_param *pParam) ++#else + static int vgdrvLinuxParamLogFlagsSet(const char *pszValue, struct kernel_param *pParam) ++#endif + { + if (g_fLoggerCreated) + { +@@ -998,7 +998,11 @@ static int vgdrvLinuxParamLogFlagsSet(co + } + + /** log and dbg_log_flags parameter getter. */ ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) ++static int vgdrvLinuxParamLogFlagsGet(char *pszBuf, const struct kernel_param *pParam) ++#else + static int vgdrvLinuxParamLogFlagsGet(char *pszBuf, struct kernel_param *pParam) ++#endif + { + PRTLOGGER pLogger = pParam->name[0] == 'd' ? RTLogDefaultInstance() : RTLogRelGetDefaultInstance(); + *pszBuf = '\0'; +@@ -1009,7 +1009,11 @@ static int vgdrvLinuxParamLogFlagsGet(ch + + + /** log and dbg_log_dest parameter setter. */ ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) ++static int vgdrvLinuxParamLogDstSet(const char *pszValue, const struct kernel_param *pParam) ++#else + static int vgdrvLinuxParamLogDstSet(const char *pszValue, struct kernel_param *pParam) ++#endif + { + if (g_fLoggerCreated) + { +@@ -1023,7 +1023,11 @@ static int vgdrvLinuxParamLogDstSet(cons + } + + /** log and dbg_log_dest parameter getter. */ ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) ++static int vgdrvLinuxParamLogDstGet(char *pszBuf, const struct kernel_param *pParam) ++#else + static int vgdrvLinuxParamLogDstGet(char *pszBuf, struct kernel_param *pParam) ++#endif + { + PRTLOGGER pLogger = pParam->name[0] == 'd' ? RTLogDefaultInstance() : RTLogRelGetDefaultInstance(); + *pszBuf = '\0'; +@@ -1034,7 +1034,11 @@ static int vgdrvLinuxParamLogDstGet(char + + + /** r3_log_to_host parameter setter. */ ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) ++static int vgdrvLinuxParamR3LogToHostSet(const char *pszValue, const struct kernel_param *pParam) ++#else + static int vgdrvLinuxParamR3LogToHostSet(const char *pszValue, struct kernel_param *pParam) ++#endif + { + if ( pszValue == NULL + || *pszValue == '\0' +@@ -1052,7 +1052,11 @@ static int vgdrvLinuxParamR3LogToHostSet + } + + /** r3_log_to_host parameter getter. */ ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) ++static int vgdrvLinuxParamR3LogToHostGet(char *pszBuf, const struct kernel_param *pParam) ++#else + static int vgdrvLinuxParamR3LogToHostGet(char *pszBuf, struct kernel_param *pParam) ++#endif + { + strcpy(pszBuf, g_DevExt.fLoggingEnabled ? "enabled" : "disabled"); + return strlen(pszBuf); +Index: VirtualBox-5.1.30/src/VBox/Additions/linux/drm/vbox_mode.c +=================================================================== +--- VirtualBox-5.1.30.orig/src/VBox/Additions/linux/drm/vbox_mode.c ++++ VirtualBox-5.1.30/src/VBox/Additions/linux/drm/vbox_mode.c +@@ -369,7 +369,12 @@ static struct drm_encoder *vbox_best_sin + LogFunc(("vboxvideo: %d: connector=%p\n", __LINE__, connector)); + /* pick the encoder ids */ + if (enc_id) ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) ++ return drm_encoder_find(connector->dev, NULL, enc_id); ++#else + return drm_encoder_find(connector->dev, enc_id); ++#endif ++ + LogFunc(("vboxvideo: %d\n", __LINE__)); + return NULL; + } diff --git a/virtualbox.changes b/virtualbox.changes index 0b7522c..ab56c16 100644 --- a/virtualbox.changes +++ b/virtualbox.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Sat Dec 2 03:57:55 UTC 2017 - Larry.Finger@lwfinger.net + +- Update "fixes_for_4.15.patch" for further API changes in kernel 4.15. + ------------------------------------------------------------------- Thu Nov 23 13:47:36 UTC 2017 - rbrown@suse.com