ad4b460c81425e301d8836dd94fa295c37814fc6
[gentoo.git] /
1 https://bugs.gentoo.org/694614
2 https://www.virtualbox.org/ticket/18911#comment:5
3
4 --- a/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c
5 +++ b/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c
6 @@ -2123,7 +2123,9 @@ static int vboxNetFltLinuxEnumeratorCallback(struct notifier_block *self, unsign
7  #endif
8      if (in_dev != NULL)
9      {
10 -        for_ifa(in_dev) {
11 +        struct in_ifaddr *ifa;
12 +
13 +        for (ifa = in_dev->ifa_list; ifa; ifa = ifa->ifa_next) {
14              if (VBOX_IPV4_IS_LOOPBACK(ifa->ifa_address))
15                  return NOTIFY_OK;
16  
17 @@ -2137,7 +2139,7 @@ static int vboxNetFltLinuxEnumeratorCallback(struct notifier_block *self, unsign
18  
19              pThis->pSwitchPort->pfnNotifyHostAddress(pThis->pSwitchPort,
20                  /* :fAdded */ true, kIntNetAddrType_IPv4, &ifa->ifa_address);
21 -        } endfor_ifa(in_dev);
22 +        }
23      }
24  
25      /*
26 --- a/Runtime/r0drv/linux/mp-r0drv-linux.c
27 +++ b/Runtime/r0drv/linux/mp-r0drv-linux.c
28 @@ -283,12 +283,15 @@ RTDECL(int) RTMpOnAll(PFNRTMPWORKER pfnWorker, void *pvUser1, void *pvUser2)
29      if (RTCpuSetCount(&OnlineSet) > 1)
30      {
31          /* Fire the function on all other CPUs without waiting for completion. */
32 -# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
33 +# if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)
34 +        smp_call_function(rtmpLinuxAllWrapper, &Args, 0 /* wait */);
35 +# elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
36          int rc = smp_call_function(rtmpLinuxAllWrapper, &Args, 0 /* wait */);
37 +        Assert(!rc); NOREF(rc);
38  # else
39          int rc = smp_call_function(rtmpLinuxAllWrapper, &Args, 0 /* retry */, 0 /* wait */);
40 -# endif
41          Assert(!rc); NOREF(rc);
42 +# endif
43      }
44  #endif
45  
46 @@ -326,7 +329,6 @@ RTDECL(int) RTMpOnOthers(PFNRTMPWORKER pfnWorker, void *pvUser1, void *pvUser2)
47  {
48  #ifdef CONFIG_SMP
49      IPRT_LINUX_SAVE_EFL_AC();
50 -    int rc;
51      RTMPARGS Args;
52  
53      RTTHREADPREEMPTSTATE PreemptState = RTTHREADPREEMPTSTATE_INITIALIZER;
54 @@ -337,14 +339,17 @@ RTDECL(int) RTMpOnOthers(PFNRTMPWORKER pfnWorker, void *pvUser1, void *pvUser2)
55      Args.cHits = 0;
56  
57      RTThreadPreemptDisable(&PreemptState);
58 -# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
59 -    rc = smp_call_function(rtmpLinuxWrapper, &Args, 1 /* wait */);
60 +# if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)
61 +    smp_call_function(rtmpLinuxWrapper, &Args, 1 /* wait */);
62 +# elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
63 +    int rc = smp_call_function(rtmpLinuxWrapper, &Args, 1 /* wait */);
64 +    Assert(rc == 0); NOREF(rc);
65  # else /* older kernels */
66 -    rc = smp_call_function(rtmpLinuxWrapper, &Args, 0 /* retry */, 1 /* wait */);
67 +    int rc = smp_call_function(rtmpLinuxWrapper, &Args, 0 /* retry */, 1 /* wait */);
68 +    Assert(rc == 0); NOREF(rc);
69  # endif /* older kernels */
70      RTThreadPreemptRestore(&PreemptState);
71  
72 -    Assert(rc == 0); NOREF(rc);
73      IPRT_LINUX_RESTORE_EFL_AC();
74  #else
75      RT_NOREF(pfnWorker, pvUser1, pvUser2);