﻿id	summary	reporter	owner	description	type	status	component	version	resolution	keywords	cc	guest	host
18911	Fixes for Linux kernel 5.3 wanted - part 1	Frank Batschulat (Oracle)	Frank Batschulat (Oracle)	"for the upcomming 5.3 Linux kernel we will require changes to the
!Virtualbox code base.

Here's a first batch already identified:

[https://www.virtualbox.org/pipermail/vbox-dev/2019-July/015297.html][[BR]]
[https://forums.virtualbox.org/viewtopic.php?f=3&t=93944]

To quote the submitter:

Larry Finger Larry.Finger at lwfinger.net
Wed Jul 24 00:13:47 UTC 2019

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);
}}}
"	defect	closed	host support	VirtualBox 6.0.12	fixed	linux kernel 5.3		Linux	Linux
