-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
-