[packages/VirtualBox] - fix build with kernel 5.3 - rel 2

baggins baggins at pld-linux.org
Wed Sep 18 20:08:16 CEST 2019


commit 5a6c7c5b8ba7e0d701523093c10f11f33a94d556
Author: Jan Rękorajski <baggins at pld-linux.org>
Date:   Wed Sep 18 20:07:02 2019 +0200

    - fix build with kernel 5.3
    - rel 2

 VirtualBox.spec  |   4 ++-
 kernel-5.3.patch | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 106 insertions(+), 1 deletion(-)
---
diff --git a/VirtualBox.spec b/VirtualBox.spec
index 18de72f..66ffaa8 100644
--- a/VirtualBox.spec
+++ b/VirtualBox.spec
@@ -42,7 +42,7 @@ exit 1
 
 %define		qtver	5.6.0
 
-%define		rel		1
+%define		rel		2
 %define		pname		VirtualBox
 Summary:	VirtualBox - x86 hardware virtualizer
 Summary(pl.UTF-8):	VirtualBox - wirtualizator sprzętu x86
@@ -84,6 +84,7 @@ Patch14:	%{pname}-multipython.patch
 Patch15:	%{pname}-lightdm-1.19.2.patch
 Patch16:	%{pname}-no-vboxvideo.patch
 Patch17:	qt5-gl.patch
+Patch18:	kernel-5.3.patch
 URL:		http://www.virtualbox.org/
 %if %{with userspace}
 %ifarch %{x8664}
@@ -563,6 +564,7 @@ echo override vboxguest %{_kernel_ver} misc > PLD-MODULE-BUILD/installed/etc/dep
 %patch15 -p0
 %patch16 -p0
 %patch17 -p1
+%patch18 -p1
 
 %{__sed} -i -e 's, at VBOX_DOC_PATH@,%{_docdir}/%{name}-%{version},' \
 	-e 's/Categories=.*/Categories=Utility;Emulator;/' src/VBox/Installer/common/virtualbox.desktop.in
diff --git a/kernel-5.3.patch b/kernel-5.3.patch
new file mode 100644
index 0000000..993dab7
--- /dev/null
+++ b/kernel-5.3.patch
@@ -0,0 +1,103 @@
+On 7/23/19 5:33 PM, S?rgio Basto wrote:
+> Hello,
+> 
+> https://forums.virtualbox.org/viewtopic.php?f=3&t=93944
+> 
+> have someone the solution ?
+
+Yes, I do. The MIT-licensed patch is posted below. After I finish here, I will 
+also post this material on the VBox forum.
+
+The API changes are as follows:
+
+1. The for_ifa() and endfor_ifa() macros are removed. They are so simple that it 
+is better to turn then into in-line code.
+
+2. Routine smp_call_function() is changed from type int to void.
+
+
+
+Index: VirtualBox-6.0.10/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c
+===================================================================
+--- VirtualBox-6.0.10.orig/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c
++++ VirtualBox-6.0.10/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c
+@@ -2123,7 +2123,10 @@ static int vboxNetFltLinuxEnumeratorCall
+ #endif
+     if (in_dev != NULL)
+     {
+-        for_ifa(in_dev) {
++       /* macros for_ifa() and endfor_ifa() disappear for kernel 5.3
++        * Code them directly */
++        struct in_ifaddr *ifa;
++       for (ifa = in_dev->ifa_list; ifa; ifa = ifa->ifa_next) {
+             if (VBOX_IPV4_IS_LOOPBACK(ifa->ifa_address))
+                 return NOTIFY_OK;
+
+@@ -2137,7 +2140,7 @@ static int vboxNetFltLinuxEnumeratorCall
+
+             pThis->pSwitchPort->pfnNotifyHostAddress(pThis->pSwitchPort,
+                 /* :fAdded */ true, kIntNetAddrType_IPv4, &ifa->ifa_address);
+-        } endfor_ifa(in_dev);
++        }
+     }
+ 
+     /*
+Index: VirtualBox-6.0.10/src/VBox/Runtime/r0drv/linux/mp-r0drv-linux.c
+===================================================================
+--- VirtualBox-6.0.10.orig/src/VBox/Runtime/r0drv/linux/mp-r0drv-linux.c
++++ VirtualBox-6.0.10/src/VBox/Runtime/r0drv/linux/mp-r0drv-linux.c
+@@ -283,12 +283,16 @@ RTDECL(int) RTMpOnAll(PFNRTMPWORKER pfnW
+     if (RTCpuSetCount(&OnlineSet) > 1)
+     {
+         /* Fire the function on all other CPUs without waiting for completion. */
+-# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)
++       smp_call_function(rtmpLinuxAllWrapper, &Args, 0 /* wait */);
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
+         int rc = smp_call_function(rtmpLinuxAllWrapper, &Args, 0 /* wait */);
+-# else
++#else
+         int rc = smp_call_function(rtmpLinuxAllWrapper, &Args, 0 /* retry */, 0 /* wait */);
+-# endif
++#endif
++# if LINUX_VERSION_CODE < KERNEL_VERSION(5, 3, 0)
+         Assert(!rc); NOREF(rc);
++#endif
+     }
+ #endif
+
+@@ -326,7 +330,9 @@ RTDECL(int) RTMpOnOthers(PFNRTMPWORKER p
+ {
+ #ifdef CONFIG_SMP
+     IPRT_LINUX_SAVE_EFL_AC();
++#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 3, 0)
+     int rc;
++#endif
+     RTMPARGS Args;
+
+     RTTHREADPREEMPTSTATE PreemptState = RTTHREADPREEMPTSTATE_INITIALIZER;
+@@ -337,14 +343,18 @@ RTDECL(int) RTMpOnOthers(PFNRTMPWORKER p
+     Args.cHits = 0;
+
+     RTThreadPreemptDisable(&PreemptState);
+-# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)
++    smp_call_function(rtmpLinuxWrapper, &Args, 1 /* wait */);
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
+     rc = smp_call_function(rtmpLinuxWrapper, &Args, 1 /* wait */);
+-# else /* older kernels */
++#else /* older kernels */
+     rc = smp_call_function(rtmpLinuxWrapper, &Args, 0 /* retry */, 1 /* wait */);
+-# endif /* older kernels */
++#endif /* older kernels */
+     RTThreadPreemptRestore(&PreemptState);
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 3, 0)
+     Assert(rc == 0); NOREF(rc);
++#endif
+     IPRT_LINUX_RESTORE_EFL_AC();
+ #else
+     RT_NOREF(pfnWorker, pvUser1, pvUser2);
+
+Larry
+
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/VirtualBox.git/commitdiff/5a6c7c5b8ba7e0d701523093c10f11f33a94d556



More information about the pld-cvs-commit mailing list